In some cases, Jinja templates become too complicated. Lots of deeply nested if statements, clunky ways of working with variables, macros and many other things that hurt the eyes.
[Read More]
Nornir
In the search for a framework that would allow me to plug my automations without too much fuss, I came across Nornir. I have been enjoying it so much that I decided to do write down an introduction for others. My hope is that this post will allow others to...
[Read More]
Getting started with JSNAPy
JSNAPy allows you to create snapshots that capture the state of devices running Junos. After capturing the device state, you can run tests against these snapshots. These tests can tell you if there is something to worry about or not.
[Read More]
TextFSM
Google TextFSM is a Python module that is written to make parsing text easier. It is a convenient way to turn CLI output into structured data. This blog covers a TextFSM example and shares the way in which I have been using TextFSM lately.
[Read More]
Executing shell commands using Junos PyEZ
When you log in to a Juniper device, you normally land on the Juniper CLI. This is the command shell that most engineers are familiar with. But not all commands are available on the Juniper CLI. Sometimes you will need to interact with the shell of the underlying OS, which...
[Read More]
Scrapli in SaltStack
Recently, I have been looking into a Python library called scrapli. You can use it for screen scraping and what led me to checking out this package is the fact that it is easy to tap into ssh2-python. This can offer quite some benefits in terms of speed and CPU...
[Read More]
Working with YAML in Python
Some examples on working with YAML (‘YAML Ain’t Markup Language’) in Python3. In the examples, I am using PyYAML version 5.2 which can be installed using pip3 install pyyaml.
[Read More]
BFD protected LAG
A LAG combines multiple physical links between two adjacent nodes together to establish a single (virtual) link. This offers increased bandwidth, link efficiency and physical redundancy.
[Read More]
SaltStack overview
Diving into SaltStack for the first time can be difficult and confusing. There is a lot of terminology involved that is going to be new. This makes it difficult to get a clear overview of how everything is working together and how the different parts might be useful to you....
[Read More]
Using the Cisco IOS XR API for information gathering
Cisco IOS XR has an XML API you can use to retrieve structured data from the device. In this article, I will run through several examples on how you can do this with Python. I will use the backend NAPALM library called pyIOSXR to issue RPCs. I’ll also show some...
[Read More]
NAPALM and NX-OS
Recently, I have been exploring NAPALM in relation to NX-OS. To connect to the device, I used the nxos driver which uses the NXAPI. This write-up contains some of the basic operations. I am using NAPALM version 2.5.0 and the NX-OS device is a Nexus7700 running 8.0(1).
[Read More]
Screen scraping basics for network engineers
This article contains several examples I could have used after reading up on the basics in Python. After I read the first chapters of Automate the Boring Stuff with Python and Learning Python, 5th Edition, I struggled to put the concepts I read about into practice. I understood the basic...
[Read More]
Code reuse by subclassing the PyEZ Device class
Extending the Junos PyEZ Device class with my own subclass helped me to more easily reuse my code and it made my scripts less of a clutter. This article is a short example on how to do this.
[Read More]
SaltStack proxy minion troubleshooting
Last week, I was doing some troubleshooting in a lab when I noticed one of the proxy minions refused to go into configure mode. The approach I took when I was troubleshooting this was a very general one that works for all proxy minion types. For this reason, I thought...
[Read More]
parallelize Python programs using deco
During my first struggles with threading and multiprocessing, a colleague told me about deco. This package enables you to parallelize a simple function in a very easy way, making it run significantly faster. The package author Alex Sherman puts it like this:
[Read More]
SaltStack pillar data and map files.
Right when I was starting out with SaltStack, I learned about the pillar. The pillar is an interface designed to offer values that the master distributes to (proxy) minions. Many of the examples floating around aim to show you how to use this pillar interface. This is mostly done by...
[Read More]
Working with JSON in Python
JavaScript Object Notation, or JSON, is something that started popping up more and more the moment I started doing (Net)DevOps. These are some of my notes and examples.
[Read More]
L3VPN on Cisco IOS XR and Juniper MX with BGP PE-CE Routing
Using the network I created previously, in this post, I am going to create a basic MPLS L3VPN between a Cisco IOS XR and a Juniper MX and use BGP between the CPE and the PE:
[Read More]
Arista configure session
To configure an Arista, you can jump in configuration mode and start firing off your configuration commands one after the other and have the changes take effect immediately. Quite a few people that I have spoken with, people that have been working with Arista’s for several years, took this approach...
[Read More]
NAPALM
Up until this point in my career, most of my scripting efforts involved PyEZ, Paramiko and Netmiko. But after having to work with multiple vendors inside SaltStack, I started looking into NAPALM. This post is a short summary of what I have learned so far about NAPALM in general.
[Read More]
6VPE between Juniper MX and Cisco IOS XR
In this post, we will enable an existing MPLS L3VPN for IPv6 using 6VPE. We will extend the cust-1 VPN in the topology we used during my last post, MPLS L3VPN between Juniper MX and Cisco IOS XR, and enable 6VPE across Cisco IOS XR and MX routers to connect...
[Read More]
MPLS L3VPN between Juniper MX and Cisco IOS XR
Lately, I have been playing around with a lab that involves Cisco IOS XR and Juniper devices. The main intention I have with it is to be able to quickly test something or to check how I could automate something.
[Read More]
Using the Junos proxy minion in SaltStack.
To enable SaltStack to control devices that cannot run standard salt-minion software, we turn to proxy minions. The proxy minion is a process that Salt controls as if it were a minion. In turn, the proxy minion controls a device through the API or through CLI commands.
[Read More]
Exploring the Arista eAPI using pyeapi.
The Arista EOS command API, or eAPI, has been maturing ever since EOS 4.12. Recently, I started to look into ways to use this API for information retrieval. In this article, I am sharing what I learned exploring the eAPI using a library called pyeapi.
[Read More]
SaltStack execution modules and the CLI.
In this article, I will first show you three examples on how you can use SaltStack to send a CLI command to a device. As we will see, different proxy minion types have their own function that you can use to send a command to a device.
[Read More]
Juniper and JSON
By default, Juniper will return XML in response to your RPC calls. But if you prefer, Juniper can translate the XML into JSON for you.
[Read More]
Using Junos PyEZ for information gathering
Most people that start out working with Junos using PyEZ seem to get stuck trying to figure out how to retrieve information. Since I always learn the most from short examples that I can reverse engineer or alter to fit my needs, I aim to provide you with just that....
[Read More]
Templating for network engineers in SaltStack.
Templating in SaltStack is an absolute joy. It makes the generation of text-based configurations for networking devices very easy. This write up is to give you some tips and insights that I could have used when I started templating myself. After walking you through an easy way to render templates...
[Read More]
Getting your facts straight.
The Salt grains interface is a very powerful tool. The interface presents Salt with grains of information about the system that is being managed. One of the things you can use grains for is to make your templating more effective. As a network engineer, I mostly work with proxy-minions. And...
[Read More]
First post!
For quite some time I have been thinking about writing some articles again.
[Read More]