Episode Transcript
Transcripts are displayed as originally observed. Some content, including advertisements may have changed.
Use Ctrl + F to search
0:00
Fortune 500 companies trust Interoptic for
0:02
optical transceivers and cables. Since 2004,
0:04
Interoptic has provided high-performance optics and
0:06
cables at a fraction of the
0:09
cost of OEM gear. Interoptic products
0:11
are 100% tested and backed up
0:13
by real engineers. Work with the
0:15
optics experts at Interoptic. Find out
0:18
more at Interoptic.com/packet pushers. Welcome
0:20
to Heavy Network the flagship podcast from
0:22
the Packet Pushers podcast network. Heavy networking
0:24
has been coming to you weekly since
0:26
May 2010. I can't believe I still
0:28
have this job. We are coming up
0:30
on our 15th anniversary and that is
0:32
pretty cool. I'm Ethan Banks and with
0:34
me is Drew, Conray Murray. You can
0:37
find us on LinkedIn, Blue Sky and
0:39
the 100% free Packet Pushers community slack
0:41
group. Give us a follow and DM
0:43
us in any or all of those
0:45
places. Our topic today is network automation.
0:47
Okay, so thinking about this, maybe I
0:49
should say today's topic is advanced network
0:51
automation because specifically we're going to jump
0:54
into continuous integration, continuous deployment pipelines. As
0:56
network automation evolves, CICD pipelines have found
0:58
use cases, but getting your head around
1:01
what they are, how they work, whether
1:03
you actually need them, that can all
1:05
be a challenge. Tony Burke is our
1:07
guest today and Tony brought this topic
1:10
to us as it's part of the
1:12
automation curriculum that he teaches as a
1:14
networking instructor. And of course, again, whether
1:17
you need a pipeline at all is
1:19
an open question because we don't do
1:21
things because they're cool. We do things
1:23
because they make our lives easier. Okay, I
1:25
lied a little bit because sometimes
1:27
I want to do things just
1:30
because they're cool, but I don't
1:32
want to put them into broad
1:34
unless I am prepared to live
1:36
with them forever. And so Tony
1:38
is going to help us figure
1:40
out whether or not we need
1:42
pipelines. And if we do need
1:44
them, what they accomplish and if
1:46
we do need them, what they
1:49
accomplish and how to implement them
1:51
and if you've never listened to
1:53
a podcast with Tony before, Search
1:55
for Tony Burke on packetpushers.net to
1:57
find every episode where he...
1:59
has appeared. So Tony, welcome back. And
2:01
let's jump in with the first question here.
2:04
The goal of network automation as we were
2:06
discussing this prepping for the show. We kind
2:08
of agree the goal of network automation is
2:11
not to build a pipeline. There's no specific
2:13
tool. That's the goal. All right so before
2:15
we start talking about pipelines what then is
2:17
the goal of network automation we should be
2:20
keeping in mind. So generally speaking the reason
2:22
why we do automation is not because like
2:24
you said because we're doing something cool is
2:27
because we want to we want to get
2:29
something out of it so there's generally four
2:31
things that we get with network automation in
2:33
general not necessarily CICD but just network automation
2:36
in general so we get scale so the
2:38
number of devices that we can configure is
2:40
going to be much higher with network automation
2:43
than if we were doing it manually. complexity.
2:45
So there is some configurations that are better
2:47
generated than they are typed out by hand.
2:49
So easy B and VX land is one
2:52
of them. There's a lot of spinning plates,
2:54
I think you put it on one of
2:56
our previous podcast. So there's a lot of
2:59
that going on. So you want something to
3:01
generate those configs. So complexity, how often do
3:03
we make these changes? Do we want to
3:05
make them more frequently than we have before?
3:08
We can move from making a change every
3:10
change every two weeks. And then finally accuracy,
3:12
making sure that the changes that we make
3:15
actually work the way that we expect them.
3:18
Okay, so those are those are
3:20
straightforward enough. We've and we've heard
3:22
that before those arguments about network
3:25
automation. The one about accuracy is
3:27
one of the leaders to me
3:29
because because we human suck compared
3:31
to the robots. So if we
3:33
can template our change and know
3:35
exactly what's going to happen without
3:37
us fat fingering things because we're
3:39
doing the change programmatically that's that's
3:41
a win for sure. But then
3:43
everything else just at scale complexity
3:46
of configurations. I haven't had to
3:48
deal with EVP in. And that
3:50
was another one that was, I
3:52
know EVPEN's even more complex by
3:54
a significant margin, but even DMVPN
3:56
was hard. The configuration I'd have
3:58
to put in just for a
4:00
single interface to for a. for
4:02
a DM, VPM facing box was
4:04
enormous and complicated. So, okay. Well
4:06
then, with that backdrop, a scale
4:09
of devices, complexities, configurations, frequency of
4:11
changes, and then accuracy, making sure
4:13
we're taking, reducing the amount of
4:15
finger presses that a human has
4:17
to invoke in order to make
4:19
a change, let's drill into CICD.
4:21
Continuous integration, continuous deployment. Can you
4:23
translate these? What I really think
4:25
of these is developer concepts Tony,
4:27
translate these developer concepts into network
4:30
engineering terms. Yeah, there's a couple
4:32
different ways we could go with
4:34
that. So CICD is a development
4:36
term and it means continuous integration.
4:38
continuous development or something like that.
4:40
And what it was is in
4:42
the early 2000s there was a
4:44
need to rapidly iterate software. So
4:46
developers had been using the more
4:48
traditional waterfall method where they would
4:51
make a lot of changes to
4:53
code and then deploy everything all
4:55
at once. And as you can
4:57
imagine that probably didn't go well.
4:59
You know we have the same
5:01
problem in networking as we make
5:03
some a bunch of changes we
5:05
deploy them all at once and
5:07
they don't go well. With developers
5:09
they probably had at least a
5:12
QA and maybe user acceptance testing
5:14
UAT cycle before they did put
5:16
it into prod but still. you
5:18
would think, you know, one big
5:20
whacking change, right? You would think,
5:22
yes. I mean, I worked in
5:24
a bunch of shops where that,
5:26
where that was the hope that,
5:28
like, man, I hope we catch
5:30
the stuff before we send this
5:33
big massive change into production. But
5:35
yeah, putting into production inevitably, the
5:37
joke would be, yeah, so and
5:39
so just deployed a new version
5:41
and I guess where the beta
5:43
testers the beta testers as they
5:45
released it on an unsuspectinging public.
5:47
So the last job that I
5:49
had where I was a cis
5:51
admin, where I was a Linux
5:54
admin, that was exactly how we
5:56
did it. So the developer. would,
5:58
we were competing against Google if
6:00
that gives you an indication of
6:02
the hubris that was going on.
6:04
But so they, you know, the,
6:06
the management team would come up
6:08
with the new feature and they
6:10
would give it to the development
6:12
team and they would quickly implement
6:15
it. And then their, their entire
6:17
testing process was putting a $2
6:19
transaction to the system. That was
6:21
it. They did nothing else. There
6:23
was no low testing, unit testing,
6:25
integration testing. And then we would
6:27
deploy it at like midnight and
6:29
nine times out of 10 it
6:31
would break like the whole thing
6:33
would halt. And they would try
6:36
to blame the servers and the
6:38
network and all that but it
6:40
was just it was just a
6:42
bad way to deploy that code.
6:44
And we weren't being able, we
6:46
could not keep up with Google
6:48
who was already implementing these CICD
6:50
tactics, the CICD processes. So what
6:52
CICD does is it's a process.
6:54
And I'm going to give you
6:57
a general idea of what that
6:59
process is. It could, it certainly
7:01
would differ from shop to shop,
7:03
but from a developer perspective. So
7:05
if someone comes up with an
7:07
idea for a new feature in
7:09
a given code base, so it's
7:11
given to the developer, the developer,
7:13
typically just one person, will write
7:15
the code to implement that feature.
7:18
And then when they're done, then
7:20
they they'll do a commit to
7:22
a like a get repository could
7:24
be get hub get lab whatever
7:26
that commit will automatically kick off
7:28
a series of processes. So the
7:30
thing about C. ICD is it
7:32
integrates testing before deployment and after
7:34
deployment and even automation of the
7:36
deployment, but it also automates going
7:39
from one step to the next.
7:41
So by just doing a commit
7:43
to that code base. in the
7:45
in the get hub repo or
7:47
get lab repo or whatever it
7:49
is, it automatically kicks off a
7:51
bunch of tests. So generally they
7:53
start off with what's called unit
7:55
test. So just testing the individual
7:57
functionality of that code. And there
8:00
is ways to write tests for
8:02
your code and. And if it
8:04
passes all those, if it doesn't
8:06
pass those tests, then the developer
8:08
gets a report, the developer goes
8:10
in and tries to fix those
8:12
problems. And then once there is
8:14
a good test, then it goes
8:16
into integration testing. So integration testing
8:18
tests integration with the other components
8:21
of whatever system, it could be
8:23
microservices or whatever, making sure that
8:25
it works with a credit card
8:27
transaction processor, etc. etc. So once
8:29
all that's done, then it will
8:31
get built. Maybe they'll be of
8:33
like a pre-deployment process. And by
8:35
the way, the software that's doing
8:37
this shepherding through the process could
8:39
be get have actions, it could
8:42
be Jenkins, there's a bunch of
8:44
other tools that are specific to
8:46
a platform like a typescript or
8:48
whatever, and those are software development
8:50
platforms. And then when it's time
8:52
for production. time to go to
8:54
deploy to production and of course
8:56
that's automated as well. The only
8:58
manual part about this process would
9:00
be the editing of the code
9:03
and then probably the big shiny
9:05
button that says deploy. So generally
9:07
we like humans to actually do
9:09
the deploy to decide okay we're
9:11
ready to deploy but they're deploying
9:13
this in the middle of the
9:15
day. So they're not waiting until
9:17
like a low usage time. So
9:19
the the blue sky is the
9:21
Facebook. the Netflix is they're deploying
9:24
typically several times per day dozens
9:26
of times reading Google's case are
9:28
probably deploying thousands of times per
9:30
day. But because this process is
9:32
so trusted now it doesn't work
9:34
out every time there's always going
9:36
to be problems but this because
9:38
this process is so trusted they're
9:40
able to rapidly iterate on the
9:42
software platforms and get quality code
9:45
out much faster than they ever
9:47
have been before. Are
9:50
there mechanisms in place? I'm just thinking
9:53
of the example you gave of like,
9:55
okay, I'm writing the part of the
9:57
code for this website that, you know,
9:59
attaches an image to a picture when
10:01
a user does a search on an
10:03
item. To make sure, I guess I'm
10:05
thinking like, there's so many moving parts
10:07
here, like, okay, I tested it against
10:09
the code that's published now, but the
10:11
folks doing the credit card transactions are
10:13
also updating almost at the same time.
10:15
So how do we know that their
10:17
changes that they're making are going to
10:19
work with the changes that I just
10:21
made that worked with version X of
10:23
the code, but now it's version X.1
10:25
and they're making a change and maybe
10:27
something broken. the thing I did that,
10:29
do you see where I'm getting at?
10:31
Yeah, yeah, there's always those issues that
10:33
can come up. And a big part
10:35
of this process is testing. We test
10:37
the code before, and we test the
10:39
code after. So once it goes, before
10:41
we goes into production, we're doing unit
10:43
tests and integration tests, and then after
10:45
the code is deployed, we're doing other
10:47
types of tests to make sure that
10:49
everything's working the way that we expect
10:51
it to work. Now I want you
10:53
to keep that in mind because that's
10:55
going to be a big part of
10:57
the transition from the software development world
10:59
over to the networking development world. The
11:01
integration with other components really isn't a
11:03
big issue when we move it over
11:06
into the networking world, but it certainly
11:08
is an issue in the developer world,
11:10
where they have that kind of thing.
11:12
Another thing about the deployments is if
11:14
there is a problem that happens after
11:16
all the tests pass and they deploy
11:18
it and they still find a problem,
11:20
then they write a new test. So
11:22
the number of tests that they have,
11:24
these unit test integration integration, these unit
11:26
test integration tests, they tend to go
11:28
over time. they're kind of always paired
11:30
together spoken in the same breath almost.
11:32
Are they inseparable? Do you, if you're
11:34
doing one, do you have to do
11:36
the other as well? Yeah, pretty much.
11:38
In fact, they're really hard to separate.
11:40
And for example, Arista says, you know
11:42
what, we're just gonna call continuous integration.
11:44
They don't even use CICD. And so
11:46
the two terms are, they're hard to
11:48
separate. It's hard to cut the process
11:50
off that says continuous integration and the
11:52
other part. And the boundary between them
11:54
can get a little fuzzy. So we
11:56
just we just use it in the
11:58
same breath and there's not. a point
12:00
in separating them. You also, and the pipeline
12:03
is another thing that's in the same breath
12:05
as CI and CD, is that, how do
12:07
we think of that? Is that just the
12:09
practical tool for delivering CI and CD? Yeah,
12:11
that's the pipeline is how do we get
12:14
from step A to step B to step
12:16
B to step C to steps D? It's
12:18
the glue that ties it all together. So
12:20
there's a process that will do the unit
12:22
test. There's a process that will do the
12:25
integration test. There's a process that will do
12:27
the integration test. There's a process that will
12:29
build the artifacts for deployment. There's a process
12:31
that will do deployment. So how do we tie
12:33
all that together? figuring out all the different steps
12:36
in the order that they need to be achieved
12:38
in, and then finding the software that's going to
12:40
do that automation to get from one step to
12:42
the other. So again, that's like get have actions
12:45
or Jenkins or something like that. Yeah, I filled it
12:47
with Jenkins a little bit and it really
12:49
demystifies pipeline, even if you don't have using
12:51
Jenkins as a tool, just some of the
12:53
so many tutorials out there and it's so
12:55
widely supported that if trying to get your
12:57
head around what the pipeline does as a
12:59
series of steps as kind of glue that
13:02
makes the whole process happen. To me, Tony,
13:04
it's like it comes quick just spending a
13:06
few minutes with it's like, oh, okay, I
13:08
see what's going on here. Yeah, yeah, there's
13:10
not really anything too complicated about it.
13:12
It's just when this happens, do this.
13:15
And then when that is done, do
13:17
this thing next. So is pipeline
13:19
a logical construct or is there
13:22
also sort of a software application
13:24
attached to it? Or is it just a
13:26
set of processes and we'll find
13:28
different software applications to help us
13:31
stitch those processes together? It's the
13:33
latter. It's a concept. We've got
13:35
these, we've got all these steps, like, you
13:38
know, think about a deployment process. We've got
13:40
all these steps we need to accomplish. How
13:42
much of it can we automate? And usually
13:44
we can automate most of it. We don't always
13:46
have to automate, but most of it, but
13:49
we can. And again, the only part that
13:51
we generally don't automate is the actual deploy,
13:53
you know, the decision to hit the button
13:55
that says deploy, the big shiny red button.
13:57
But other than that, the rest of it, we, we
13:59
can. do through automation and how do
14:01
we stitch all that together and that's
14:04
what like Jenkins or get-up actions do.
14:06
Okay. Well, let's do some visualizations, Tony.
14:08
Let's say I'm far enough along with
14:10
my network automation. I'm on a journey,
14:13
Tony. It's far enough along on my
14:15
journey that I can I can make
14:17
configuration magic happen with with Python or
14:19
Ansible and I'm curious about a pipeline.
14:22
So what does a pipeline bring to
14:24
the table for me? Well, let's take
14:26
a step back. So we talked about
14:28
CIC in terms of software development and
14:31
what we did, what we've done with
14:33
a lot of network automation is we've
14:35
taken a lot of the concepts that
14:37
they've done in the software world and
14:40
we translated them into the into the
14:42
networking world and like any kind of
14:44
translation like that, not everything copies over
14:47
one to one. So let's talk about
14:49
what a pipeline would look like, what
14:51
CIC to looks like in terms of
14:53
network administration, network automation. And there's again
14:56
it's one of the things where there
14:58
could be a lot of variability but
15:00
I'm going to give you a very
15:02
general simplified concept of it so it
15:05
starts off with a type of network
15:07
change so I want to add a
15:09
V land to my fabric or I
15:11
want to add a new upstream provider
15:14
so BGP or I want to if
15:16
I've got an SDWAN solution I want
15:18
to add a new new site so
15:20
I've got the idea. So then I
15:23
go into the, in most CICD, we've
15:25
got some sort of network automation that
15:27
it works as what we would call
15:29
network as code or intent based networking.
15:32
So we have an abstracted representation of
15:34
desired networking state. So that could be
15:36
a yamel file, could be a spreadsheet,
15:38
something abstracted. So there's no syntax. It's
15:41
just Vlan 10 and the SPI is
15:43
going to be 10101 slash 24, something
15:45
like that. So we can describe what
15:48
we want without giving it actual syntax.
15:50
It could be on a fabric wide
15:52
basis. So I've got just one file
15:54
that will configure dozens or hundreds of
15:57
devices or it could be on an
15:59
individual device basis. So I'm looking at
16:01
leaf one or router five, or it
16:03
could be combination thereof. And so I've
16:06
got these files or I've got these
16:08
abstracted representations of desired configuration state, and
16:10
then I make the change. Now with
16:12
networking as code, once I make the
16:15
change, then the next step would be
16:17
to generate the configs from that abstracted
16:19
data model. We call it a data
16:21
model. So a yamel file spreadsheet, whatever.
16:24
So I run a command and then
16:26
it takes the information in that abstracted
16:28
representation and will generate actual syntax for
16:30
the devices. So now I've got syntax.
16:33
One of the things that I could
16:35
do before I generate that though, I
16:37
forgot is I could do like a
16:40
spell check for yamel. There's called linting
16:42
or a linter. It just checks to
16:44
the amel to make sure that I
16:46
didn't make a mistake on the yamel.
16:49
Or it might even be notorious for
16:51
its ability to get it wrong because
16:53
you got to have the white space
16:55
correct and so correct. Yeah. So it'll
16:58
just check to make sure that the
17:00
animal is correct that you've got lists
17:02
correct or dictionaries correct or whatever. And
17:04
then if you put in some kind
17:07
of schema can check against the schema
17:09
as well, just to make sure you
17:11
get the formatting rate before you even
17:13
go to generate the config. So then
17:16
we generate the config. We could also,
17:18
these are just text files typically. Most
17:20
devices in the networking world, there are
17:22
a few exceptions, but most devices in
17:25
the networking world, use a single configuration
17:27
model. So there's one file that has
17:29
the entire configuration for a device. For
17:32
those of us who have worked in
17:34
the Cisco world or even the Arista
17:36
world, that's running config. So we've got
17:38
a bunch of configs. We could potentially
17:41
run some tests on those. Then we're
17:43
ready for deployment. So the next step
17:45
after that is to take those configs
17:47
and then push them to the various
17:50
devices where they need to go. After
17:52
that is done we've got a new
17:54
deployment we've got a new configuration state
17:56
on our devices so what it would
17:59
to do then we want to do
18:01
some automated testing. So there's different libraries
18:03
that can allow us to do some
18:05
some testing. So that is generally the
18:08
the pipeline that we have for network
18:10
automation. Let me let me quickly read
18:12
this back to you 20. The pipeline
18:14
then is a way to it's almost
18:17
like automating automation or it's it's really
18:19
automating a lot of the operational tasks
18:21
that I should be doing. That is,
18:24
if I was doing all of this
18:26
by hand, and I, you know, if
18:28
I forget about automation completely, just go
18:30
old school, if I was to be
18:33
sitting at a CLI and typing commands
18:35
in at the CLI to create a
18:37
change, I would then, what I should
18:39
be doing from there is checking that
18:42
my change went well. I have routing
18:44
adjacencies that I'm expecting and I'm seeing
18:46
routes in the routing table that I'm
18:48
looking for or whatever it is, a
18:51
million things I would be looking for.
18:53
And as a responsible network engineer, I
18:55
probably would have built a list of
18:57
this is what I expect to see
19:00
when this is done kind of thing
19:02
so I can manually go back and
19:04
check those things. That's a pipeline that
19:06
I work through by hand, this whole,
19:09
writ large, everything that you just described
19:11
is something that I would have done
19:13
manually. The first step of my automation
19:16
on my automation journey might be, I'm
19:18
going to take the one thing that's
19:20
hard to do and bake that into
19:22
a script so that I can push
19:25
a change to 100 devices or a
19:27
thousand devices, whatever it might be, you
19:29
know, and then proceed from there. Now
19:31
we're saying, I don't. want to have
19:34
to remember all the little things that
19:36
I should be doing pre during and
19:38
post delivery of this change. I want
19:40
some process to track all of that
19:43
for me. That's the pipeline. It's what
19:45
the pipeline is doing. Is that fair?
19:47
Yeah. And another way to look at
19:49
it is the pipeline is all the
19:52
steps I need to do to actually
19:54
make the change happen through network automation
19:56
and then... And do I want to
19:58
automate those steps, the combination of those
20:01
steps? So all the steps I just
20:03
mentioned to you can be automated, the
20:05
generating the config, you know, that says
20:07
network automation step, pushing the config through
20:10
automation. So, you know, one of the
20:12
things that I really think we should
20:14
be doing is getting away from. Getting
20:17
away from pacing things into terminal windows.
20:19
There's so many problems that can happen
20:21
with that. You know, ask me how
20:23
I know, but. Show me, show me
20:26
on the terminal where the paste buffer
20:28
hurt you, Tony. So many problems, you
20:30
know, like you paste into a window
20:32
and there's a syntax error and it
20:35
goes by so quickly. You're like, okay,
20:37
so it didn't take that command. So
20:39
that's going to be a fun little
20:41
surprise when I, you know, go to
20:44
do testing and. figure out what didn't
20:46
get accepted. Or yeah, I paced 100
20:48
lines and 75 of them got taken.
20:50
I don't know which 25 didn't. So,
20:53
so anyway, yeah, so we've got all
20:55
these individual steps, generate the config, pre-test
20:57
the config, deploy the config, do post-employment
20:59
testing. So our pipeline's probably not as,
21:02
you know, pipeline, just another word for
21:04
the steps that we need to do.
21:06
And do we want to glue them
21:09
together with some sort of automation? You
21:11
know that's that's that's what CICD is
21:13
is gluing it all together with automation.
21:15
We don't have to do that. You
21:18
know we we get probably most organizations
21:20
will get 95% of the benefit of
21:22
network automation by just generating the config
21:24
from some sort of template deploying it
21:27
through automation versus pasting it into a
21:29
terminal window. And then doing having some
21:31
sort of post deployment testing and the
21:33
tools for all the for just about
21:36
every vendor that I know of are
21:38
out there to do those three things.
21:40
So in the model we've just talked
21:42
about, can you give an example of
21:45
what would be generating the config is
21:47
a hand it would be me for
21:49
my brain I would generate the config
21:51
but what piece of. software is doing
21:54
that in this pipeline model? So there's
21:56
a couple of options. There is a
21:58
roll your own option. So it's actually
22:01
not that difficult to make a template
22:03
through a template system called Ginger. It
22:05
works with Ansible. It's the built-in template
22:07
system for Ansible. So you write this
22:10
code. It's kind of like Python code.
22:12
But it will, you can generate your
22:14
own custom configuration or custom templates. It
22:16
can read yamel files pretty easily. It'll
22:19
take the values from the yamel file,
22:21
put them into the various places in
22:23
your template, and then out comes syntax.
22:25
So native configuration syntax. So that's one
22:28
way to do it. Quick question on
22:30
that. So you say syntax, which makes
22:32
me think of CLI, config syntax, whatever
22:34
the. vendor demands for a CLI, but
22:37
it could be it could be an
22:39
API call is that it could be
22:41
some other way to push that configuration
22:43
into the device. Most of the time
22:46
we're going to do syntax. We're going
22:48
to replace the running config or whatever
22:50
the equivalent is. There are a couple
22:53
of exceptions. For example, Cisco ECI. There's
22:55
a quasi CLI, but that's not really
22:57
where the configuration state is. The configuration
22:59
state is the manage object model. So
23:02
that would be a API. that we
23:04
deal with, I think you would agree,
23:06
have a single running config or something
23:08
that we call a running config. You
23:11
know, there was something equivalent to it,
23:13
like Juniper, has their, I can't remember
23:15
what they call it, but there's one
23:17
file that has all of the configuration
23:20
in it, and then we're gonna generate
23:22
that. And it is in fact what's
23:24
loaded by the device at boot time
23:26
you actually yeah it goes and seeks
23:29
that and that is how it loads
23:31
its configuration yeah yeah and there's methods
23:33
that you know there's a couple different
23:35
ways to do it Python Ansible a
23:38
couple other ways to take a config
23:40
that you have a text file and
23:42
loaded onto the device and then switch
23:45
over and then most the devices also
23:47
have a method so that if you
23:49
do do a switch over that anything
23:51
already config that is in the old
23:54
config and is also in the new
23:56
config, you don't drop your BB peers
23:58
or anything like that. So only the
24:00
disruptive changes would like drop a, you
24:03
know, drop a session. You're differentiating than
24:05
we're differentiating here, how, you know, we're
24:07
gonna generate a config file and the
24:09
method we deliver that config file. could
24:12
be a variety of things. It could
24:14
be an SSH session that happens in
24:16
the background and and delivers it. A.K.A.
24:18
Ansible could do that. It could be
24:21
delivered by an APA call. Heck, I
24:23
think back in the day, Tony, it
24:25
could have been delivered over S&P, depending
24:27
on the box. Yeah, yeah, in this
24:30
case, we would either, you know, most
24:32
devices have a way to do it
24:34
through like SSH through a screen scra,
24:37
like Net Miko, or it could be
24:39
done through an API, like an API,
24:41
like an API, like an RPC, like
24:43
an RPC, like an RPC. So for
24:46
example with ERISA EOA I teach ERISA
24:48
most of these days so I'm very
24:50
familiar with this process so that's why
24:52
I'm going to use this as an
24:55
example but the other vendors have something
24:57
similar. There's a way to take a
24:59
config and upload it through the through
25:01
EAP so that's a Jason RPC. It's
25:04
basically just encapsulating native EOS syntax into
25:06
a Jason commands remote procedural. I'm sorry
25:08
to hammer on this thing here but
25:10
interestingly what we're not talking about in
25:13
this specific step we are talking about
25:15
building that configuration text file network engineers
25:17
are familiar with we're not talking about
25:19
I want to configure BGP what is
25:22
the data model in this device for
25:24
BGP and the API calls that I'm
25:26
going to make to facilitate a specific
25:28
BGP change instead we're leaning into it's
25:31
a config file with text. Yeah and
25:33
so one of the the concepts that
25:35
we're going to do is removing the
25:38
source. of truth away from the device.
25:40
So for the past 30 years, whenever
25:42
we've configured a device, the single source
25:44
of truth for configuration state has been
25:47
on the device that's been running config,
25:49
and then start of config is how
25:51
it gets booted, or equivalent. So I'm
25:53
just using running config as an example.
25:56
Now we're we're moving that off the
25:58
device. We're moving it into these yamel
26:00
files or spreadsheets or databases or whatever
26:02
it is. Where were we getting the
26:05
information that we need to build the
26:07
config? And every time we do a
26:09
deployment, we're replacing the config entirely. So
26:11
we're doing a full configuration build and
26:14
a full configuration replace. So the yamel
26:16
files that I'm collecting are essentially a
26:18
record of every configuration that's on devices
26:20
I'm touching. Correct. It's our desired configuration
26:23
state. We're going to build. Now, this
26:25
is probably one of the most important
26:27
aspects network automation, not CICD. CICD is
26:30
just the glue that we use that
26:32
we can as an option used to
26:34
glue all this, these processes together. But
26:36
one of the most important steps is
26:39
building our configuration from our data models.
26:41
So don't, you know, the data model
26:43
could be yamel, could be a spreadsheet,
26:45
could be a sequel light database, something
26:48
like that. But now. our desired configuration
26:50
state is not on the devices anymore.
26:52
We will get there, but when we
26:54
make a change, we don't make a
26:57
change on the devices anymore. So this
26:59
means no more CLI configuration. We can
27:01
do CLI troubleshooting. That's no problem. But
27:03
we're not going to go into a
27:06
device and do a run like conftee.
27:08
We're going to go into the data
27:10
model to make the change. Unless it's
27:12
an emergency, but you know, that's like
27:15
open that can of words. around field
27:17
environment then, am I essentially porting the
27:19
existing config off of my devices into
27:22
some kind of yamyl file structure and
27:24
then working from there? you can set
27:26
it up so that you've got properties
27:28
for an individual device, you've got properties
27:31
for a group of devices. So maybe
27:33
all my spines have something similar in
27:35
common. Maybe all my leaves have something
27:37
similar in common. Maybe all my devices
27:40
have something similar in common, like my
27:42
AAA, NTP, DNS, and all that. There's
27:44
ways to do this through the templateing
27:46
system. So there's a couple different files.
27:49
Like there's like, let's say I wanted
27:51
to change my NTP. from one IP
27:53
address or one set of IP addresses
27:55
to another one. Well, I would just
27:58
change one file in YAML and then
28:00
regenerate all the config or let's say
28:02
I wanted to add a new spine,
28:04
then I would probably have to update
28:07
several YAML files and then regenerate the
28:09
configs and then it would build new
28:11
new relationships between the spines and the
28:14
leaves to point the point links. I
28:16
might put an IP address to them
28:18
on them manually or on my something
28:20
like ERista AvD. which also uses yamel
28:23
files, you just define what ports are
28:25
the point to point ports, and then
28:27
it auto assigns IP addresses to them.
28:29
And the benefit here, the reason why
28:32
we're doing that, it does require some
28:34
new skills, some new tooling, the reason
28:36
why we're doing that is that we
28:38
get the accuracy. Because if the template
28:41
is right, and the information is right,
28:43
then the config's gonna be right. Now
28:45
you can get the template wrong, you
28:47
get the information wrong, and garbage and
28:50
garbage out, but if you get those
28:52
right, then you're going to get a
28:54
good template, you're going to get a
28:56
good config every time. And the other
28:59
interesting thing is the method in which
29:01
you want to push the config, Tony,
29:03
which is the kill the old one,
29:06
we're going to upload the new one
29:08
in its entirety, and then load it,
29:10
as opposed to the... got a bunch
29:12
of commands, paste them in, and then
29:15
hope the CLI doesn't cough something back
29:17
at you, which is, again, something we're
29:19
all so familiar with. Like, oh, crap,
29:21
it didn't take that because I got
29:24
it out of order. I fat-fingered something,
29:26
or whatever the case may be. Right.
29:28
Yeah. You're really guaranteeing that that if
29:30
your templates are right, you push the
29:33
config in its entirety and do a
29:35
wholesale replace, it's going to work. Yeah,
29:37
and that's that's a big, you know,
29:39
that, you know, all of these are
29:42
meant to eliminate a lot of the
29:44
common problems that we have. So if
29:46
we generate our configuration by a template,
29:48
we're consistent and we're accurate. As long
29:51
as we give it the right template,
29:53
we'll longer give it the right information
29:55
in the data model. You know, not
29:58
to say that you can't get that
30:00
wrong, but it's going to be a
30:02
lot easier to get it right over
30:04
time. So I'm generating good configs and
30:07
I've got a really high confidence that
30:09
my configures are good. Then when I
30:11
do a deployment by using that config
30:13
replace, you know, when we do a
30:16
config, now we only have two potential
30:18
states, we have the previous state, and
30:20
then we have the new state. When
30:22
we're pasting through a terminal window, We
30:25
have three states we have the previous
30:27
state we have the desired state and
30:29
then we have some weird quasi see
30:31
that happens because I got a syntax
30:34
error kicked back or the buffer didn't
30:36
paste every line. So now I've got
30:38
this. I don't know what state I'm
30:40
in right now and I have to
30:43
figure that out and unwind that you
30:45
know that's not a really when you
30:47
have to do that that's going to
30:49
be a pretty bad. This could be
30:52
a pretty bad deployment. And then also
30:54
like scale wise how many terminal windows
30:56
can you paste into? What's your limit?
30:59
What's your personal limit? Is it going
31:01
to be like 20 devices, 50 devices,
31:03
100 devices? With this process, I can
31:05
make rapid changes, accurate changes, and do
31:08
good deployments to hundreds or even thousands
31:10
of devices, then the time it would
31:12
take you to do like 10 devices
31:14
manually. Let's pause for a
31:17
message from our sponsor Interoptic. Interoptic
31:19
is the optical transceiver and cable
31:21
specialist that maximizes your IT savings
31:23
while minimizing network failures. Interoptic provides
31:25
high performing optics at a fraction
31:27
of the price of brand name
31:30
optics. The interoptic experts can help
31:32
you spec the best optical transceivers
31:34
and cables for your network environment.
31:36
Interoptic optical transceivers are 100% guaranteed
31:38
to be operationally equivalent with Cisco,
31:40
Juniper, Extreme, Arista Brocade, Palo Alto,
31:42
and many other switches and routers.
31:44
Due to Interoptic's deep optical transceiver
31:47
technical experience, they can ensure that
31:49
all messages, alerts, alarms, and threshold
31:51
data are equivalent to OEM brands.
31:53
Interoptic deploys rigorous 100% testing on
31:55
their devices before they're shipped. Interoptic
31:57
optical transceivers are built to the
31:59
exact same quality standards as the
32:02
OEMs. and typically come from the
32:04
exact same manufacturing lines. That's why
32:06
insurance companies, retailers, financial services, and
32:08
federal and state government customers deploy
32:10
optics and cables from Interoptic. You
32:12
can purchase the same if not
32:14
better performing optical transceivers tested and
32:16
backed up by real engineers at
32:19
a fraction of OEM costs. Find
32:21
out more at interoptic.com/packet pushers. And
32:23
now back to the podcast. I guess
32:25
one thing I want to make sure I understand
32:27
is how I get from... sort of a
32:29
template which to my mind is just
32:32
sort of an outline to very specific
32:34
actual lines of config how and and
32:36
what is what piece of software
32:38
is looking at my template and saying
32:40
okay in a Cisco environment I would
32:42
write out this set of config stances
32:44
and a wrist I do it this
32:46
way how does that happen? Yeah so
32:48
that would be the ginger template
32:51
file and a ginger template file
32:53
contains either just raw syntax Because
32:55
there's going to be
32:57
some boilerplate in your
33:00
configs that are just going
33:02
to be the same for
33:04
everything. And then you have like,
33:06
let's say in YAMO, I have a
33:08
list of V-L-N-10, V-V-N-T, V-N-T,
33:11
V-N-T, V-N-T, V-N-T, V-N-T, V-N-T,
33:13
V-N-T, V-N-T-V-V-T, and creates VLAN
33:15
10, VLAN 20, VLAN 30. And maybe it
33:17
loops through the interface VLANs to configure
33:19
the SVIs on them as well. So
33:22
it's a little bit of logic
33:24
that you put into the template.
33:26
It's relatively easy to do.
33:28
And then you might take you a
33:30
week to get those templates right. But
33:33
think about the payback after you
33:35
get those templates right. Then
33:37
you're using a Python script
33:40
is referencing the ginger template
33:42
to generate the text file.
33:44
It can. Or more traditionally answerable.
33:46
So Ansible would have, oh, you
33:48
would say, okay, I'm going to
33:50
take this ginger template and this
33:53
yellow file and I'm going to combine them
33:55
and then I'm going to spit out a
33:57
native syntax based on what I
33:59
have. the template or something like
34:01
Arista Avid, the all the template's already
34:04
there. So with Arista Avid,
34:06
Arista has already written the
34:08
templates. So all you do
34:10
is, and it's based off of
34:12
Arista best practices, or Arista validity
34:15
to designs, and you just feed at
34:17
the yamel to, you know, there's yamel
34:19
for the, to build an EVP and
34:21
VX land fabric, to a layer two
34:24
leaf spine fabric, which is like
34:26
the traditional like collapse core, there's
34:28
one to do MPLS. Or
34:30
a set of yamel files and you
34:32
rate these yamel files and it's
34:34
and it gets gets the point
34:36
where it's trivial. Now anything
34:38
new is going to be weird and
34:40
difficult at first, but once you
34:42
get used to it, it's it's
34:45
really trivial to get to the
34:47
point to where like, oh, you want me
34:49
to add a spine to 100 leaves, I can
34:51
do it in two minutes. The
34:53
deployment process would take five. And
34:55
I'm going to get it right. So,
34:58
and this is my opportunity to
35:00
ask all my dumb questions,
35:02
Tony. So thank you. Go
35:04
ahead. Help me understand Ginger
35:06
versus Yammel and how they
35:08
relate. So Yammel, traditionally in
35:10
the network automation world, Yammel
35:13
is a way that we
35:15
use to describe desired state
35:17
in an abstracted fashion. Okay.
35:20
So when I say abstracted fashion,
35:22
I mean like, okay. You know,
35:24
take a like a Cisco config
35:26
on an interface interface E1 IP
35:28
adder 101 101 slash 24, no
35:31
switch port, you know, that's
35:33
the syntax. That's non abstract.
35:35
That's actually what we put
35:38
on the device. An abstract
35:40
representation of this is Ethernet
35:42
one can be an L3
35:44
port. It's going to have an
35:46
IP address of 101, 101 slash
35:48
24. And we can, we can describe
35:51
that in YML. relatively
35:53
easily. And yamel is great because
35:55
it's easy for machines to read
35:57
and it's relatively easy for humans.
35:59
to read and write. Now,
36:01
it gets a little tricky
36:04
when you start out, you
36:06
have to figure about the
36:08
white spaces and the indentation,
36:10
there's always, you know, indentation
36:12
caught me a lot when
36:14
I started out, but, you
36:16
know, now it's second nature
36:18
to me. So that's what
36:20
the YAMEL does. YAMEL is,
36:23
that's the information, you know,
36:25
think about like any kind
36:27
of template. Okay,
36:29
and then so the template
36:31
is, the yamel file is,
36:33
you know, Joe went to
36:35
the, and then the variable
36:38
is a noun or a
36:40
verb or whatever. Right, the
36:42
yamel is the noun on
36:44
the verb, that's where we
36:46
get that from, the template
36:49
is the madlib book itself.
36:51
Okay, so, and ginger is
36:53
the template. and then place
36:55
all the variables where they
36:57
need to go. So the
36:59
ginger template calls the particular
37:02
variables. Like is there a
37:04
dictionary called V-lands? So a
37:06
dictionary is just a key
37:08
value pair. So V-lands, colon
37:10
in the amel. And then
37:13
under that is a list
37:15
of V-lands, 10, 20, 30,
37:17
40, 50. Maybe it's got
37:19
a list with parameters like
37:21
V-land 10 and it's S-V-I-P
37:24
addresses, 10-1. So, yamel
37:26
takes the logic, is there a V-lands
37:28
dictionary? Okay, let's iterate through it, we'll
37:30
loop through it until we're done with
37:32
the list. And we'll generate configs for
37:35
syntax that will configure those V-lands and
37:37
the V-lands and the V-lands in the
37:39
V-land database, then configure the interface V-v-lands
37:42
for the SBI's, and, you know, we'll
37:44
do that for the entire config. So
37:46
there's work I need to do sort
37:48
of ahead of time before I just
37:51
start running into this kind of network
37:53
automation. Yeah, absolutely. Now, so here's the
37:55
interesting part about network automation is we
37:57
have to keep this in mind. We
38:00
do a lot more work. on the
38:02
front end. So our day zero is
38:04
a lot busier than day one. Now
38:06
traditionally when we do deployments, our day
38:09
zero is relatively light. We're doing some
38:11
spreadsheets, we're doing some bizio diagrams, we're
38:13
collecting some requirements, but all of our
38:16
work is done in day one. That's
38:18
when we're standing up the configs, getting
38:20
the configs on them, doing the testing,
38:22
the acceptance testing, etc. Would we do
38:25
network automation? We swap that. We swap
38:27
that. Figuring out the schema for our
38:29
yamel if we're if we're doing that
38:31
or figuring out whose schema we're going
38:34
to use instead like ERISA ABD. Then
38:36
we get it to the point where
38:38
we're building configs and then days day
38:40
one instead of taking a week to
38:43
stand up a fabric it takes an
38:45
afternoon. And then we can also do
38:47
the testing on it too. So we're
38:49
right now we're just talking about the
38:52
configuration generation. One of the points I
38:54
want to get to in this conversation
38:56
Tony is how to discern whether I
38:59
would benefit from having a pipeline or
39:01
not. So if I'm maybe I'm doing
39:03
a lot of things that you described
39:05
where there's even testing involved and so
39:08
on and I've been doing it by
39:10
hand and it's been okay. How do
39:12
I know? We should really as an
39:14
org make the leap and begin using
39:17
a pipeline for our network automation for
39:19
our network automation. Well, one of the
39:21
things we can think of is we've
39:23
already got a pipeline is the steps
39:26
that we're doing. The question is do
39:28
we want to automate that pipeline? Do
39:30
we want to have something shepherd the
39:33
process through? I would say for 95%
39:35
of the organizations out there, we don't
39:37
need CICD. We don't need to automate
39:39
this whole pipeline. Well, why not? Why
39:42
wouldn't I want to? Because it wouldn't
39:44
bring the benefit. The reason why we're
39:46
generating configs is that it makes, one,
39:48
it makes the configs accurate. So the
39:51
chances of me getting a configuration that
39:53
is going to work and work the
39:55
way I intended is way higher than
39:57
if I did it manually. I can
40:00
do it more often. I can make
40:02
changes more rapidly. I can make really
40:04
complex changes. very quickly. And that's because
40:06
we've described our desired state via YAML
40:09
files and then are using those to
40:11
generate them based out of templates from
40:13
Genja. Exactly. Okay. So that's a huge
40:16
benefit right there. And this is not
40:18
something that like, this is not a
40:20
marketing benefit, this is how a lot
40:22
of companies are doing their configuration states.
40:25
Whenever I do deployments, this is how
40:27
I do it. And I do not
40:29
want to go back to doing things
40:31
manually. This is so much better to
40:34
generate these configures. So one if we
40:36
if we're generating our configs versus typing
40:38
them out by hand that's a huge
40:40
benefit we're going to get more accurate
40:43
we're getting more rapid we can deal
40:45
with more complexity we can make these
40:47
changes more rapidly we're going to get
40:50
trusted we're going to get trusted with
40:52
multi vendor better Tony absolutely so I
40:54
can I can have a yamel file
40:56
that has my desired configuration state and
40:59
then I can have a template that
41:01
builds me eristic fix So it's good,
41:03
you know, that again, it's going to
41:05
be a lot of work up front
41:08
that I don't want to, I don't
41:10
want to make it sound like that
41:12
this is just easy, easy. You just
41:14
do a couple of things in like
41:17
a couple hours, you're going to work
41:19
on this tooling to do this. But
41:21
the once you get it, once you
41:23
get it implemented, it's going to save
41:26
you so much time and it's going
41:28
to be so much more accurate. So
41:30
generate the config is number one. It's
41:33
like my biggest pet peeve right now
41:35
is pacing and config through a terminal
41:37
window. No more of this. It's 2025.
41:39
We don't need to be pacing configs
41:42
through terminal windows anymore. Most of the
41:44
vendors have reliable ways to deploy through
41:46
automation. So that's number two. And number
41:48
three, this is relatively new in our
41:51
world, is we've got all these testing
41:53
suites now that we can use to
41:55
test our deployments. So we can do
41:57
unit tests after we make a deployment.
42:00
And I think this is probably one
42:02
of the most un- appreciated aspects of
42:04
network automation. So I've just made a
42:07
change to 100 devices. How do I
42:09
know that 100 devices have been, have
42:11
their, you know, the things worked as
42:13
I expected them to? Well, you know,
42:16
in the old days, you and I,
42:18
we would go into a device and
42:20
we'd run a couple of commands. We'd
42:22
go into like five of those hundred
42:25
devices, some spot checks, you know, that's
42:27
not really accurate. you know that's not
42:29
really comprehensive spot checks because ain't got
42:31
time for all of them yeah nobody
42:34
got time we miss something get to
42:36
run like 20 show commands on a
42:38
hundred devices but automation can can run
42:40
20 show commands on a hundred devices
42:43
and provide me a little report and
42:45
there's there I don't have to do
42:47
it I don't have to do it
42:50
create all this stuff manually myself there's
42:52
a bunch of frameworks that allowed me
42:54
to do this relatively quickly there's like
42:56
pie ATS there's Arista Anta There's all
42:59
these different frameworks that we can build
43:01
that we can build upon so that
43:03
we can run these automated checks after
43:05
we do deployment and if we do
43:08
a deployment and our checks run and
43:10
we still have a problem guess what
43:12
we run a new test just like
43:14
we do it in the developer world.
43:17
So three things if you do you're
43:19
going to get 95% of the benefits
43:21
for most organizations of network automation and
43:24
it's not a CACD pipeline. Number one,
43:26
generate configs. Number two, deploy configs through
43:28
automation. Number three, test the configs through
43:30
automation after they're deployed. You're going to
43:33
get so much further than if you
43:35
were doing things manually. Now, as icing
43:37
on the cake, as gravy in the
43:39
gravy boat, we could stitch it all
43:42
together with get up actions, Jenkins, or
43:44
whatever. But, you know, if you've got
43:46
a three-person team, probably there's not really
43:48
need benefit for that. It really comes
43:51
into a place when you've got, when
43:53
you're making lots and lots and lots
43:55
of changes. Like if we're making one
43:58
change a week, probably don't need to
44:00
go too much far into like get
44:02
up actions. You know it might if
44:04
you have a particular pain point like
44:07
wouldn't be nice if like I did
44:09
my linting as soon as I did
44:11
my commit. Okay we you know you
44:13
can do that part there. But if
44:16
you're you know smaller teams, less frequent
44:18
deployments probably CICD is not where you
44:20
need to be. But you probably should
44:22
be at the network animation where we're
44:25
generating configs. We're deploying convicts through automation
44:27
and we're testing the deployment through automation.
44:29
Those three things. So it's it's so
44:31
the deciding point, the tipping point for
44:34
whether or not a CICD pipeline makes
44:36
sense for our network automation practice sounds
44:38
like scale. If I'm doing lots of
44:41
changes, maybe I want to go that
44:43
route. Yeah, and most of the most
44:45
of the organizations that I've worked for
44:47
worked with probably don't have the scale
44:50
where that starts to really make sense.
44:52
So it said, you know, not to
44:54
say you can't do it. But, you
44:56
know, the whole purpose of this, of
44:59
this, the idea for this podcast was
45:01
there's a lot of people I'm getting
45:03
like, do I need to do CICD?
45:05
Do I need to do CICD? Do
45:08
I need to do CICD? And the
45:10
answer is probably not, but you should
45:12
probably be doing network automation network automation.
45:15
And almost every medium to large size
45:17
company I've worked with could definitely benefit
45:19
from that process. an onboarding of those
45:21
skills of the skill sets and tools
45:24
and learning the tools like, you know,
45:26
most network engineers don't train on get,
45:28
they don't train on answerable, they don't
45:30
train on APIs. There's going to be
45:33
a transition period where you're onboarding those
45:35
tools, but again, the payoff is so
45:37
much, like I can't imagine myself managing
45:39
a network, a medium to large size
45:42
network, even some small networks manually anymore.
45:44
It would just be, it would just
45:46
drive you nuts. Well, okay, I hear
45:48
the gospel you're preaching. Let's do the
45:51
network automation and you've defined those steps.
45:53
CICD, you defined it as, you know,
45:55
the gravy and the gravy boat. on
45:58
the cake. It's extra, not nice to
46:00
have, not need to have. All right,
46:02
but dude, you got a bunch of
46:04
nerds out there listening that want to
46:07
do the cool things. So the question
46:09
then becomes. If I feel ready to
46:11
do a C.I.C.D. pipeline, other than say
46:13
technical debt, is there more risk that
46:16
I'm adding, more needless complication that it's
46:18
going to be too hard? And I
46:20
really shouldn't bother. Or if I'm feeling
46:22
up for it, can I go that
46:25
route and have it be a good
46:27
thing? Yeah, you know, if you're feeling
46:29
up for it, then yeah, go for
46:32
it. I'm not saying don't do C.
46:34
Don't do C. by not doing CICD
46:36
and like any tool, you know, we
46:38
as nerds, we have to like, we
46:41
have to resist the impulse to try
46:43
to push through a bad tool because
46:45
we think it's cool and it's like
46:47
shiny and it's new and it's like,
46:50
oh, it's really cool, but yeah, it's
46:52
really a pain to use and it's
46:54
impeding us, you know, we want network
46:56
automation to, to accelerate us, not to
46:59
impede us. So that would be the
47:01
only like caution I would like give
47:03
you like and then also you can
47:05
do it in little steps like I
47:08
said like one of the first things
47:10
you can do if you want to
47:12
start putting your pipeline in or putting
47:15
the automation for the pipeline in is
47:17
when I make a commit so instead
47:19
of editing yamel and just the directory
47:21
on my automation controller then I put
47:24
it in get hub and then when
47:26
I make a commit then it runs
47:28
the linting on it that's the spell
47:30
checker for yamel. So maybe I automate
47:33
that process. And then I automate the
47:35
building of the config. So once I'm
47:37
doing a commit, it links it, if
47:39
the lens passes, then it builds all
47:42
the syntax for me. Nice and shiny,
47:44
ready to hit that big red button
47:46
for deploy. So I can do this
47:49
in little steps, versus I don't need
47:51
to just implement it all or nothing.
47:53
And again, it's a tool. If it
47:55
helps you, use it. If it doesn't
47:58
help you, don't use it. I
48:00
think a good closing question would
48:02
be this Tony. Okay, I know
48:05
I don't need CICD pipelines as
48:07
like a primary feature I gotta
48:09
have for my network automation practice.
48:11
And in fact, we could say,
48:13
here are tools that you should
48:15
be using skills that you should
48:17
have before you want to add
48:19
CICD to that mix. And those
48:21
skills we need to have, I'm
48:24
gonna throw some things at you,
48:26
you can correct me, add, subtract,
48:28
whatever you think, Tony, but I
48:30
would imagine Python. Python. Ansible, ginger,
48:32
repositories, get get hub, something along
48:34
those lines where you're doing your
48:36
version control and so on, being
48:38
the biggest ones that are leaping
48:41
to mind, automated testing somewhere in
48:43
there, unless clear on exactly how
48:45
we might implement that, but that's
48:47
another piece. And then if we
48:49
had all that stuff lined up
48:51
and really comfortable with all those
48:53
things, then maybe we would add
48:55
that, that next tool in the
48:57
list might be a pipeline. How
49:00
am I doing? Yeah, yeah, that's,
49:02
that's, that's a really good way
49:04
of putting it. Like you, you,
49:06
you don't need and you probably
49:08
don't want to do a CICD
49:10
pipeline all at once. There's steps
49:12
to get to, like, do you
49:14
have, are you generating configs? Are
49:17
you deploying, are you testing after
49:19
you deploy? If you're not doing
49:21
those three things going. Then you
49:23
can do a CIC and then
49:25
there's other things we can add
49:27
in that pipeline read in the
49:29
steps. One of the things that
49:31
I that I think that we
49:33
really need to work on as
49:36
a network industry is doing the
49:38
pre deployment testing. So we've actually
49:40
got post deployment testing done pretty
49:42
well. I can run I can
49:44
automate running like 50 show commands
49:46
on every device after I do
49:48
deployment and that'll give me a
49:50
good indication. And that'll give me
49:53
a good indication. But now I've
49:55
got all the syntax. How do
49:57
I know that the syntax isn't
49:59
going to cause any... problems when
50:01
it gets loaded on these hundred
50:03
devices. And there's kind of been
50:05
some tools like Batfish, but we
50:07
really don't have a comprehensive pre-deployment
50:09
testing yet. So, you know, that's
50:12
something we need to work on
50:14
as an industry. We just don't
50:16
have the tools for it yet.
50:18
But the three other three tools
50:20
we do, we absolutely do and
50:22
they're mature by now. So configuration
50:24
generation generation generation testing. So if
50:26
we look at those three steps,
50:29
generate config, deploy, config, check, and
50:31
figs after deployment for generate config,
50:33
the tools I'm looking at are
50:35
yammel and ginger. Yeah, yamel and
50:37
ginger, generally speaking, but like, for
50:39
example, if you do a wrist
50:41
to a VD, then it's going
50:43
to be just yamel. You don't
50:45
have to worry about the ginger
50:48
because wrist is already taking care
50:50
of it. But generally speaking, yes,
50:52
if you can, and it doesn't
50:54
take. a ton of work to
50:56
learn ginger. It's a very simple,
50:58
I mean, I'm gonna say relatively
51:00
simple, because if you look at
51:02
it for the first time, you're
51:05
gonna be like, this is Greek
51:07
to me, unless you speak Greek,
51:09
but it looks like some other
51:11
language you've never looked at before.
51:13
So yeah, it's gonna be a
51:15
learning process. And the thing is,
51:17
like, it's so much better doing
51:19
it this way. There's so much
51:21
more stability, there's so much more
51:24
rest and ease and comfort in
51:26
your life when you do it
51:28
this way. And just sorry to
51:30
go through those three steps. So
51:32
generate config, we're talking about yammel
51:34
and ginger, deploy and config, is
51:36
that ancible? Ancible or Python. And
51:38
then for the checking phase after
51:41
the deployment that you mentioned, pie
51:43
ATS? Yeah, pie ATS or ANTA.
51:45
So it's mostly Python. Okay. So
51:47
learn yamel, I think that's one
51:49
of the most important things. Yeah.
51:51
It's, you know, it's hard to
51:53
say that you're going to always
51:55
run into these things. But you're
51:57
generally going to run into Ansible,
52:00
you're generally going to run into
52:02
YAMel, you're generally going to run
52:04
into Python. You don't need to
52:06
be a Python programmer where you're
52:08
like remaking Zelda in Python. But
52:10
for the networking world, we use
52:12
like 20% of Python. So, yeah.
52:14
And then there's plenty of resources
52:17
to learn Python like Kirk Byers
52:19
has that, like four times a
52:21
year, he runs a free course,
52:23
and there's plenty of content out
52:25
there now to learn. Yammels, a
52:27
file syntax. It's not like, you
52:29
know, he's a 900 page book
52:31
to figure out Yamel, it's just
52:33
like understanding the formatting. Yeah, it's
52:36
mostly like figure out the indentation
52:38
and then, um, linting helps. So
52:40
like if you, like if you
52:42
run VS code. So VS code
52:44
is a common editor that we
52:46
use to edit these yamel files,
52:48
Python files, etc. It's a free,
52:50
it's free for Microsoft. And then
52:53
it's got to, you can run
52:55
a linter on it so that
52:57
it does a little red squiggly
52:59
line if you get the, if
53:01
you get the, like, the formatting
53:03
wrong. It's like a spell check.
53:05
Tony, if people want to dig
53:07
into this topic more, did there,
53:09
there's some top of mind resources
53:12
that you would point them to?
53:14
For me is YouTube. I learn
53:16
almost everything through YouTube these days.
53:18
There is a wonderful answerable course,
53:20
free course, by this guy named
53:22
Jeff, by this guy, by the
53:24
name of Jeff Gierling. And there's
53:26
a couple others out there, but
53:29
I think his is the best
53:31
I've seen. It's not network oriented,
53:33
but he teaches you the parts
53:35
that you need for the networking
53:37
part. It's a free course on
53:39
YouTube. And this guy, he did
53:41
it during lockdown in 2020. And
53:43
he's like, you know what, I'm
53:46
just going to do a free
53:48
course. He's got a book you
53:50
can, you can buy or I
53:52
think, I think it's still available
53:54
for free. If not, it's not
53:56
that much money. Kirk Byers for,
53:58
for Python, another Python resource I
54:00
like is called Learn Python the
54:02
Hard Way by Zed Shaw. And
54:05
it's basically like, okay, what's a.
54:07
I've worked through some of that.
54:09
It's been a while, but I've
54:11
worked through some of the Python,
54:13
the highway, it is a great
54:15
resource. Yeah, it's just, it's like,
54:17
it's a stupidly simple way to
54:19
learn Python, because it's like, here's
54:22
a loop, here's how we do
54:24
a loop, here's a four loop,
54:26
here's a while loop, and it
54:28
just shows you examples of everything,
54:30
and you go through it, and
54:32
it's just the one thing, without
54:34
trying to get all fancy. These
54:36
like these one stupid things and
54:38
I think this way calls it
54:41
the hard way because there's like
54:43
25 lessons But each lesson concentrates
54:45
on just one little thing and
54:47
that's I love that way of
54:49
learning Well Tony thanks again for
54:51
joining us today and for dude
54:53
that was an extraordinary braindup that
54:55
was really great but also you
54:58
kept reiterating certain points so it's
55:00
like we didn't just keep going
55:02
off into the sunset we kept
55:04
bringing home the the main points
55:06
thank you for that approach we
55:08
can tell you're an instructor that's
55:10
definitely a teaching technique so that
55:12
was great Tony yeah if I
55:14
want to leave the audience with
55:17
any thought it's this automation is
55:19
hard and then it's easy And
55:21
just like anything else, you have
55:23
to learn it, you have to
55:25
struggle with it at the beginning,
55:27
but once you learn it, oh
55:29
my gosh, like it's the automation
55:31
hump, like on one side of
55:34
this big hill is all the
55:36
stuff you don't know and it
55:38
looks really hard and intimidating. And
55:40
then you have to go over
55:42
that hill, that's all the learning
55:44
and the struggling and the frustrations
55:46
and the indentations. And then on
55:48
the other side of it, you're
55:50
like, I don't know how I
55:53
would be doing this any other
55:55
way. If people want to reach
55:57
out to you Tony, can they
55:59
find you online? Yeah, I'm on
56:01
Blue Sky, Tony dot Burke, on
56:03
Blue Sky, and my infrequently blog
56:05
at data center overlords.com, and then
56:07
I'm on YouTube, just Tony Burke
56:10
on YouTube. Sounds great. Thank you
56:12
again for joining us today, Tony,
56:14
much appreciated. And all of you
56:16
out there listening, thank you for
56:18
listening to Heavy Networking. If you're
56:20
really interested in network automation, this
56:22
is a great episode to get
56:24
your. what your appetite gets you
56:26
started. And as Tony pointed out,
56:29
there is a ton of content
56:31
in the world to help you
56:33
learn about it. I'm going to
56:35
mention a couple of more resources
56:37
beyond what Tony mentioned, the network
56:39
automation nerds podcast, which is part
56:41
of the packet pushers network that
56:43
is hosted by Eric Cho. He
56:46
is the host of mastering Python
56:48
networking. That's a book he's done.
56:50
I think there's at least three
56:52
editions out there's out there's also.
56:54
network automation forum channel up on
56:56
YouTube there. And of course, there's
56:58
slack groups, including the. packet pushers
57:00
community a slack group and the
57:02
network automation forum slack as I
57:05
mentioned there are even more if
57:07
you poke around those just happen
57:09
to be the ones I'm paying
57:11
attention to these days where I'm
57:13
typically logged in you can find
57:15
lots of other resources for networkers
57:17
in general that's all at packet
57:19
pushers.net everything you find at packet
57:22
pushers.net everything you find at packet
57:24
pushers.net is 100% free there's no
57:26
logins we're not tracking you and
57:28
everything that is podcast or videos.
57:30
I have been Ethan Banks along
57:32
with Drew Conroy Murray and until
57:34
next week, just remember that too
57:36
much networking would never be enough.
Podchaser is the ultimate destination for podcast data, search, and discovery. Learn More