Network State Checking: A Case Study in Automation using Python by Craig Henderson
Watch on YouTubeVideo summary
Craig Henderson introduces himself as a user of the Rian's network automation systems rather than a primary developer, noting that his expertise in Python was significantly enhanced by recent AI advancements. He explains that Rian's is a New Zealand-based national research and education network carrier that provides private WAN services, internet security, and federated authentication. The organization recently undertook a massive hardware refresh to modernize its domestic network infrastructure, moving from older chassis-based models to a scalable stack of individual rack units capable of handling speeds up to 400 gigabits per second. This physical upgrade was accompanied by a significant evolution in their operational automation strategies, which progressed from manual, bespoke configurations between 2006 and 2014 to the introduction of one-off scripts for specific tasks like meshing and firewalling during the 2014 to 2019 period.
To address the limitations of reinventing code for every new task and to ensure consistency, Rian's developed a standardized library called Bender, which serves as the central repository for their network automation. This system treats the actual network device configuration as the source of truth, using Python scripts to parse the current state, generate expected configurations, and apply changes automatically. During the hardware refresh, this automation allowed engineers to achieve 97% code-generated configurations, effectively eliminating human error for standard setups. The process involved rigorous auditing by two engineers for edge cases and executing change windows where teams would migrate multiple member handovers per night, relying on the automation to verify that services remained functional after physical relocation.
A critical challenge identified during these migrations was the inability of existing monitoring systems to provide context-aware alerts during cutover events, as they often treated moved services as entirely new entities rather than tracking continuity. To solve this, Henderson implemented a state checking system using Python scripts that compared pre-migration and post-migration data points, such as interface status, laser levels, routing neighbors, and traffic throughput. The automation generated detailed YAML files describing the expected state of complex topologies, which could contain thousands of lines of configuration data. By comparing the actual output against these expectations, the system could instantly highlight discrepancies like missing routes, silent interfaces, or optical level drops, allowing engineers to triage issues quickly rather than manually sifting through vast amounts of log data.
Despite the success of this automation, Henderson acknowledges that human error and operational stress still lead to incidents that the tools cannot prevent, such as obscure BGP attribute issues or forgotten configuration toggles. He emphasizes that while the tools are powerful, their effectiveness relies heavily on advocacy and cultural adoption, as stressed engineers may resist using new systems they do not fully understand. The ultimate goal for Rian's is to transition from scraping network data to using a dedicated orchestration platform that manages the entire service lifecycle, ensuring that custom configurations are contained and visible. This approach aims to provide better context for stakeholders, prevent accidental isolation of network regions, and maintain the high standards required for a publicly funded national research infrastructure.
Read the full video transcript
[applause]
Hello everyone. Thanks very much for
having me today. Uh I must confess from
the outset I'm something of an intruder
in this room. Uh you would have to
squint quite hard I think actually to
see my contributions to our codebase. I
I didn't really become an expert in
Python until we got AI. Uh
um if you have questions about the
Python involved in this system, please
direct them in fact to your conference
organizer Chelsea Finny who made much
more major contributions than I did. Uh
I can speak however uh as a user of
these systems uh how we've used uh
automation with Python in order to
ensure the accuracy of some changes
we've made on the reins network recently
when we refreshed our entire domestic
network. Now, if I'm going to represent
Rian's, the first question I need to
answer as always is what actually is
that even? Um, the last guest that we
heard was the Recreational Aircraft
Association of New Zealand. And as cool
as that sounds, unfortunately that is
not what I do. Uh, we are a New Zealand
network carrier like a commercial telpo.
Uh we offer you private WAN services and
internet uh network security and uh as
part of our public service remitt um
also a federated uh authentication
system for wireless uh connectivity we
call edgerome uh recently we have also
taken on board the national e- research
infrastructure platform uh to offer high
performance computing solutions as well.
Uh however I won't speak so much to that
subject because we will have Cal
speaking later today and I'm sure that
he will do a terrific job.
Uh now the interesting thing about
Rian's the only reason that we can exist
as we do is because we are part of a
global indeed network uh that is
national research and education network.
Uh there are about 120 uh such
organizations around the world and we
have very tight-knit relationships uh
that result in a lot of tangible
exchange of um uh of information and uh
connectivity that we all possess. Um
yeah um shout out to all of these
organizations. In fact they are what
makes it possible for us to do what we
do with their providing of um transit
free connectivity and remote hands and
all sorts of useful things.
Now, I'm going to be talking about the
changes we've completed, so it makes
sense to start from the beginning. Uh,
Rians was pretty late to the Gen Ren
game. We only came about in 2006. And
this is the earliest record I have of
the Rian's network. Um, this was 2008
when we were known as Karen. And uh,
this measurement system here, our
weather map operating under the
University of Wicked, shows what our
network then looked like. It was a ring
switching topology. And you can see that
we were established all around the
country to provide in ren services only.
Uh so we didn't do much networking
actually at this stage. We offered you
we offered a very specific set of uh
customers connectivity into research
resources only. Uh we wouldn't even
offer an internet connection uh even as
something as simple as that. Um even for
those members that were within our remit
at this time.
Uh we grew considerably in 2013 with the
joint operating agreement. We uh signed
with FX networks which went on to become
Vocus. Um through this arrangement uh we
would join together in a public partner
a public private partnership um where we
would take a stake of ownership in their
optical network. And this is what our
network then looks like. It is still a
ring switching topology at this point
and you can see the first signs of
standardization have creeped in now that
we have these um codes for all of these
different nodes for our domestic
connectivity. Um we settled on airport
codes to try to identify these things
and that system immediately broke down
as you can see. Um because when we
established a second pop in it had to
become simply dud 2 uh which is not
quite ideal but we came back to that and
uh unfortunately made it a bit worse. In
2018 we uh upgraded to 100 gig. You can
see we've been expanding quite
dramatically and we fixed that uh dud 2
problem in a way. Uh as you can see we
now had the to pop instead. Um now
interestingly recently there was a a
mass network outage in Indonesian you
might recall and and that got people
discussing on the internet um looking at
this weapon map application of what
exactly to might possibly mean and as
you know people on the internet are
quite clever and came up with a lot of
very uh interesting and creative
theories to explain that. Um and no one
I saw was successful I think because the
answer is actually not at all clever in
the slightest. Uh to stands for the
other Deneden
and I'll take you now to our present
day. This is what we looked like uh
right after we had finished uh
refreshing all of the hardware that we
have in our domestic network. Um the
design is a sort of ladder. We have east
west paths all up and down the country.
Um so if uh any side of uh this topology
breaks uh hopefully we have another
route to keep everybody connected.
Now, simultaneously with our network
change journey, uh we also saw some
changes to our network automation. And
I've divided this into a few different
periods. From 2006 to 2014, uh it's
quite easy to describe. There was no
automation. Everything was handbuilt uh
entirely bespoke uh entirely uh down to
the creativity of whatever engineer was
um building a service. Um now, I'm sure
they would defend that system uh as as
[clears throat] the ideal of course. Um
it it's not just uh you know poorly
planned hazard system. It's more like a
you know a luxury car handbuilt to
perfection is is what I would have said
in those days. Uh however those things
notoriously don't really work very well.
And uh because of that we we needed to
move on from that.
2014 to 2019 is when we started to see
the introduction of some one-off scripts
uh to help with some specific purposes
we might be able to leverage this
automation for and get some easy wins.
uh given some examples here of um
various network meshing that we require
and firewalling and routing policy that
we might come up with. And these things
um were the first targets for a few
reasons. Um they're they're repeatable
and very formulaic. Um to create a mesh
of all our different devices, they all
have to talk um you know, one device has
to talk to every other device on the
network and they all require
configuration pointing at each other to
accomplish that. That is very simple.
It's very boring. Uh but it's a very
long process and one that's very
errorprone if you try to do it manually.
Um so it's very easy to implement in
automation of course and we get an easy
win there. Uh firewalling is a bit more
complicated to manage. Uh however the
the win in that sense is just the blast
radius of getting that wrong is so
enormous that it's worth uh investing
the resources in order to in order to
try to build a system uh to enforce some
accuracy in that as well.
Um, now this this system of just
designing stuff on a one-off basis every
time that you need it has some problems
of its own. Uh, the main one being that
you have to reinvent how you're going to
pass information out of the network
every time that you do this. If you're
just beginning from scratch every time,
uh, then every different uh, piece of
code that you come up with has to figure
out a different way to do this. It has
to figure out a different way to
interact with all of our various APIs.
And then when somebody like me comes
along and makes a change on the network
that uh, one or more of these scripts
can't understand, things start to
explode. And now you have this difficult
troubleshooting exercise to go and find
out why. So we wanted to you know
introduce some libraryization
um just try to introduce as much
standardization as possible. And the
problem we had to solve before we could
do that is simply to choose a mascot
that was appropriate for an IT
professional. Uh you know somebody
decisive somebody with a crippling
dependency to alcohol. And we came up
with this.
Bender is the Rian's network automation
monor repo. Um and it has two functions
really. It began as a paraser of the
network as a uniform way of
understanding everything that was out
there. Um which first of all helps us to
understand what's wrong on the network.
If we have certain rules certain
architectures we're expected to abide by
when something doesn't conform to that
we can have bender uh recognize that
that uh that desync and push it out into
our alerting system to be fixed. Uh over
time uh we also started to generate
config through the system as well and
the model looks a bit like this. So from
the top we have our network device
configuration as our source of truth. Uh
we do of course have resource allocation
databases of various kinds where we try
to maintain our um understanding of
various systems. Uh but the network
device configuration is always the
source of truth um until you have a way
to enforce what is in those databases.
um you can keep all the best records
with all the best intention in the world
if you like, but if uh one person comes
along without following it and they have
the ability to push config out to the
network that's not in sync with that,
then that's um that's the reality that
you have to deal with. So for now um the
network is our source of truth. Uh
Bender passes the network to produce a
current state um of what's out there.
And as I've uh just mentioned, we can
link through that in order to push
alerting out um in order to fix things
that are wrong by interacting with the
CLI tooling that's integrated into the
into the system as well. We can generate
new config and every time that we can do
that, we can predict the future state of
the network so that we have something to
compare against what it was. And then we
have our apply config tool to complete
the cycle and push out the config that's
been generated to all of the relevant
devices.
Now, that brings us on to our big
hardware refresh project where we were
very much in need of such a system. You
can see here the delivery in progress. I
had a truck outside that was uh over the
course of perhaps an hour delivering
pallets upon pallets of boxes into our
our room, which I've been slowly piling
up into the hallway here. Uh you might
wonder why I didn't put them into the
store room instead of forming a
barricade in the hallway. Uh and the
reason is because I want to see I I want
everybody to see how hard I'm working.
I'm I'm still milking this even to this
day.
uh refresh looked a bit like this. We
started on the left with the uh MX480 uh
carrier grade chassis that Juniper puts
out. And our model was going to look a
bit different going forward. Um rather
than having a a big chassis based model
with various line cards we can install
depending on our needs at a certain
location. Uh we are instead now stacking
individual one or two rack unit devices
um as they are required. We've got a
couple of opt options for access routers
on the bottom. We've got something that
will give us connectivity up to 25 gig
and on the top something up to 400 gig
and we have a couple of options for
border routers where we need uh need
something a bit fancier in terms of
resources and the system software that
runs on these things. Uh those you'll
find anywhere that we have external
handovers to upstream providers or uh
anybody that we might have a private
interconnect with and need to do
something fancy to manage that traffic.
Uh physically it looks a bit like this.
That was our old system with the 480
chassis. And when we were done, we had
uh settled on a system that looked a bit
like this where everything's been moved
across onto this new hardware that
you've seen. Um and our server
infrastructure pulled along with it. Um
that was a bit of an undertaking. Um
we did get to the point where the
configurations were about 97% generated
by code um and therefore uh immune from
any human error, which was great. Um
there was a remaining set of edge cases
we would have to look for. So we'd have
two engineers go through and audit that
code to make sure that it makes sense as
well. When it came time to do the cut
over, we'd have an engineer on site with
the devices um repatching all the fiber
and we'd have an engineer leading the
change remotely from his computer. We'd
have three-hour change windows and we
would migrate 8 to 12 member handovers
per night depending on the complexity.
Um if that meant the change took place
over multiple nights, that's fine. Uh
this is just the system that we uh
proceeded under. [sighs]
Now the problem when we do something
like this is to decide when we have
moved a network service whether it is
still working on the other side and
indeed if it's not working on the other
side um was it broken when we got there
um we need to have a way of determining
that and the first answer you might
think um to answer that is well can you
refer to your monitoring um and
unfortunately you can't as it is
currently implemented by rans um we
don't package all of the metadata
associated with a service into one
parent structure that we can understand
that service by if we pick something up
and move it. Um, it now exists as a new
service in a new place and our
monitoring understands it with the
parameters it's seen for that new
service. It can't tell us that there's
something wrong with the old service
because the old service just doesn't
exist in its uh mind anymore. Our
monitoring also lacks context. There's
some things I'd like to be aware of in a
cutover like this that I don't want to
be aware of under normal operation. Uh,
for instance, if I lose some routes
because of something I've done, that's a
problem I might want to know about and
uh want to investigate. If uh somebody
in Seattle for instance withdraws a
route on a on a on a route server in the
middle of the night on an average
Tuesday where I've not been working at
all, I don't want to hear about that. I
don't want to be woken up by a
monitoring. Um so monitoring is not the
appropriate way to do that. Uh now
unfortunately even really basic
handovers have enough complexity in them
that it's quite difficult and
timeconuming to check everything
associated with a service and find out
anything that's wrong. Um I've got some
examples of that here.
Um these are the kind of things our
state checking looks for
um when we're trying to determine if a
service is uh working as intended and
whether we need an engineer to intervene
and look at things. Uh in terms of
physical interface, I've got these
various attributes we might concern
ourselves with. Is the interface even
connected? Is it up or down? Um do we
see throughput over it? Um are the
lasers that are lighting these services
operating within spec? We're looking for
things like that. and I canii continue
with the services we're building on top
of that layer 2 services like this again
we're looking for frames passed over the
over the top are we foring um in the way
that we expect without loops and such
and then when we get into our routing um
protocols as well do we have all the
routes that we expect do we have all the
neighbors that are sharing these routes
with us and things such as that for this
audience um you're perhaps not as
interested as uh somebody as sad as me
and knowing what these things actually
mean but
um you will be interested at least that
we have something to begin with and
something at the end that we'd like to
be the same and there are interesting
ways that we can accomplish that with
Python
and we had a simple test in every case
fortunately because as part of our
public service remit we have uh test
nodes installed all over the country uh
as part of the Perf Sonar project uh
which is something that originated
within the EN community um and it is
just a suite of test software that's
installed the servers around various um
EN carriers and universities and some
private operators around the world. Um
so that if you're interested in testing
network connectivity over long distances
and very um you know opaque use cases um
you have a system for doing that. And
fortunately for our cases in terms of
their network connectivity all they need
is a simple internet up link. It is as
basic as you could hope. Um and there is
even a public platform by which you can
see if it is working as intended. So
this is everything that we could hope
for in this context. Now when we
generate the config for this basic
incident handover um a YAML file gets
produced something like this that simply
says what did we have at the beginning
and what are we expecting to have at the
end and you can see in this case I've
got a physical interface I've got a you
know a VLAN layer 2 network operating
over the top of that and I can continue
building this file with as many objects
as I need depending on the complexity of
the service.
Uh now based on what is in this YAML
file, I'm going to go to those devices
and I'm going to collect some
information that I know describe those
things. Um I'm going to begin by
collecting information off the original
device. Um in this case, for instance, I
want to know about the physical
interfaces. So I'm going to run a quick
show interface command and I'm going to
dump that out to a text file which we're
going to maintain for the purpose of
this stateeing system and for any later
auditing that would might be required if
we need to iterate upon this process
over time. So that's um the kind of
information we need about a physical
interface and I can continue in this
fashion. I can get information about the
you know the routing interface that's on
top of that and the kind of addressing
it has. Um I can get information about
the lasers that are lighting this
service um you know it's transmit and
receive um signal that we're seeing. And
then I can do the same process again um
as I go through the new device when it's
moved over. And all I'm looking for is
something I can take from the beginning
that I can compare to what I have at the
end. Um, now happily as well as an
operational engineer like me, this isn't
actually a very abstract process at all.
This is exactly the process that I would
follow as a human being as just a
computer can do it much more accurately
and much quicker than I can. Um, so the
the goal with the system effectively is
to make me as redundant as possible.
Um, we go through this process and then
ultimately we can answer based on this
information we've gathered, is this
service working? In the case of a
persona node like this, I want to be
able to run the tool that says compare
the current state to that uh previous
state that you captured earlier and I
want to see an empty diff. I want to see
everything is the same as it was before.
Um if if I don't have that, even in the
case of my persona node, something's
gone terribly wrong and we might not be
able to proceed with the migration. Um
now that's something I can do quite
easily myself. Um there are only a few
things there you saw I had to look at in
order to determine if a simple service
like that is working. However,
I'd also like to come to an example like
this. This is a bit more challenging.
Um, this is an anonymized recreation of
one of our our member networks. This is
all real. And you can see here I've got
24 different separate routing instances
routed through geographically redundant
firewalls onto multiple border
instances. They have handovers to
different cloud environments. They have
a public internet connection and access
to private uh research networks as well.
uh and they have uh local area networks
that we participate in that uh I
couldn't have fit on this diagram when I
was creating it. Um it's uh fairly
nightmarish as it is. Um
now you can imagine verifying all of
this information when you've picked it
up and moved it is uh quite the
undertaking. Um again we have our YAML
file produced. This is a bit what it
looks like. And like before I've got an
interface and I've got a VLAN. That's
fine. I keep scrolling. I've got a you
know a border VRF now. Fine. I've got a
BGP neighbor, more VLANs, I've got an
EVPN that will have some kind of
multihoming I'll have to check on. Then
I've got a a VLAN. I've got more VRFs.
I've got an OPF neighbor as well. So
there's a different kind of routing I
have to worry about. And I can scroll
for quite a long time with this.
Actually, this uh this YAML file that
was produced totaled 1,525
lines just describing all of the various
services that were on this single member
handover.
Um if you look at the config that's um
that was set aside for any potential
audit as well.
Um just looking at the bottom of my Vim
session there you can see that they were
over 50,000 lines deep in edge case. So
the before state and the after state. So
if we were to go through a checklist and
try to manually verify all of these
services are working exactly as
expected. Uh you can imagine that would
take quite a long time. uh probably in
the case of even the single service it
would um exceed the freehour window that
we've set aside to do these migrations.
So that's uh not great and fortunately
we had the um the automation step in to
help out that 50,000 lines of uh
comparison that was required was reduced
to this that was my diff that I got from
uh having migrated this service and
there's a few things it's pointed out
that it thinks I might be interested in.
And I can triage a lot of this quite
quickly. You can see the first couple of
options there. It got um it sees a a
noteworthy difference in the the output
throughput and the input throughput on a
couple of different VLANs on this
interface and I understand these
services fortunately enough to know that
that's not a problem. There's a little
bit of variability here. Uh but I've got
birectional traffic. I'm happy with what
I'm seeing. In the third case, it's a
bit different because I have the number
zero and the number zero is always
something of a red flag. Uh this VLAN
was not particularly noisy in the first
place. It's a bit shy. It only had uh
nine input packets recorded and 10
output. Uh but zero means nothing. That
is potentially something that's not
working and I'll have to come back to
that. Uh moving on, I've got zero
packets going to two in the next
example. Um that's potentially a
problem. If you have a network that's
not expected to uh to to push traffic,
and it is. Uh there are some contexts
where that might be a problem.
Fortunately, not the case here. Um which
I'm glad of because if that was a
problem, it's likely to be a very big
one. Um then we have a uh a route that's
changed. We've got a host route for some
management on this device. um it's got a
different address than it had to begin
with. That could be a problem as well.
However, because of the new architecture
we were uh we were delivering as part of
this refresh, I I know that's to be
expected and I'm not worried about that
at all either. And then another example
where an interface is just a bit quieter
on ingress than it was to begin with.
And that's another one that I'm quite
happy with. So the only problem I
actually identified that worried me here
uh was that single VLAN that had no
input or output traffic.
And um my approach to this of course was
to run the tool again and hope that I
got a different answer and one that I
actually wanted to hear. And a couple of
minutes later that was missing from the
diff. It was happy with what it saw. So
this uh this turned out was just a bit
shy. Um and in 2 minutes we had managed
to uh verify all of the services working
on this handover. So this was an
enormous success story for this um for
this tooling. That was a really worrying
topology. I will show it to you one more
time just so you can see how cursed all
of this is. Uh this is not something I
was looking forward to moving but with
the help of this Python automation we
had delivered um two minutes of work. It
was no problem at all. We just uh
plugged it in where it belonged and and
it all uh and we could verify everything
worked as expected. It was great.
Uh so
I have been a little bit disingenuous
you might think in how I presented this.
Uh obviously a human being wouldn't go
through those 50,000 lines of uh output
delivered from those show commands. a
human being is capable of rational
thought and can see what is broken and
investigate um using their um your
capacity for complex thinking. Uh so
I've got a couple examples here of that
um uh cases where we saw things pointed
out I probably didn't need pointed out
to me. So I've got an interface that was
up and now it's down. A BGP handover
that was established now it's in the uh
connect state instead. I think that I
could have noticed these things. My
terminals even color code them. Um so I
can all I have to know is that the green
the thing that used to be green is not
green anymore. Um, that's uh that bears
some similarity to the uh the homework
my niece got from kindergarten quite
quite recently. I don't want to brag or
anything, but I got 100% on it. It was
pretty easy.
Um, so yeah, we probably didn't need to
go to the effort of uh investing in all
this tooling in order to uh help me with
those problems. Uh, but here's another
example. Uh, again, we've got zero
packets on ingress and I've mentioned
when I see zero, I'm a little bit wary
about that and uh with good cause. It
turned out in this case uh there was a
problem with interoperability on some
Ethernet interfaces. um connecting to
one of our junipers and some other
vendors and in this case that meant um
ENET auto negotiation didn't work such
that um uh we we could broadcast packets
to them fine all our output was working
uh but the ingress wasn't um wasn't
working as intended. So that was not
actually a working service and it's hard
to tell when these are just um you layer
2 broadcast domains. if you don't have
any kind of um routing protocol running
over the top to make give you some
obvious sign that things are down maybe
this is just a quiet VLAN it can be hard
to tell um but fortunately since the
tooling was able to direct my attention
to this and I could look a bit deeper
into it I saw actually this is not the
behavior I'm expecting to see and I can
do something to remediate that uh here's
another such example I mentioned before
I do not want to be woken up in the
middle of the night just because some
routes have been withdrawn from a uh
from a route server however uh in this
case we lost four routes immediately
following something that I did and
that's slightly of interest to me. And
in this case, um it did actually
represent a um a an a routing policy
that we applied on import that was set
incorrectly. So, we weren't accepting
for routes that we were supposed to. Um
again, big thank you to the tool for
pointing that out. And here's another
example. We've got the receive optical
level on one of our services um that has
taken a massive dip. So, that laser has
become a lot dimmer than it was in the
beginning. Um that's a very annoying
problem to have. um they can operate um
at lower levels, even out of spec
sometimes, and still bring an interface
up and and have a working service across
it and give the engineer the impression
that everything's been fine. And then
later you just have the odd error that
accumulates on this interface. And we
have to report back to the government
and say that we're doing a good job as a
network carrier with public funding and
we're, you know, we we we don't deliver
packets with errors. And then if we have
interfaces that just say randomly
conjure one out of 10,000 packets um
that aren't working, it's a bit
embarrassing for us. So that's something
we don't want to see. Um, and in this
case, fortunately, the tooling was able
to tell us, hey, um, maybe maybe try to
clean this fiber or replace a hash
league or try a new transceiver. Just do
something to make sure that doesn't
happen because it's very very annoying.
Um, and the last point I want to cover
is, um, how effectively did this work?
Um, did anything go wrong in spite of
all of this tooling that we had and can
we blame the tooling for any of those
things? So, let let's put it on trial a
bit.
First problem that we had there was a a
fairly obscure BGP attribute we set for
uh reasons of Rian's architecture in
some cases. Uh independent domain
attribute that was required from a
private WAN VRF which caused BGP to um
use its loop detection mechanism to
suppress some active routes. Uh this
occurred during the first migration that
was completed by rans and at this time
the tooling wasn't actually yet
available. So uh we can't blame the
tooling for this one. Uh and it does
serve as a useful benchmark. We had um
we put our two best engineers on the
case for this uh this first go. They
spent a couple of weeks doing their best
to verify all of the config and um come
up with the the the plan of attack to
make all of this work. And I think they
did a they accounted for themselves very
well. They did a great job in a on a on
a diffic difficult piece of work. Um but
I'm here now talking to you like it was
a failure because they had no Python
automation. And I guess that's the take
away from that uh that particular
incident.
Number two, we emitted the MTU from one
of our core backhole links. Um, which is
not a great thing because it meant an
entire remote region of New Zealand was
isolated from the rehance network. Um,
now that uh the the the ability to
generate the config that would have
dealt with that was implemented from the
tooling, but it wasn't used. So, we
can't unfortunately blame the tooling
for that either. Uh, now as Python
people, that's something you need to be
aware of. Half of your job even isn't
the technical implementation of what
you're trying to do. It is uh also the
advocacy of uh using these tools because
you know the operational engineers are
stressed and they just want to use what
they know. They don't necessarily want
to use their tools if it has the
potential to spit out some error they
don't understand and they'll have to
troubleshoot. Uh so sometimes you'll uh
you'll invent the best tools with the
best will in the world and then they
just won't use them. So uh be aware of
that problem. And then lastly we had uh
BGP configuration emitted for a
longlined internet service downstream of
device. That is a lot of words to say
that somebody forgot to turn something
on. Um, we didn't implement this
functionality in the tooling because it
was a bit of an edge case. It would take
a little bit of work to implement and we
thought we just don't have anybody on
the staff that's dumb enough to um to uh
to to do something like this to make
this error. Uh, but I did uh in my
defense I I was tired at the time. I was
on call that week and it was a bit busy.
But um yeah, the the plan of course was
um we would just be smart and not do
that. And uh unfortunately we learned uh
I'm not smart. So we iterated on the
process and later introduced that
functionality to the tooling.
Um so where are we at now? Um we've
never been able to make use of this
tooling actually in the case of our
firmware upgrades on all of our devices
because we have about three times as
many now that we've uh moved off to all
of those individual devices. Um it's
become kind of a pain and it's helped us
to be able to use the same kind of
system of verification for that. where
we'd like to go is to have a new source
of truth that's based on an actual
orchestration platform and not just
scraping information off the network
itself.
Um the problem with that is it doesn't
really scale very well. Um any of our
service enriching kind of metadata has
to be encoded onto the network which
results in increasingly bloated kinds of
config um which becomes increasingly
difficult to manage and it doesn't offer
a very good story for the RANs members.
They want to tell about all the nice
things that you're doing. And if we have
to go back to them and tell them, well,
you've pushed 100 gig of traffic on this
uh this VLAN that has this routing
protocol running over the top of it.
They they just say, I don't know what
that means, and nobody's going to be
interested if that if I tell them. They
won't talk to me anymore. Just leave me
alone. Uh so we want to have u these
things understood in the context of a
service that we're providing and what it
actually does. Um and an orchestration
platform is going to help us with that.
um that will be able to manage the life
cycle of the service from its deployment
all the way through its requirement
relying on Python all the way uh we will
always allow custom configuration from
the engineers but we would at some point
like to contain that to a system where
we have visibility and accountability
over those things and they can't just
push config out and directly to devices
and ruin all all of our good intentions.
Uh that's all I have for you in fact. Uh
thank you very much for bearing with me
today. Um, do we have time for questions
or have I uh overrun?
>> Uh, we we do not have time for
questions, but uh thank you uh to Carl.
[applause]