Posts by Tag

DevOps

Lambda packaging the right way

November 11, 2020

Simplicity One of the beautiful things about Lambda is its simplicity. You write code, test it and then you deploy it. If it works on your machine, you can ...

Architecting on AWS: ALB

October 26, 2020

This post is a part of the “Architecting on AWS” series Picking up from where we left off, we need eliminate the single point(s) of failure in our architect...

Architecting on AWS: EC2

October 21, 2020

This post is a part of the “Architecting on AWS” series Picking up from where we left off, the the devs’ requirements were as follows: They need a web s...

Architecting on AWS series

October 17, 2020

In a previous post, I stressed the importance of hands on experience when it comes to preparing for AWS exams. However, people often object because “it’s too...

Taking pytest for a test drive

June 16, 2020

In the previous post we got a glimpse of pytest. In this post, we’ll be diving a little deeper. To do this, we’ll be build a basic Flask app. Before we star...

Test Driven Development (TDD) in Python

June 15, 2020

Have you heard of Test Driven Development (TDD)? If you haven’t, you’re in for a real treat. TDD is a development methodology. Before writing a new function...

Learn Python: Dissecting Netmiko - Part 3

June 14, 2020

This is the third post in this series. If you missed Part 2, you can find it here. Dissecting platforms Though it appears platforms is only 2 lines: 1 2 p...

Writing clean Python using Black

June 08, 2020

There are two important methodologies which can be used to assist you in writing clean, maintainable code. They are: Style Guides Test Driven Developmen...

Learn Python: Dissecting Netmiko - Part 2

May 05, 2020

This is the second post in this series. If you missed Part 1, you can find it here. Dissecting ConnectHandler Let’s continue our ConnectHandler investigati...

Learn Python: Dissecting Netmiko - Part 1

May 04, 2020

In the not too distant past, I was a network engineer. In fact, it’s my interest in network automation that led me to DevOps, but I digress. During my networ...

Kubernetes from the Ground Up: What is it?

March 13, 2018

If you’ve looked into containers before, you’ve likely heard the name Kubernetes. This post will tackle what it is at a high level, while subsequent posts wi...

DevOps: The Evolution of Applications

March 12, 2018

One server per application In the not too distant past, it was normal to have a one to one relationship between applications and servers. For example, your ...

Getting Started with Prometheus - Part 2

November 13, 2017

As you’ve probably guessed by Docker posts, I’m a huge fan of containerisation. Therefore instead of installing Prometheus on a host, let’s instead spin it u...

Getting Started with Prometheus - Part 1

November 12, 2017

If you’ve used Grafana, or even heard of it, chances are you’ve also heard of InfluxDB and Prometheus too. As I haven’t touched on the latter yet, I figured ...

Getting Started with Docker - Part 2

November 01, 2017

In the previous post we may have started running before we could walk. In this post we’ll first take a few steps back to make sure we cover the basics before...

Getting Started with Docker - Part 1

October 31, 2017

For those new to Docker, you’re probably wondering - What is it exactly? “Docker is the company driving the container movement and the only container platfo...

Git: nano on Windows

September 02, 2017

When you’re developing on two different OS’ (e.g Windows & Linux), the last thing you want to do is have to remember which tools to use on which system. ...

Python: Demystifying AWS’ Boto3

August 31, 2017

As the GitHub page says, “Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) for Python, which allows Python developers to write software ...

Git: Merging & Rebasing basics

August 26, 2017

In the Git: Keeping in sync post we learned how to merge the orgin/master commits into our local master branch. Then in Git: Effective branching using workfl...

Git: Keeping in sync

August 20, 2017

In the Getting start with git post we covered a number of things, one of which was using push to send our commits to a remote git repo. This is works fine wh...

Git: Effective branching using workflows

August 20, 2017

In the Getting started with git we learned about local and remote branches (master and origin/master respectively), and in Git: Keeping in sync we learned ho...

Getting started with git

August 19, 2017

What is git? Wikipedia has a great answer for this question: Git is a version control system for tracking changes in computer files and coordinating work o...

Testing your code with pytest

August 13, 2017

If you’re fairly new to coding chances are you’ve run into an issue where you make a minor change in one place, and then end up breaking your script in anoth...

Allure2: A GUI for your code tests

August 13, 2017

In my previous post I touched on the basics of how you can use pytest to test your code. In this post I’ll be covering how you can use Allure2 to prettify yo...

Python: Shadowing

July 17, 2017

In my previous post, Python: Scope, I touched on the topic of Shadowing. In this post I’ll be delving deeper into it. As Wikipedia says, variable shadowing ...

Python: Scope

July 16, 2017

Scope is the term used to define the location(s) in which Python searches for a name to object mapping (e.g a variable). As described in this StackOverflow ...

Python: if name == “main

July 13, 2017

There are plenty of articles on the internet that attempt to explain what if name == “main“ is and what it does, but (in my humble opinion), the examples are...

Navigating InfluxDB CLI

June 13, 2017

I’ve demonstrated a few InfluxDB commands in my Getting to know InfluxDB and InfluxDB: Retention Policies & Shard Groups posts but though it would be a g...

Getting to know Telegraf

June 13, 2017

I first mentioned Telegraf in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the In...

InfluxDB: Retention Policies & Shard Groups

June 11, 2017

Note: This is a continuation of the Getting to know InfluxDB post. If you haven’t read it yet, I suggest you do before reading this post. I found InfluxDB’s...

Getting to know InfluxDB

June 11, 2017

I touched on InfluxDB in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the Install...

Interpreted, Bytecode & Just-in-Time

June 02, 2017

In my previous post I discussed what a compiler does. In this post I will cover Interpreted code, Bytecode and Just-in-Time compilation. One thing to note at...

Understanding Ansible Output Structure

May 21, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. In the Ansible –extra-vars post we saw just how out of control outputs ca...

Looping through Dictionaries in Ansible

May 21, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. In the Understanding Ansible Output Structure post we saw how to extract ...

Cleaning Up Ansible Loop Outputs

May 20, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. As we saw in the –extra-vars post, the first Playbook produces a very cle...

Ansible –extra-vars

May 20, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. Often you will see variables defined in a Playbook, a Task and/or a varia...

Installing Git on Windows

May 19, 2017

Installing Git on Windows is very similar to installing it on Linux. That might not come as a surprise though because the tools we’ll be using in this post a...

Installing Ansible on Windows

May 19, 2017

While Ansible is not supported on Windows, it is very easy to get it up and running. The Ansible documentation provides information on how to do it using  Wi...

What does a Compiler do?

May 17, 2017

If you’ve used Linux before and/or have coded using a language such as C, you will have come across a compiler. Though because they’re so easy to use, you mi...

Python: Statements & Expression

May 13, 2017

In Learning Python (a must read for anyone interested in Python!), author Mark Lutz refers to statements and expressions frequently, but give a clear explana...

Installing NTC Ansible

April 27, 2017

I’ve written about NTC-Ansible a couple of times already and thought now would be a good time to run you through the installation process. The github page pr...

Jinja2 Tests Overview

April 18, 2017

As per the Jinja documentation: Beside “filters“, there are also so-called “tests” available. Tests can be used to test a variable against a common expressi...

Jinja2 selectattr() Filter

April 18, 2017

As per the documentation: “selectattr() filters a sequence of objects by applying a test to the specified attribute of each object, and only selecting the o...

Jinja2 Overview

April 18, 2017

There are two ways in which you can use Jinja templates inside of Ansible are: Templates Filters This blog post demonstrates both of these techniques...

Jinja2 map() Filter

April 18, 2017

Reference: jinja Applies a filter on a sequence of objects or looks up an attribute. This is useful when dealing with lists of objects but you are really on...

Jinja2 Filter Overview

April 18, 2017

Reference: Stack Overflow With the pipe character you pass a value to a filter. There are numerous Jinja 2 filters but Ansible brings some additional filter...

Jinja2 equalto() Test

April 18, 2017

Reference: Jinja Check if an object has the same value as another object. Example As per the selectattr( )  page, the Jinja equalto( )  Test, as well as t...

Jinja2 default() Test

April 18, 2017

Example #1 Reference: Jinja Syntax: default(value, default_value=u'', boolean=False) Example #1 If the value is undefined it will return the passed def...

Git Local Overwrite

April 18, 2017

If your local repository is behind that of the remote repository and your locally tracked files differ from those of the remote repository, you will encounte...

Installing Git on Ubuntu

April 18, 2017

Install git sudo apt-get install git Generating Ubuntu SSH key ssh-keygen Find your SSH key. cd ~/.ss...

Ansible vars Lists

April 18, 2017

Lists can be provided to a module through vars specified inside a Playbook or they can be provided directly inside a Task. In the examples below we want to ...

Ansible Variables

April 18, 2017

Using Variables: About Jinja2 Reference: Ansible Ansible allows you to reference variables in your playbooks using the Jinja2 templating system. While you ...

Ansible Variable Persistence

April 18, 2017

Reference: Stackoverflow set_fact module only sets facts available during a run. For persistent facts, you’ll need to either: Static: define them i...

Ansible set_facts

April 18, 2017

Reference: Ansible This module allows setting new variables. Variables are set on a host-by-host basis just like facts discovered by the setup module. ...

Ansible search() Test

April 18, 2017

Reference: Ansible match  requires a complete match in the string, while search  only requires matching a subset of the string. Example As per the selecta...

Ansible Minimum Viable Playbook (MVP)

April 18, 2017

Reference: Adam’s Tech Blog The Minimum Viable Playbook (MVP) is the shortest, most useful Ansible playbook I have. Whenever I need to write some Ansible co...

Ansible match() Test

April 18, 2017

Reference: Ansible match requires a complete match in the string, while search only requires matching a subset of the string. Example As per the selectatt...

Ansible Lists & Dicts Overview

April 18, 2017

Reference: Ansible All members of a list are lines beginning at the same indentation level starting with a -  (a dash and a space): --- # A list of tasty f...

Ansible Inventory

April 18, 2017

Hostnames Reference: Ansible Variables & Inventory  inventory_hostname  is the name of the hostname as configured in Ansible’s inventory host file. Thi...

Ansible Installation

April 18, 2017

Reference: Ansible To configure the PPA on your machine and install Ansible run these commands: $ sudo apt-get install software-properties-common $ sudo ap...

Ansible Conditionals

April 18, 2017

Inline expressions Reference: Inline ‘if’ expressions It’s possible to use inline if-expressions: {{ 'Update' if files else 'Continue' }} Note: See the...

Ansible Built-in Variables

April 18, 2017

Ansible has built in variables which you can come in handy with some Playbooks. They can be viewed using the following Ad-Hoc command: ansible all -i 192.16...

Ansible Ad-Hoc Commands

April 18, 2017

As per the Ansible documentation: An ad-hoc command is something that you might type in to do something really quick, but don’t want to save for later. For...

The Anatomy of an Ansible Playbook

April 09, 2017

I published my Ansible Playbook Structure post a few months ago. Upon re-reading it recently I felt that it lacked detailed around the components of a playbo...

Interacting with NetApp APIs, Part 3

April 06, 2017

In Part 2 of this series we made our first API call and received over 200 lines of XML as a result. The reason why we received so much output is because we d...

Interacting with NetApp APIs, Part 2

April 05, 2017

Picking up where I left off in Part 1 of this series, let’s continue our exploration of ZExplore :) Mandatory Parameters In part 1 I touched on the fact th...

Interacting with NetApp APIs, Part 1

April 03, 2017

If you’re a regular reader of this blog, you’ll see that I’ve been posting about automation and Python quite a lot recently. The reason being that it’s not o...

Learning Python

February 02, 2017

In my Why Automate? post I discussed how important I feel automation skills will be for engineers in the near future. I even went as far as to say that those...

Writing your own API, Part 4

November 27, 2016

Now that we’ve covered how TextFSM work and how it can be used to record useful information from device outputs, it’s time to move our focus on how we use Te...

Why Automate?

November 27, 2016

As my collection of automation posts continues to grow, now is a good time to discuss why you should use automation. The two automation related comments/que...

Ansible Playbook Structure

November 27, 2016

Update: If you find this article useful, I suggest reading the Anatomy of an Ansible Playbook post as well. Recently I posted about how it can be easy to ge...

Writing your own API, Part 3

November 21, 2016

In my previous post I covered how to to download, install and test TextFSM. In this post I’ll demonstrate how to write your own template files so that you ca...

Writing your own API, Part 2

November 21, 2016

As I mentioned in my previous post, NTC-Ansible uses TextFSM templates to allow you to convert your CLI outputs to JSON and then access the data in an API-li...

Writing your own API, Part 1

November 21, 2016

In this series of posts I will cover how you can create your own API-like functionality for devices which do not have APIs built into them. Before I get star...

Getting started with Ansible

November 20, 2016

In my previous post, Getting started with Network Automation, I discussed why I chose Ansible as my configuration management and orchestration tool over the ...

Getting started with Network Automation

November 20, 2016

I’ve been looking into network automation for quite some time now. Originally I started off looking into automating small tasks by writing Python scripts but...

Back to top ↑

Cisco

Multithreading with Python and Netmiko

June 28, 2020

If you ran the script in the previous post, you will have found it took approximately 18 seconds to run. While that may not feel like a lot of time, what if ...

Subnetting Made Easy, Part 6

March 27, 2016

Note: As you will soon see I use tables (some might say excessively :P) in this post. I did this is because it closely resembles what a lot of network engine...

Finding a Host’s Switchport

October 30, 2015

In this post I will demonstrate how we can find out which of SW3’s switchports PC1 is connected to in the topology diagram below. To make things more fun tho...

Mastering EIGRP Metric Calculations

October 24, 2015

To properly administer an EIGRP network an admin really should know how EIGRP calculates and chooses best paths. If you’ve read any CCNA or CCNP resource you...

Subnetting Made Easy, Part 5

October 04, 2015

After publishing my previous post, I received another e-mail from the author of the original e-mail: … So basically, I would like to find out how to find th...

Subnetting Made Easy, Part 4

October 02, 2015

Recently I received the following e-mail from a reader: I have read, and followed your method of finding subnet mask addresses, and calculating the first an...

A Deep Dive in OSPF LSAs, Part 7

April 28, 2015

So far in this series I’ve covered Type 1, 2 and 3 LSAs. Next I’m going to cover Type 4 and Type 5 LSAs with the help of this topology. Before we get star...

A Deep Dive in OSPF LSAs, Part 6

April 24, 2015

Up until this point I have only covered Type 1 and Type 2 LSAs in this series. I’m guessing by now you must be quite familiar with them and are interested to...

A Deep Dive in OSPF LSAs, Part 5

April 24, 2015

In Part 3 I demonstrated how you can use Type 1 and Type 2 LSAs to map the topology an OSPF area. In this post we’ll do the reverse. By looking at a network ...

A Deep Dive in OSPF LSAs, Part 4

April 23, 2015

As mentioned a couple of times in this series, Type 1 LSAs differ between Broadcast and Point-to-Point segments. To demonstrate this, I’ll be using the same ...

A Deep Dive in OSPF LSAs, Part 3

April 23, 2015

In my previous post I covered Type 1 and Type 2 LSAs in relation to broadcast networks. In this post I’ll demonstrate how you can use these LSAs to map the t...

A Deep Dive in OSPF LSAs, Part 2

April 22, 2015

In my previous post I covered the inspiration for this series of posts as well as many of OSPF’s LSAs. Now that we’ve got the boring stuff out of the way, le...

A Deep Dive in OSPF LSAs, Part 1

April 22, 2015

Configuring an OSPF network can be very easy. Within a couple of commands you can have a fully functioning network. While being easy to configure is definite...

A Deep Dive in OSPF LSAs – Index

April 21, 2015

Below is a list of all the posts in the “A Deep Dive in OSPF LSAs” series: A Deep Dive in OSPF LSAs, Part 1 A Deep Dive in OSPF LSAs, Part 2 A Deep D...

Subnetting Made Easy - Index

August 31, 2013

Below is a list of all the posts in the “Subnetting Made Easy” series: Subnetting Made Easy, Part 1 Subnetting Made Easy, Part 2 Subnetting Made Easy...

Zone-Based Policy Firewall, Part 2

August 13, 2013

In my previous post I touched on the four parts (Zones & Zone Members, Class Maps, Policy Maps and Zone Pairs) which make up a ZFW configuration. In this...

Zone-Based Policy Firewall, Part 1

August 12, 2013

Cisco’s Zone-Based Policy Firewall (ZFW) can be quite confusing when you first start looking in to it, so over the next couple of blog posts I hope to provid...

Subnetting Made Easy, Part 3

August 04, 2013

Note: For the first post in this series, please see the Subnetting Made Easy, Part 1 post. Recently I received an e-mail from a reader who was having troubl...

Shape Average Vs Shape Peak - Part 3

July 30, 2013

In my previous post in this series I covered the difference between Shape Average, Shape Peak and Shape with no Excess. Now that that’s out of the way, let’s...

EIGRP No Auto Summary Command, Part 2

July 20, 2013

A few years ago I wrote a blog post about EIGRP and the “auto-summary” command called EIGRP No Auto Summary Command, Part 1. In that post I provided a brief ...

MTU Vs MSS - Part Two

May 24, 2013

A little while back I posted an entry called MTU Vs MSS - Part One. At the time the plan was to follow it up with Part Two a short time later, however, here ...

Understanding MQC Series

May 18, 2013

Series Index I am in the process of writing a series of blog posts which will cover: Modular QoS CLI (MQC) Weighted Fair Queue (WFQ) Class-Based Wei...

Understanding MQC, Part 3: Output Analysis

May 18, 2013

In my previous post I implemented a basic QoS configuration. In this post I will demonstrate how the “bandwidth” and “priority” commands treat their respecti...

Understanding MQC, Part 1: The Basics

May 18, 2013

Over the course of my next few blog posts I will be covering Modular QoS CLI (MQC), Weighted Fair Queue (WFQ), Class-Based Weighed Fair Queuing (CBWFQ) and L...

New Website Launch - Ultimate Cisco Lab

May 09, 2013

In the Connecting Your PC to Your Virtual GNS3 Routers post I provided basic instructions explaining how you can connect your PC to your GNS3 topology, allow...

Shape Average Vs Shape Peak - Part 2

April 02, 2013

Note: If you haven’t read Shape Average Vs Shape Peak - Part 1 already, I suggest you read it first and then return to this entry. Three Types of Shaping T...

Shape Average Vs Shape Peak - Part 1

March 29, 2013

When I first started looking in to the differences between Shape Average and Shape Peak, I soon found myself getting lost in all of the acronyms - Tc, Bc, Be...

New PC - Nexus 1000V here I come!

December 01, 2012

As per my previous post, I have been in the market for a new PC for a little while now and have finally made a purchase. The specs can be found below. CP...

Download & Install Nexus 1000v For Free!

November 08, 2012

Cisco has recently announced that the Nexus 1000v can be downloaded and installed free of charge. This is great news for those of us who use VMware products,...

Saving GNS3 Topologies

September 01, 2012

A lot of people (myself included) have had trouble saving their GNS3 topologies properly. You think you’ve done it properly, only to find the next time you o...

MTU Vs MSS - Part One

February 17, 2012

Have you ever seen the below configuration and wondered what these commands do? And why the MSS value always seems to be 40 bytes lower than the MTU? interf...

GNS3 IOS Memory Errors - Solution

February 10, 2012

In a previous post I talked about GNS3 memory errors that produced the below log messages when certain IOS images were used and NATing was enabled: R1(confi...

Fast GNS3 Router Bootup

October 08, 2011

As all Cisco IOS users/Cisco engineers will have seen when booting up a switch or a router, the device will decompress the image file which is represented by...

Emulating a Multi Layer Switch in GNS3

September 28, 2011

As most of you know, you can get switch-like capabilities in GNS3 by inserting a NM-16ESW in to a compatible router. This is necessary because at present, dy...

GNS3 Duplex Mismatch Messages

September 24, 2011

When Cisco devices are connected to one another and CDP is enabled (which it is by default), if one port is configured as full duplex but the other is config...

GNS3 IOS Memory Errors

September 23, 2011

Update: Please see this page for a fix to this issue. The other day I decided to upgrade my GNS3 IOS to c3725-adventerprisek9-mz.124-15.T14.bin. All seemed ...

URL Redirects using NAT

August 30, 2011

In my previous post, Router URL Filtering using NBAR, I explained how it was possible to block users from accessing websites simply by using NBAR, a class-ma...

Subnetting Made Easy - Formula

August 29, 2011

I covered subnetting in my earlier posts, Subnetting Made Easy, Part 1 and Subnetting Made Easy, Part 2. In the latter mentioned post, I explained how you c...

Router URL Filtering using NBAR

August 29, 2011

There are many ways you can block users from accessing websites they shouldn’t be, such as firewalls, proxy servers, DNS servers, etc. However, if you have a...

Subnetting Made Easy, Part 2

August 28, 2011

In my previous post, Subnetting Made Easy, Part 1, I demonstrated the way I use to find the Network Address, First Usable Address, Last Usable Address and Br...

Subnetting Made Easy, Part 1

August 27, 2011

There are a wide range of techniques people use to work out their network, host and broadcast addresses. I prefer to take the binary approach as I find it th...

Single Public IP NATing to Multiple Hosts

August 26, 2011

In my previous blog entry, Multiple Public IP NATing to Multiple Hosts, I described how you can use “one to one” NATing to allocate one public IP address per...

Multiple Public IP NATing to Multiple Hosts

August 26, 2011

I have seen quite a lot of ask the question, “how do I NAT multiple public IPs to multiple inside hosts?”. I think what confuses most people is when they are...

EIGRP Network Command Tips

August 08, 2011

I discussed the EIGRP “network” command in the EIGEP Network Command – The Easy Way Out post, as well as the EIGRP Route Advertising post, and I’m about to d...

EIGRP Network Command - The Easy Way Out

August 08, 2011

In my EIGRP Route Advertising post I said “in order for two routers to exchange EIGRP routes, they must both be part of the same subnet and have a network co...

The “do” Command

August 08, 2011

Don’t you just hate it when your in the middle of implementing a new configuration but then decide you’d like to issue a “show” or “ping” command so you drop...

Dangers of the EIGRP “Neighbor” Command

August 06, 2011

I have touched on EIGRP a few times before and here we are again. In my EIGRP Route Advertising post I explained how EIGRP neighbor relationships can be cre...

EIGRP No Auto Summary Command, Part 1

May 28, 2010

In my previous post about EIGRP Route Advertisements I touched on the “no auto-summary” command, but did not delve in to the details of what this command act...

EIGRP Route Advertising

May 15, 2010

In the forums that I frequently visit I always see people asking how EIGRP route advertising works. The users are not sure how to correctly use the “network”...

CBAC in Action, Part 2

April 18, 2010

In my previous CBAC post I covered how to deny all external traffic unless it is in response to a request someone on the LAN has made, e.g If you send a ping...

CBAC in Action, Part 1

April 18, 2010

In a previous post I talked about CBAC and a few of the ways in which it, in conjunction with NBAR can be used to secure your network. Today I will create a ...

CBAC Firewall

April 17, 2010

In my previous post I mentioned the Cisco IOS firewall feature known as CBAC (Context-Based Access Control). Today I will describe it in more detail and expl...

NBAR and its Many Uses

April 16, 2010

NBAR, also known as Network Based Application Recognition is an invaluable tool that many people do not know exists or simply just don’t use it enough. As t...

GNS3 + Real Cisco Gear

April 14, 2010

For those of you who have never heard of GNS3 before, you are in for a treat! What it does is allow you to run multiple routers on your computer in a virtua...

Back to top ↑

Labs

Finding a Host’s Switchport

October 30, 2015

In this post I will demonstrate how we can find out which of SW3’s switchports PC1 is connected to in the topology diagram below. To make things more fun tho...

Mastering EIGRP Metric Calculations

October 24, 2015

To properly administer an EIGRP network an admin really should know how EIGRP calculates and chooses best paths. If you’ve read any CCNA or CCNP resource you...

A Deep Dive in OSPF LSAs, Part 7

April 28, 2015

So far in this series I’ve covered Type 1, 2 and 3 LSAs. Next I’m going to cover Type 4 and Type 5 LSAs with the help of this topology. Before we get star...

A Deep Dive in OSPF LSAs, Part 6

April 24, 2015

Up until this point I have only covered Type 1 and Type 2 LSAs in this series. I’m guessing by now you must be quite familiar with them and are interested to...

A Deep Dive in OSPF LSAs, Part 5

April 24, 2015

In Part 3 I demonstrated how you can use Type 1 and Type 2 LSAs to map the topology an OSPF area. In this post we’ll do the reverse. By looking at a network ...

A Deep Dive in OSPF LSAs, Part 4

April 23, 2015

As mentioned a couple of times in this series, Type 1 LSAs differ between Broadcast and Point-to-Point segments. To demonstrate this, I’ll be using the same ...

A Deep Dive in OSPF LSAs, Part 3

April 23, 2015

In my previous post I covered Type 1 and Type 2 LSAs in relation to broadcast networks. In this post I’ll demonstrate how you can use these LSAs to map the t...

A Deep Dive in OSPF LSAs, Part 2

April 22, 2015

In my previous post I covered the inspiration for this series of posts as well as many of OSPF’s LSAs. Now that we’ve got the boring stuff out of the way, le...

Shape Average Vs Shape Peak - Part 3

July 30, 2013

In my previous post in this series I covered the difference between Shape Average, Shape Peak and Shape with no Excess. Now that that’s out of the way, let’s...

EIGRP No Auto Summary Command, Part 2

July 20, 2013

A few years ago I wrote a blog post about EIGRP and the “auto-summary” command called EIGRP No Auto Summary Command, Part 1. In that post I provided a brief ...

MTU Vs MSS - Part Two

May 24, 2013

A little while back I posted an entry called MTU Vs MSS - Part One. At the time the plan was to follow it up with Part Two a short time later, however, here ...

Understanding MQC Series

May 18, 2013

Series Index I am in the process of writing a series of blog posts which will cover: Modular QoS CLI (MQC) Weighted Fair Queue (WFQ) Class-Based Wei...

Understanding MQC, Part 3: Output Analysis

May 18, 2013

In my previous post I implemented a basic QoS configuration. In this post I will demonstrate how the “bandwidth” and “priority” commands treat their respecti...

Understanding MQC, Part 1: The Basics

May 18, 2013

Over the course of my next few blog posts I will be covering Modular QoS CLI (MQC), Weighted Fair Queue (WFQ), Class-Based Weighed Fair Queuing (CBWFQ) and L...

New Website Launch - Ultimate Cisco Lab

May 09, 2013

In the Connecting Your PC to Your Virtual GNS3 Routers post I provided basic instructions explaining how you can connect your PC to your GNS3 topology, allow...

New PC - Nexus 1000V here I come!

December 01, 2012

As per my previous post, I have been in the market for a new PC for a little while now and have finally made a purchase. The specs can be found below. CP...

Download & Install Nexus 1000v For Free!

November 08, 2012

Cisco has recently announced that the Nexus 1000v can be downloaded and installed free of charge. This is great news for those of us who use VMware products,...

Saving GNS3 Topologies

September 01, 2012

A lot of people (myself included) have had trouble saving their GNS3 topologies properly. You think you’ve done it properly, only to find the next time you o...

Fast GNS3 Router Bootup

October 08, 2011

As all Cisco IOS users/Cisco engineers will have seen when booting up a switch or a router, the device will decompress the image file which is represented by...

Emulating a Multi Layer Switch in GNS3

September 28, 2011

As most of you know, you can get switch-like capabilities in GNS3 by inserting a NM-16ESW in to a compatible router. This is necessary because at present, dy...

GNS3 Duplex Mismatch Messages

September 24, 2011

When Cisco devices are connected to one another and CDP is enabled (which it is by default), if one port is configured as full duplex but the other is config...

GNS3 IOS Memory Errors

September 23, 2011

Update: Please see this page for a fix to this issue. The other day I decided to upgrade my GNS3 IOS to c3725-adventerprisek9-mz.124-15.T14.bin. All seemed ...

Single Public IP NATing to Multiple Hosts

August 26, 2011

In my previous blog entry, Multiple Public IP NATing to Multiple Hosts, I described how you can use “one to one” NATing to allocate one public IP address per...

Multiple Public IP NATing to Multiple Hosts

August 26, 2011

I have seen quite a lot of ask the question, “how do I NAT multiple public IPs to multiple inside hosts?”. I think what confuses most people is when they are...

EIGRP Network Command Tips

August 08, 2011

I discussed the EIGRP “network” command in the EIGEP Network Command – The Easy Way Out post, as well as the EIGRP Route Advertising post, and I’m about to d...

EIGRP Network Command - The Easy Way Out

August 08, 2011

In my EIGRP Route Advertising post I said “in order for two routers to exchange EIGRP routes, they must both be part of the same subnet and have a network co...

The “do” Command

August 08, 2011

Don’t you just hate it when your in the middle of implementing a new configuration but then decide you’d like to issue a “show” or “ping” command so you drop...

Dangers of the EIGRP “Neighbor” Command

August 06, 2011

I have touched on EIGRP a few times before and here we are again. In my EIGRP Route Advertising post I explained how EIGRP neighbor relationships can be cre...

EIGRP No Auto Summary Command, Part 1

May 28, 2010

In my previous post about EIGRP Route Advertisements I touched on the “no auto-summary” command, but did not delve in to the details of what this command act...

EIGRP Route Advertising

May 15, 2010

In the forums that I frequently visit I always see people asking how EIGRP route advertising works. The users are not sure how to correctly use the “network”...

CBAC in Action, Part 2

April 18, 2010

In my previous CBAC post I covered how to deny all external traffic unless it is in response to a request someone on the LAN has made, e.g If you send a ping...

CBAC in Action, Part 1

April 18, 2010

In a previous post I talked about CBAC and a few of the ways in which it, in conjunction with NBAR can be used to secure your network. Today I will create a ...

GNS3 + Real Cisco Gear

April 14, 2010

For those of you who have never heard of GNS3 before, you are in for a treat! What it does is allow you to run multiple routers on your computer in a virtua...

Back to top ↑

GNS3

A Deep Dive in OSPF LSAs, Part 7

April 28, 2015

So far in this series I’ve covered Type 1, 2 and 3 LSAs. Next I’m going to cover Type 4 and Type 5 LSAs with the help of this topology. Before we get star...

A Deep Dive in OSPF LSAs, Part 6

April 24, 2015

Up until this point I have only covered Type 1 and Type 2 LSAs in this series. I’m guessing by now you must be quite familiar with them and are interested to...

A Deep Dive in OSPF LSAs, Part 5

April 24, 2015

In Part 3 I demonstrated how you can use Type 1 and Type 2 LSAs to map the topology an OSPF area. In this post we’ll do the reverse. By looking at a network ...

A Deep Dive in OSPF LSAs, Part 4

April 23, 2015

As mentioned a couple of times in this series, Type 1 LSAs differ between Broadcast and Point-to-Point segments. To demonstrate this, I’ll be using the same ...

A Deep Dive in OSPF LSAs, Part 3

April 23, 2015

In my previous post I covered Type 1 and Type 2 LSAs in relation to broadcast networks. In this post I’ll demonstrate how you can use these LSAs to map the t...

A Deep Dive in OSPF LSAs, Part 2

April 22, 2015

In my previous post I covered the inspiration for this series of posts as well as many of OSPF’s LSAs. Now that we’ve got the boring stuff out of the way, le...

Shape Average Vs Shape Peak - Part 3

July 30, 2013

In my previous post in this series I covered the difference between Shape Average, Shape Peak and Shape with no Excess. Now that that’s out of the way, let’s...

EIGRP No Auto Summary Command, Part 2

July 20, 2013

A few years ago I wrote a blog post about EIGRP and the “auto-summary” command called EIGRP No Auto Summary Command, Part 1. In that post I provided a brief ...

MTU Vs MSS - Part Two

May 24, 2013

A little while back I posted an entry called MTU Vs MSS - Part One. At the time the plan was to follow it up with Part Two a short time later, however, here ...

Understanding MQC Series

May 18, 2013

Series Index I am in the process of writing a series of blog posts which will cover: Modular QoS CLI (MQC) Weighted Fair Queue (WFQ) Class-Based Wei...

Understanding MQC, Part 3: Output Analysis

May 18, 2013

In my previous post I implemented a basic QoS configuration. In this post I will demonstrate how the “bandwidth” and “priority” commands treat their respecti...

Understanding MQC, Part 1: The Basics

May 18, 2013

Over the course of my next few blog posts I will be covering Modular QoS CLI (MQC), Weighted Fair Queue (WFQ), Class-Based Weighed Fair Queuing (CBWFQ) and L...

New Website Launch - Ultimate Cisco Lab

May 09, 2013

In the Connecting Your PC to Your Virtual GNS3 Routers post I provided basic instructions explaining how you can connect your PC to your GNS3 topology, allow...

New PC - Nexus 1000V here I come!

December 01, 2012

As per my previous post, I have been in the market for a new PC for a little while now and have finally made a purchase. The specs can be found below. CP...

Download & Install Nexus 1000v For Free!

November 08, 2012

Cisco has recently announced that the Nexus 1000v can be downloaded and installed free of charge. This is great news for those of us who use VMware products,...

Saving GNS3 Topologies

September 01, 2012

A lot of people (myself included) have had trouble saving their GNS3 topologies properly. You think you’ve done it properly, only to find the next time you o...

GNS3 IOS Memory Errors - Solution

February 10, 2012

In a previous post I talked about GNS3 memory errors that produced the below log messages when certain IOS images were used and NATing was enabled: R1(confi...

Fast GNS3 Router Bootup

October 08, 2011

As all Cisco IOS users/Cisco engineers will have seen when booting up a switch or a router, the device will decompress the image file which is represented by...

GNS3 Duplex Mismatch Messages

September 24, 2011

When Cisco devices are connected to one another and CDP is enabled (which it is by default), if one port is configured as full duplex but the other is config...

GNS3 IOS Memory Errors

September 23, 2011

Update: Please see this page for a fix to this issue. The other day I decided to upgrade my GNS3 IOS to c3725-adventerprisek9-mz.124-15.T14.bin. All seemed ...

Single Public IP NATing to Multiple Hosts

August 26, 2011

In my previous blog entry, Multiple Public IP NATing to Multiple Hosts, I described how you can use “one to one” NATing to allocate one public IP address per...

Multiple Public IP NATing to Multiple Hosts

August 26, 2011

I have seen quite a lot of ask the question, “how do I NAT multiple public IPs to multiple inside hosts?”. I think what confuses most people is when they are...

EIGRP Network Command Tips

August 08, 2011

I discussed the EIGRP “network” command in the EIGEP Network Command – The Easy Way Out post, as well as the EIGRP Route Advertising post, and I’m about to d...

EIGRP Network Command - The Easy Way Out

August 08, 2011

In my EIGRP Route Advertising post I said “in order for two routers to exchange EIGRP routes, they must both be part of the same subnet and have a network co...

The “do” Command

August 08, 2011

Don’t you just hate it when your in the middle of implementing a new configuration but then decide you’d like to issue a “show” or “ping” command so you drop...

Dangers of the EIGRP “Neighbor” Command

August 06, 2011

I have touched on EIGRP a few times before and here we are again. In my EIGRP Route Advertising post I explained how EIGRP neighbor relationships can be cre...

EIGRP No Auto Summary Command, Part 1

May 28, 2010

In my previous post about EIGRP Route Advertisements I touched on the “no auto-summary” command, but did not delve in to the details of what this command act...

EIGRP Route Advertising

May 15, 2010

In the forums that I frequently visit I always see people asking how EIGRP route advertising works. The users are not sure how to correctly use the “network”...

CBAC in Action, Part 1

April 18, 2010

In a previous post I talked about CBAC and a few of the ways in which it, in conjunction with NBAR can be used to secure your network. Today I will create a ...

GNS3 + Real Cisco Gear

April 14, 2010

For those of you who have never heard of GNS3 before, you are in for a treat! What it does is allow you to run multiple routers on your computer in a virtua...

Back to top ↑

Automation

Python: Automating network health checks

October 15, 2020

I was a network engineer in a previous life. Though I’ve moved into DevOps, my love for network automation has not subsided. Recently, an engineer posted a ...

Understanding Ansible Output Structure

May 21, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. In the Ansible –extra-vars post we saw just how out of control outputs ca...

Looping through Dictionaries in Ansible

May 21, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. In the Understanding Ansible Output Structure post we saw how to extract ...

Cleaning Up Ansible Loop Outputs

May 20, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. As we saw in the –extra-vars post, the first Playbook produces a very cle...

Ansible –extra-vars

May 20, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. Often you will see variables defined in a Playbook, a Task and/or a varia...

Installing Ansible on Windows

May 19, 2017

While Ansible is not supported on Windows, it is very easy to get it up and running. The Ansible documentation provides information on how to do it using  Wi...

Jinja2 Tests Overview

April 18, 2017

As per the Jinja documentation: Beside “filters“, there are also so-called “tests” available. Tests can be used to test a variable against a common expressi...

Jinja2 selectattr() Filter

April 18, 2017

As per the documentation: “selectattr() filters a sequence of objects by applying a test to the specified attribute of each object, and only selecting the o...

Jinja2 Overview

April 18, 2017

There are two ways in which you can use Jinja templates inside of Ansible are: Templates Filters This blog post demonstrates both of these techniques...

Jinja2 map() Filter

April 18, 2017

Reference: jinja Applies a filter on a sequence of objects or looks up an attribute. This is useful when dealing with lists of objects but you are really on...

Jinja2 Filter Overview

April 18, 2017

Reference: Stack Overflow With the pipe character you pass a value to a filter. There are numerous Jinja 2 filters but Ansible brings some additional filter...

Jinja2 equalto() Test

April 18, 2017

Reference: Jinja Check if an object has the same value as another object. Example As per the selectattr( )  page, the Jinja equalto( )  Test, as well as t...

Jinja2 default() Test

April 18, 2017

Example #1 Reference: Jinja Syntax: default(value, default_value=u'', boolean=False) Example #1 If the value is undefined it will return the passed def...

Ansible vars Lists

April 18, 2017

Lists can be provided to a module through vars specified inside a Playbook or they can be provided directly inside a Task. In the examples below we want to ...

Ansible Variables

April 18, 2017

Using Variables: About Jinja2 Reference: Ansible Ansible allows you to reference variables in your playbooks using the Jinja2 templating system. While you ...

Ansible Variable Persistence

April 18, 2017

Reference: Stackoverflow set_fact module only sets facts available during a run. For persistent facts, you’ll need to either: Static: define them i...

Ansible set_facts

April 18, 2017

Reference: Ansible This module allows setting new variables. Variables are set on a host-by-host basis just like facts discovered by the setup module. ...

Ansible search() Test

April 18, 2017

Reference: Ansible match  requires a complete match in the string, while search  only requires matching a subset of the string. Example As per the selecta...

Ansible Minimum Viable Playbook (MVP)

April 18, 2017

Reference: Adam’s Tech Blog The Minimum Viable Playbook (MVP) is the shortest, most useful Ansible playbook I have. Whenever I need to write some Ansible co...

Ansible match() Test

April 18, 2017

Reference: Ansible match requires a complete match in the string, while search only requires matching a subset of the string. Example As per the selectatt...

Ansible Lists & Dicts Overview

April 18, 2017

Reference: Ansible All members of a list are lines beginning at the same indentation level starting with a -  (a dash and a space): --- # A list of tasty f...

Ansible Inventory

April 18, 2017

Hostnames Reference: Ansible Variables & Inventory  inventory_hostname  is the name of the hostname as configured in Ansible’s inventory host file. Thi...

Ansible Installation

April 18, 2017

Reference: Ansible To configure the PPA on your machine and install Ansible run these commands: $ sudo apt-get install software-properties-common $ sudo ap...

Ansible Conditionals

April 18, 2017

Inline expressions Reference: Inline ‘if’ expressions It’s possible to use inline if-expressions: {{ 'Update' if files else 'Continue' }} Note: See the...

Ansible Built-in Variables

April 18, 2017

Ansible has built in variables which you can come in handy with some Playbooks. They can be viewed using the following Ad-Hoc command: ansible all -i 192.16...

Ansible Ad-Hoc Commands

April 18, 2017

As per the Ansible documentation: An ad-hoc command is something that you might type in to do something really quick, but don’t want to save for later. For...

The Anatomy of an Ansible Playbook

April 09, 2017

I published my Ansible Playbook Structure post a few months ago. Upon re-reading it recently I felt that it lacked detailed around the components of a playbo...

Interacting with NetApp APIs, Part 3

April 06, 2017

In Part 2 of this series we made our first API call and received over 200 lines of XML as a result. The reason why we received so much output is because we d...

Interacting with NetApp APIs, Part 2

April 05, 2017

Picking up where I left off in Part 1 of this series, let’s continue our exploration of ZExplore :) Mandatory Parameters In part 1 I touched on the fact th...

Interacting with NetApp APIs, Part 1

April 03, 2017

If you’re a regular reader of this blog, you’ll see that I’ve been posting about automation and Python quite a lot recently. The reason being that it’s not o...

Writing your own API, Part 4

November 27, 2016

Now that we’ve covered how TextFSM work and how it can be used to record useful information from device outputs, it’s time to move our focus on how we use Te...

Why Automate?

November 27, 2016

As my collection of automation posts continues to grow, now is a good time to discuss why you should use automation. The two automation related comments/que...

Ansible Playbook Structure

November 27, 2016

Update: If you find this article useful, I suggest reading the Anatomy of an Ansible Playbook post as well. Recently I posted about how it can be easy to ge...

Writing your own API, Part 3

November 21, 2016

In my previous post I covered how to to download, install and test TextFSM. In this post I’ll demonstrate how to write your own template files so that you ca...

Writing your own API, Part 2

November 21, 2016

As I mentioned in my previous post, NTC-Ansible uses TextFSM templates to allow you to convert your CLI outputs to JSON and then access the data in an API-li...

Writing your own API, Part 1

November 21, 2016

In this series of posts I will cover how you can create your own API-like functionality for devices which do not have APIs built into them. Before I get star...

Getting started with Ansible

November 20, 2016

In my previous post, Getting started with Network Automation, I discussed why I chose Ansible as my configuration management and orchestration tool over the ...

Getting started with Network Automation

November 20, 2016

I’ve been looking into network automation for quite some time now. Originally I started off looking into automating small tasks by writing Python scripts but...

Back to top ↑

Ansible

Understanding Ansible Output Structure

May 21, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. In the Ansible –extra-vars post we saw just how out of control outputs ca...

Looping through Dictionaries in Ansible

May 21, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. In the Understanding Ansible Output Structure post we saw how to extract ...

Cleaning Up Ansible Loop Outputs

May 20, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. As we saw in the –extra-vars post, the first Playbook produces a very cle...

Ansible –extra-vars

May 20, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. Often you will see variables defined in a Playbook, a Task and/or a varia...

Installing Ansible on Windows

May 19, 2017

While Ansible is not supported on Windows, it is very easy to get it up and running. The Ansible documentation provides information on how to do it using  Wi...

Installing NTC Ansible

April 27, 2017

I’ve written about NTC-Ansible a couple of times already and thought now would be a good time to run you through the installation process. The github page pr...

Jinja2 Tests Overview

April 18, 2017

As per the Jinja documentation: Beside “filters“, there are also so-called “tests” available. Tests can be used to test a variable against a common expressi...

Jinja2 selectattr() Filter

April 18, 2017

As per the documentation: “selectattr() filters a sequence of objects by applying a test to the specified attribute of each object, and only selecting the o...

Jinja2 Overview

April 18, 2017

There are two ways in which you can use Jinja templates inside of Ansible are: Templates Filters This blog post demonstrates both of these techniques...

Jinja2 map() Filter

April 18, 2017

Reference: jinja Applies a filter on a sequence of objects or looks up an attribute. This is useful when dealing with lists of objects but you are really on...

Jinja2 Filter Overview

April 18, 2017

Reference: Stack Overflow With the pipe character you pass a value to a filter. There are numerous Jinja 2 filters but Ansible brings some additional filter...

Jinja2 equalto() Test

April 18, 2017

Reference: Jinja Check if an object has the same value as another object. Example As per the selectattr( )  page, the Jinja equalto( )  Test, as well as t...

Jinja2 default() Test

April 18, 2017

Example #1 Reference: Jinja Syntax: default(value, default_value=u'', boolean=False) Example #1 If the value is undefined it will return the passed def...

Ansible vars Lists

April 18, 2017

Lists can be provided to a module through vars specified inside a Playbook or they can be provided directly inside a Task. In the examples below we want to ...

Ansible Variables

April 18, 2017

Using Variables: About Jinja2 Reference: Ansible Ansible allows you to reference variables in your playbooks using the Jinja2 templating system. While you ...

Ansible Variable Persistence

April 18, 2017

Reference: Stackoverflow set_fact module only sets facts available during a run. For persistent facts, you’ll need to either: Static: define them i...

Ansible set_facts

April 18, 2017

Reference: Ansible This module allows setting new variables. Variables are set on a host-by-host basis just like facts discovered by the setup module. ...

Ansible search() Test

April 18, 2017

Reference: Ansible match  requires a complete match in the string, while search  only requires matching a subset of the string. Example As per the selecta...

Ansible Minimum Viable Playbook (MVP)

April 18, 2017

Reference: Adam’s Tech Blog The Minimum Viable Playbook (MVP) is the shortest, most useful Ansible playbook I have. Whenever I need to write some Ansible co...

Ansible match() Test

April 18, 2017

Reference: Ansible match requires a complete match in the string, while search only requires matching a subset of the string. Example As per the selectatt...

Ansible Lists & Dicts Overview

April 18, 2017

Reference: Ansible All members of a list are lines beginning at the same indentation level starting with a -  (a dash and a space): --- # A list of tasty f...

Ansible Inventory

April 18, 2017

Hostnames Reference: Ansible Variables & Inventory  inventory_hostname  is the name of the hostname as configured in Ansible’s inventory host file. Thi...

Ansible Installation

April 18, 2017

Reference: Ansible To configure the PPA on your machine and install Ansible run these commands: $ sudo apt-get install software-properties-common $ sudo ap...

Ansible Conditionals

April 18, 2017

Inline expressions Reference: Inline ‘if’ expressions It’s possible to use inline if-expressions: {{ 'Update' if files else 'Continue' }} Note: See the...

Ansible Built-in Variables

April 18, 2017

Ansible has built in variables which you can come in handy with some Playbooks. They can be viewed using the following Ad-Hoc command: ansible all -i 192.16...

Ansible Ad-Hoc Commands

April 18, 2017

As per the Ansible documentation: An ad-hoc command is something that you might type in to do something really quick, but don’t want to save for later. For...

The Anatomy of an Ansible Playbook

April 09, 2017

I published my Ansible Playbook Structure post a few months ago. Upon re-reading it recently I felt that it lacked detailed around the components of a playbo...

Writing your own API, Part 4

November 27, 2016

Now that we’ve covered how TextFSM work and how it can be used to record useful information from device outputs, it’s time to move our focus on how we use Te...

Why Automate?

November 27, 2016

As my collection of automation posts continues to grow, now is a good time to discuss why you should use automation. The two automation related comments/que...

Ansible Playbook Structure

November 27, 2016

Update: If you find this article useful, I suggest reading the Anatomy of an Ansible Playbook post as well. Recently I posted about how it can be easy to ge...

Writing your own API, Part 3

November 21, 2016

In my previous post I covered how to to download, install and test TextFSM. In this post I’ll demonstrate how to write your own template files so that you ca...

Writing your own API, Part 2

November 21, 2016

As I mentioned in my previous post, NTC-Ansible uses TextFSM templates to allow you to convert your CLI outputs to JSON and then access the data in an API-li...

Writing your own API, Part 1

November 21, 2016

In this series of posts I will cover how you can create your own API-like functionality for devices which do not have APIs built into them. Before I get star...

Getting started with Ansible

November 20, 2016

In my previous post, Getting started with Network Automation, I discussed why I chose Ansible as my configuration management and orchestration tool over the ...

Getting started with Network Automation

November 20, 2016

I’ve been looking into network automation for quite some time now. Originally I started off looking into automating small tasks by writing Python scripts but...

Back to top ↑

Python

Python: Automating network health checks

October 15, 2020

I was a network engineer in a previous life. Though I’ve moved into DevOps, my love for network automation has not subsided. Recently, an engineer posted a ...

Multithreading with Python and Netmiko

June 28, 2020

If you ran the script in the previous post, you will have found it took approximately 18 seconds to run. While that may not feel like a lot of time, what if ...

Taking pytest for a test drive

June 16, 2020

In the previous post we got a glimpse of pytest. In this post, we’ll be diving a little deeper. To do this, we’ll be build a basic Flask app. Before we star...

Test Driven Development (TDD) in Python

June 15, 2020

Have you heard of Test Driven Development (TDD)? If you haven’t, you’re in for a real treat. TDD is a development methodology. Before writing a new function...

Learn Python: Dissecting Netmiko - Part 3

June 14, 2020

This is the third post in this series. If you missed Part 2, you can find it here. Dissecting platforms Though it appears platforms is only 2 lines: 1 2 p...

Writing clean Python using Black

June 08, 2020

There are two important methodologies which can be used to assist you in writing clean, maintainable code. They are: Style Guides Test Driven Developmen...

Learn Python: Dissecting Netmiko - Part 2

May 05, 2020

This is the second post in this series. If you missed Part 1, you can find it here. Dissecting ConnectHandler Let’s continue our ConnectHandler investigati...

Learn Python: Dissecting Netmiko - Part 1

May 04, 2020

In the not too distant past, I was a network engineer. In fact, it’s my interest in network automation that led me to DevOps, but I digress. During my networ...

Installing & using Python virtualenv

April 05, 2018

virtualenv, as the name suggests, creates virtual Python environments. If you’re familiar with server virtualisation, virtualenv acts in a similar fashion to...

Python: Demystifying AWS’ Boto3

August 31, 2017

As the GitHub page says, “Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) for Python, which allows Python developers to write software ...

Testing your code with pytest

August 13, 2017

If you’re fairly new to coding chances are you’ve run into an issue where you make a minor change in one place, and then end up breaking your script in anoth...

Allure2: A GUI for your code tests

August 13, 2017

In my previous post I touched on the basics of how you can use pytest to test your code. In this post I’ll be covering how you can use Allure2 to prettify yo...

Python: Shadowing

July 17, 2017

In my previous post, Python: Scope, I touched on the topic of Shadowing. In this post I’ll be delving deeper into it. As Wikipedia says, variable shadowing ...

Python: Scope

July 16, 2017

Scope is the term used to define the location(s) in which Python searches for a name to object mapping (e.g a variable). As described in this StackOverflow ...

Python: if name == “main

July 13, 2017

There are plenty of articles on the internet that attempt to explain what if name == “main“ is and what it does, but (in my humble opinion), the examples are...

Installing Git on Windows

May 19, 2017

Installing Git on Windows is very similar to installing it on Linux. That might not come as a surprise though because the tools we’ll be using in this post a...

Python: Statements & Expression

May 13, 2017

In Learning Python (a must read for anyone interested in Python!), author Mark Lutz refers to statements and expressions frequently, but give a clear explana...

Interacting with NetApp APIs, Part 3

April 06, 2017

In Part 2 of this series we made our first API call and received over 200 lines of XML as a result. The reason why we received so much output is because we d...

Interacting with NetApp APIs, Part 2

April 05, 2017

Picking up where I left off in Part 1 of this series, let’s continue our exploration of ZExplore :) Mandatory Parameters In part 1 I touched on the fact th...

Interacting with NetApp APIs, Part 1

April 03, 2017

If you’re a regular reader of this blog, you’ll see that I’ve been posting about automation and Python quite a lot recently. The reason being that it’s not o...

Learning Python

February 02, 2017

In my Why Automate? post I discussed how important I feel automation skills will be for engineers in the near future. I even went as far as to say that those...

Getting started with Ansible

November 20, 2016

In my previous post, Getting started with Network Automation, I discussed why I chose Ansible as my configuration management and orchestration tool over the ...

Back to top ↑

NetApp

Interacting with NetApp APIs, Part 3

April 06, 2017

In Part 2 of this series we made our first API call and received over 200 lines of XML as a result. The reason why we received so much output is because we d...

Interacting with NetApp APIs, Part 2

April 05, 2017

Picking up where I left off in Part 1 of this series, let’s continue our exploration of ZExplore :) Mandatory Parameters In part 1 I touched on the fact th...

Interacting with NetApp APIs, Part 1

April 03, 2017

If you’re a regular reader of this blog, you’ll see that I’ve been posting about automation and Python quite a lot recently. The reason being that it’s not o...

Building a NetApp ONTAP 9 Lab for free!

October 16, 2016

What better way to start the Zero to Hero Guide than learning how to build your own ONTAP lab for free? Thanks to Neil Anderson over at FlackBox, we can do j...

The NetApp Zero to Hero Guide - Introduction

December 29, 2015

Just under a year ago I wrote a blog series called NetApp From The Ground Up - A Beginner’s Gude. Since the publication of the series I have been getting e-m...

NetApp Insight is just around the corner!

October 09, 2015

I thought I’d write up a quick blog post to celebrate the fact that NetApp Insight is around the corner! If you haven’t seen them already you can find my Ne...

Back to top ↑

Netapp Newbies

Interacting with NetApp APIs, Part 3

April 06, 2017

In Part 2 of this series we made our first API call and received over 200 lines of XML as a result. The reason why we received so much output is because we d...

Interacting with NetApp APIs, Part 2

April 05, 2017

Picking up where I left off in Part 1 of this series, let’s continue our exploration of ZExplore :) Mandatory Parameters In part 1 I touched on the fact th...

Interacting with NetApp APIs, Part 1

April 03, 2017

If you’re a regular reader of this blog, you’ll see that I’ve been posting about automation and Python quite a lot recently. The reason being that it’s not o...

The NetApp Zero to Hero Guide - Introduction

December 29, 2015

Just under a year ago I wrote a blog series called NetApp From The Ground Up - A Beginner’s Gude. Since the publication of the series I have been getting e-m...

Back to top ↑

Jinja2

Cleaning Up Ansible Loop Outputs

May 20, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. As we saw in the –extra-vars post, the first Playbook produces a very cle...

Ansible –extra-vars

May 20, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. Often you will see variables defined in a Playbook, a Task and/or a varia...

Jinja2 Tests Overview

April 18, 2017

As per the Jinja documentation: Beside “filters“, there are also so-called “tests” available. Tests can be used to test a variable against a common expressi...

Jinja2 selectattr() Filter

April 18, 2017

As per the documentation: “selectattr() filters a sequence of objects by applying a test to the specified attribute of each object, and only selecting the o...

Jinja2 Overview

April 18, 2017

There are two ways in which you can use Jinja templates inside of Ansible are: Templates Filters This blog post demonstrates both of these techniques...

Jinja2 map() Filter

April 18, 2017

Reference: jinja Applies a filter on a sequence of objects or looks up an attribute. This is useful when dealing with lists of objects but you are really on...

Jinja2 Filter Overview

April 18, 2017

Reference: Stack Overflow With the pipe character you pass a value to a filter. There are numerous Jinja 2 filters but Ansible brings some additional filter...

Jinja2 equalto() Test

April 18, 2017

Reference: Jinja Check if an object has the same value as another object. Example As per the selectattr( )  page, the Jinja equalto( )  Test, as well as t...

Jinja2 default() Test

April 18, 2017

Example #1 Reference: Jinja Syntax: default(value, default_value=u'', boolean=False) Example #1 If the value is undefined it will return the passed def...

Ansible Variables

April 18, 2017

Using Variables: About Jinja2 Reference: Ansible Ansible allows you to reference variables in your playbooks using the Jinja2 templating system. While you ...

Ansible search() Test

April 18, 2017

Reference: Ansible match  requires a complete match in the string, while search  only requires matching a subset of the string. Example As per the selecta...

Ansible Lists & Dicts Overview

April 18, 2017

Reference: Ansible All members of a list are lines beginning at the same indentation level starting with a -  (a dash and a space): --- # A list of tasty f...

Ansible Conditionals

April 18, 2017

Inline expressions Reference: Inline ‘if’ expressions It’s possible to use inline if-expressions: {{ 'Update' if files else 'Continue' }} Note: See the...

Back to top ↑

Coding

Testing your code with pytest

August 13, 2017

If you’re fairly new to coding chances are you’ve run into an issue where you make a minor change in one place, and then end up breaking your script in anoth...

Allure2: A GUI for your code tests

August 13, 2017

In my previous post I touched on the basics of how you can use pytest to test your code. In this post I’ll be covering how you can use Allure2 to prettify yo...

Python: Shadowing

July 17, 2017

In my previous post, Python: Scope, I touched on the topic of Shadowing. In this post I’ll be delving deeper into it. As Wikipedia says, variable shadowing ...

Python: Scope

July 16, 2017

Scope is the term used to define the location(s) in which Python searches for a name to object mapping (e.g a variable). As described in this StackOverflow ...

Python: if name == “main

July 13, 2017

There are plenty of articles on the internet that attempt to explain what if name == “main“ is and what it does, but (in my humble opinion), the examples are...

Interpreted, Bytecode & Just-in-Time

June 02, 2017

In my previous post I discussed what a compiler does. In this post I will cover Interpreted code, Bytecode and Just-in-Time compilation. One thing to note at...

Installing Git on Windows

May 19, 2017

Installing Git on Windows is very similar to installing it on Linux. That might not come as a surprise though because the tools we’ll be using in this post a...

What does a Compiler do?

May 17, 2017

If you’ve used Linux before and/or have coded using a language such as C, you will have come across a compiler. Though because they’re so easy to use, you mi...

Python: Statements & Expression

May 13, 2017

In Learning Python (a must read for anyone interested in Python!), author Mark Lutz refers to statements and expressions frequently, but give a clear explana...

Back to top ↑

git

Git: nano on Windows

September 02, 2017

When you’re developing on two different OS’ (e.g Windows & Linux), the last thing you want to do is have to remember which tools to use on which system. ...

Git: Merging & Rebasing basics

August 26, 2017

In the Git: Keeping in sync post we learned how to merge the orgin/master commits into our local master branch. Then in Git: Effective branching using workfl...

Git: Keeping in sync

August 20, 2017

In the Getting start with git post we covered a number of things, one of which was using push to send our commits to a remote git repo. This is works fine wh...

Git: Effective branching using workflows

August 20, 2017

In the Getting started with git we learned about local and remote branches (master and origin/master respectively), and in Git: Keeping in sync we learned ho...

Getting started with git

August 19, 2017

What is git? Wikipedia has a great answer for this question: Git is a version control system for tracking changes in computer files and coordinating work o...

Installing Git on Windows

May 19, 2017

Installing Git on Windows is very similar to installing it on Linux. That might not come as a surprise though because the tools we’ll be using in this post a...

Git Local Overwrite

April 18, 2017

If your local repository is behind that of the remote repository and your locally tracked files differ from those of the remote repository, you will encounte...

Installing Git on Ubuntu

April 18, 2017

Install git sudo apt-get install git Generating Ubuntu SSH key ssh-keygen Find your SSH key. cd ~/.ss...

Getting started with Network Automation

November 20, 2016

I’ve been looking into network automation for quite some time now. Originally I started off looking into automating small tasks by writing Python scripts but...

Back to top ↑

Network Automation

Multithreading with Python and Netmiko

June 28, 2020

If you ran the script in the previous post, you will have found it took approximately 18 seconds to run. While that may not feel like a lot of time, what if ...

Learn Python: Dissecting Netmiko - Part 3

June 14, 2020

This is the third post in this series. If you missed Part 2, you can find it here. Dissecting platforms Though it appears platforms is only 2 lines: 1 2 p...

Learn Python: Dissecting Netmiko - Part 2

May 05, 2020

This is the second post in this series. If you missed Part 1, you can find it here. Dissecting ConnectHandler Let’s continue our ConnectHandler investigati...

Learn Python: Dissecting Netmiko - Part 1

May 04, 2020

In the not too distant past, I was a network engineer. In fact, it’s my interest in network automation that led me to DevOps, but I digress. During my networ...

Understanding Ansible Output Structure

May 21, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. In the Ansible –extra-vars post we saw just how out of control outputs ca...

Looping through Dictionaries in Ansible

May 21, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. In the Understanding Ansible Output Structure post we saw how to extract ...

Cleaning Up Ansible Loop Outputs

May 20, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. As we saw in the –extra-vars post, the first Playbook produces a very cle...

Ansible –extra-vars

May 20, 2017

Note that this post uses NTC-Ansible. Installation instructions can be found here. Often you will see variables defined in a Playbook, a Task and/or a varia...

Installing Ansible on Windows

May 19, 2017

While Ansible is not supported on Windows, it is very easy to get it up and running. The Ansible documentation provides information on how to do it using  Wi...

Back to top ↑

Subnetting

Subnetting Made Easy, Part 6

March 27, 2016

Note: As you will soon see I use tables (some might say excessively :P) in this post. I did this is because it closely resembles what a lot of network engine...

Subnetting Made Easy, Part 5

October 04, 2015

After publishing my previous post, I received another e-mail from the author of the original e-mail: … So basically, I would like to find out how to find th...

Subnetting Made Easy, Part 4

October 02, 2015

Recently I received the following e-mail from a reader: I have read, and followed your method of finding subnet mask addresses, and calculating the first an...

Subnetting Made Easy - Index

August 31, 2013

Below is a list of all the posts in the “Subnetting Made Easy” series: Subnetting Made Easy, Part 1 Subnetting Made Easy, Part 2 Subnetting Made Easy...

Subnetting Made Easy, Part 3

August 04, 2013

Note: For the first post in this series, please see the Subnetting Made Easy, Part 1 post. Recently I received an e-mail from a reader who was having troubl...

EIGRP No Auto Summary Command, Part 2

July 20, 2013

A few years ago I wrote a blog post about EIGRP and the “auto-summary” command called EIGRP No Auto Summary Command, Part 1. In that post I provided a brief ...

Subnetting Made Easy - Formula

August 29, 2011

I covered subnetting in my earlier posts, Subnetting Made Easy, Part 1 and Subnetting Made Easy, Part 2. In the latter mentioned post, I explained how you c...

Subnetting Made Easy, Part 2

August 28, 2011

In my previous post, Subnetting Made Easy, Part 1, I demonstrated the way I use to find the Network Address, First Usable Address, Last Usable Address and Br...

Subnetting Made Easy, Part 1

August 27, 2011

There are a wide range of techniques people use to work out their network, host and broadcast addresses. I prefer to take the binary approach as I find it th...

Back to top ↑

QoS

Shape Average Vs Shape Peak - Part 3

July 30, 2013

In my previous post in this series I covered the difference between Shape Average, Shape Peak and Shape with no Excess. Now that that’s out of the way, let’s...

Understanding MQC Series

May 18, 2013

Series Index I am in the process of writing a series of blog posts which will cover: Modular QoS CLI (MQC) Weighted Fair Queue (WFQ) Class-Based Wei...

Understanding MQC, Part 3: Output Analysis

May 18, 2013

In my previous post I implemented a basic QoS configuration. In this post I will demonstrate how the “bandwidth” and “priority” commands treat their respecti...

Understanding MQC, Part 1: The Basics

May 18, 2013

Over the course of my next few blog posts I will be covering Modular QoS CLI (MQC), Weighted Fair Queue (WFQ), Class-Based Weighed Fair Queuing (CBWFQ) and L...

Shape Average Vs Shape Peak - Part 2

April 02, 2013

Note: If you haven’t read Shape Average Vs Shape Peak - Part 1 already, I suggest you read it first and then return to this entry. Three Types of Shaping T...

Shape Average Vs Shape Peak - Part 1

March 29, 2013

When I first started looking in to the differences between Shape Average and Shape Peak, I soon found myself getting lost in all of the acronyms - Tc, Bc, Be...

NBAR and its Many Uses

April 16, 2010

NBAR, also known as Network Based Application Recognition is an invaluable tool that many people do not know exists or simply just don’t use it enough. As t...

Back to top ↑

EIGRP

Mastering EIGRP Metric Calculations

October 24, 2015

To properly administer an EIGRP network an admin really should know how EIGRP calculates and chooses best paths. If you’ve read any CCNA or CCNP resource you...

EIGRP No Auto Summary Command, Part 2

July 20, 2013

A few years ago I wrote a blog post about EIGRP and the “auto-summary” command called EIGRP No Auto Summary Command, Part 1. In that post I provided a brief ...

Emulating a Multi Layer Switch in GNS3

September 28, 2011

As most of you know, you can get switch-like capabilities in GNS3 by inserting a NM-16ESW in to a compatible router. This is necessary because at present, dy...

EIGRP Network Command Tips

August 08, 2011

I discussed the EIGRP “network” command in the EIGEP Network Command – The Easy Way Out post, as well as the EIGRP Route Advertising post, and I’m about to d...

EIGRP Network Command - The Easy Way Out

August 08, 2011

In my EIGRP Route Advertising post I said “in order for two routers to exchange EIGRP routes, they must both be part of the same subnet and have a network co...

Dangers of the EIGRP “Neighbor” Command

August 06, 2011

I have touched on EIGRP a few times before and here we are again. In my EIGRP Route Advertising post I explained how EIGRP neighbor relationships can be cre...

EIGRP No Auto Summary Command, Part 1

May 28, 2010

In my previous post about EIGRP Route Advertisements I touched on the “no auto-summary” command, but did not delve in to the details of what this command act...

EIGRP Route Advertising

May 15, 2010

In the forums that I frequently visit I always see people asking how EIGRP route advertising works. The users are not sure how to correctly use the “network”...

Back to top ↑

Useful Commands

Finding a Host’s Switchport

October 30, 2015

In this post I will demonstrate how we can find out which of SW3’s switchports PC1 is connected to in the topology diagram below. To make things more fun tho...

Shape Average Vs Shape Peak - Part 3

July 30, 2013

In my previous post in this series I covered the difference between Shape Average, Shape Peak and Shape with no Excess. Now that that’s out of the way, let’s...

MTU Vs MSS - Part Two

May 24, 2013

A little while back I posted an entry called MTU Vs MSS - Part One. At the time the plan was to follow it up with Part Two a short time later, however, here ...

MTU Vs MSS - Part One

February 17, 2012

Have you ever seen the below configuration and wondered what these commands do? And why the MSS value always seems to be 40 bytes lower than the MTU? interf...

GNS3 Duplex Mismatch Messages

September 24, 2011

When Cisco devices are connected to one another and CDP is enabled (which it is by default), if one port is configured as full duplex but the other is config...

The “do” Command

August 08, 2011

Don’t you just hate it when your in the middle of implementing a new configuration but then decide you’d like to issue a “show” or “ping” command so you drop...

Dangers of the EIGRP “Neighbor” Command

August 06, 2011

I have touched on EIGRP a few times before and here we are again. In my EIGRP Route Advertising post I explained how EIGRP neighbor relationships can be cre...

EIGRP No Auto Summary Command, Part 1

May 28, 2010

In my previous post about EIGRP Route Advertisements I touched on the “no auto-summary” command, but did not delve in to the details of what this command act...

Back to top ↑

OSPF

A Deep Dive in OSPF LSAs, Part 7

April 28, 2015

So far in this series I’ve covered Type 1, 2 and 3 LSAs. Next I’m going to cover Type 4 and Type 5 LSAs with the help of this topology. Before we get star...

A Deep Dive in OSPF LSAs, Part 6

April 24, 2015

Up until this point I have only covered Type 1 and Type 2 LSAs in this series. I’m guessing by now you must be quite familiar with them and are interested to...

A Deep Dive in OSPF LSAs, Part 5

April 24, 2015

In Part 3 I demonstrated how you can use Type 1 and Type 2 LSAs to map the topology an OSPF area. In this post we’ll do the reverse. By looking at a network ...

A Deep Dive in OSPF LSAs, Part 4

April 23, 2015

As mentioned a couple of times in this series, Type 1 LSAs differ between Broadcast and Point-to-Point segments. To demonstrate this, I’ll be using the same ...

A Deep Dive in OSPF LSAs, Part 3

April 23, 2015

In my previous post I covered Type 1 and Type 2 LSAs in relation to broadcast networks. In this post I’ll demonstrate how you can use these LSAs to map the t...

A Deep Dive in OSPF LSAs, Part 2

April 22, 2015

In my previous post I covered the inspiration for this series of posts as well as many of OSPF’s LSAs. Now that we’ve got the boring stuff out of the way, le...

A Deep Dive in OSPF LSAs, Part 1

April 22, 2015

Configuring an OSPF network can be very easy. Within a couple of commands you can have a fully functioning network. While being easy to configure is definite...

A Deep Dive in OSPF LSAs – Index

April 21, 2015

Below is a list of all the posts in the “A Deep Dive in OSPF LSAs” series: A Deep Dive in OSPF LSAs, Part 1 A Deep Dive in OSPF LSAs, Part 2 A Deep D...

Back to top ↑

LSAs

A Deep Dive in OSPF LSAs, Part 7

April 28, 2015

So far in this series I’ve covered Type 1, 2 and 3 LSAs. Next I’m going to cover Type 4 and Type 5 LSAs with the help of this topology. Before we get star...

A Deep Dive in OSPF LSAs, Part 6

April 24, 2015

Up until this point I have only covered Type 1 and Type 2 LSAs in this series. I’m guessing by now you must be quite familiar with them and are interested to...

A Deep Dive in OSPF LSAs, Part 5

April 24, 2015

In Part 3 I demonstrated how you can use Type 1 and Type 2 LSAs to map the topology an OSPF area. In this post we’ll do the reverse. By looking at a network ...

A Deep Dive in OSPF LSAs, Part 4

April 23, 2015

As mentioned a couple of times in this series, Type 1 LSAs differ between Broadcast and Point-to-Point segments. To demonstrate this, I’ll be using the same ...

A Deep Dive in OSPF LSAs, Part 3

April 23, 2015

In my previous post I covered Type 1 and Type 2 LSAs in relation to broadcast networks. In this post I’ll demonstrate how you can use these LSAs to map the t...

A Deep Dive in OSPF LSAs, Part 2

April 22, 2015

In my previous post I covered the inspiration for this series of posts as well as many of OSPF’s LSAs. Now that we’ve got the boring stuff out of the way, le...

A Deep Dive in OSPF LSAs, Part 1

April 22, 2015

Configuring an OSPF network can be very easy. Within a couple of commands you can have a fully functioning network. While being easy to configure is definite...

A Deep Dive in OSPF LSAs – Index

April 21, 2015

Below is a list of all the posts in the “A Deep Dive in OSPF LSAs” series: A Deep Dive in OSPF LSAs, Part 1 A Deep Dive in OSPF LSAs, Part 2 A Deep D...

Back to top ↑

AWS

Lambda packaging the right way

November 11, 2020

Simplicity One of the beautiful things about Lambda is its simplicity. You write code, test it and then you deploy it. If it works on your machine, you can ...

Architecting on AWS: ALB

October 26, 2020

This post is a part of the “Architecting on AWS” series Picking up from where we left off, we need eliminate the single point(s) of failure in our architect...

Architecting on AWS: EC2

October 21, 2020

This post is a part of the “Architecting on AWS” series Picking up from where we left off, the the devs’ requirements were as follows: They need a web s...

Architecting on AWS series

October 17, 2020

In a previous post, I stressed the importance of hands on experience when it comes to preparing for AWS exams. However, people often object because “it’s too...

Python: Demystifying AWS’ Boto3

August 31, 2017

As the GitHub page says, “Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) for Python, which allows Python developers to write software ...

Back to top ↑

NBAR

Zone-Based Policy Firewall, Part 1

August 12, 2013

Cisco’s Zone-Based Policy Firewall (ZFW) can be quite confusing when you first start looking in to it, so over the next couple of blog posts I hope to provid...

URL Redirects using NAT

August 30, 2011

In my previous post, Router URL Filtering using NBAR, I explained how it was possible to block users from accessing websites simply by using NBAR, a class-ma...

Router URL Filtering using NBAR

August 29, 2011

There are many ways you can block users from accessing websites they shouldn’t be, such as firewalls, proxy servers, DNS servers, etc. However, if you have a...

CBAC in Action, Part 2

April 18, 2010

In my previous CBAC post I covered how to deny all external traffic unless it is in response to a request someone on the LAN has made, e.g If you send a ping...

CBAC in Action, Part 1

April 18, 2010

In a previous post I talked about CBAC and a few of the ways in which it, in conjunction with NBAR can be used to secure your network. Today I will create a ...

CBAC Firewall

April 17, 2010

In my previous post I mentioned the Cisco IOS firewall feature known as CBAC (Context-Based Access Control). Today I will describe it in more detail and expl...

NBAR and its Many Uses

April 16, 2010

NBAR, also known as Network Based Application Recognition is an invaluable tool that many people do not know exists or simply just don’t use it enough. As t...

Back to top ↑

Security

Zone-Based Policy Firewall, Part 2

August 13, 2013

In my previous post I touched on the four parts (Zones & Zone Members, Class Maps, Policy Maps and Zone Pairs) which make up a ZFW configuration. In this...

Zone-Based Policy Firewall, Part 1

August 12, 2013

Cisco’s Zone-Based Policy Firewall (ZFW) can be quite confusing when you first start looking in to it, so over the next couple of blog posts I hope to provid...

Router URL Filtering using NBAR

August 29, 2011

There are many ways you can block users from accessing websites they shouldn’t be, such as firewalls, proxy servers, DNS servers, etc. However, if you have a...

CBAC in Action, Part 2

April 18, 2010

In my previous CBAC post I covered how to deny all external traffic unless it is in response to a request someone on the LAN has made, e.g If you send a ping...

CBAC in Action, Part 1

April 18, 2010

In a previous post I talked about CBAC and a few of the ways in which it, in conjunction with NBAR can be used to secure your network. Today I will create a ...

CBAC Firewall

April 17, 2010

In my previous post I mentioned the Cisco IOS firewall feature known as CBAC (Context-Based Access Control). Today I will describe it in more detail and expl...

NBAR and its Many Uses

April 16, 2010

NBAR, also known as Network Based Application Recognition is an invaluable tool that many people do not know exists or simply just don’t use it enough. As t...

Back to top ↑

Routing Protocols

EIGRP No Auto Summary Command, Part 2

July 20, 2013

A few years ago I wrote a blog post about EIGRP and the “auto-summary” command called EIGRP No Auto Summary Command, Part 1. In that post I provided a brief ...

Emulating a Multi Layer Switch in GNS3

September 28, 2011

As most of you know, you can get switch-like capabilities in GNS3 by inserting a NM-16ESW in to a compatible router. This is necessary because at present, dy...

EIGRP Network Command Tips

August 08, 2011

I discussed the EIGRP “network” command in the EIGEP Network Command – The Easy Way Out post, as well as the EIGRP Route Advertising post, and I’m about to d...

EIGRP Network Command - The Easy Way Out

August 08, 2011

In my EIGRP Route Advertising post I said “in order for two routers to exchange EIGRP routes, they must both be part of the same subnet and have a network co...

Dangers of the EIGRP “Neighbor” Command

August 06, 2011

I have touched on EIGRP a few times before and here we are again. In my EIGRP Route Advertising post I explained how EIGRP neighbor relationships can be cre...

EIGRP No Auto Summary Command, Part 1

May 28, 2010

In my previous post about EIGRP Route Advertisements I touched on the “no auto-summary” command, but did not delve in to the details of what this command act...

EIGRP Route Advertising

May 15, 2010

In the forums that I frequently visit I always see people asking how EIGRP route advertising works. The users are not sure how to correctly use the “network”...

Back to top ↑

Shaping

Shape Average Vs Shape Peak - Part 3

July 30, 2013

In my previous post in this series I covered the difference between Shape Average, Shape Peak and Shape with no Excess. Now that that’s out of the way, let’s...

Understanding MQC Series

May 18, 2013

Series Index I am in the process of writing a series of blog posts which will cover: Modular QoS CLI (MQC) Weighted Fair Queue (WFQ) Class-Based Wei...

Understanding MQC, Part 3: Output Analysis

May 18, 2013

In my previous post I implemented a basic QoS configuration. In this post I will demonstrate how the “bandwidth” and “priority” commands treat their respecti...

Understanding MQC, Part 1: The Basics

May 18, 2013

Over the course of my next few blog posts I will be covering Modular QoS CLI (MQC), Weighted Fair Queue (WFQ), Class-Based Weighed Fair Queuing (CBWFQ) and L...

Shape Average Vs Shape Peak - Part 2

April 02, 2013

Note: If you haven’t read Shape Average Vs Shape Peak - Part 1 already, I suggest you read it first and then return to this entry. Three Types of Shaping T...

Shape Average Vs Shape Peak - Part 1

March 29, 2013

When I first started looking in to the differences between Shape Average and Shape Peak, I soon found myself getting lost in all of the acronyms - Tc, Bc, Be...

Back to top ↑

InfluxDB

Getting Started with Prometheus - Part 1

November 12, 2017

If you’ve used Grafana, or even heard of it, chances are you’ve also heard of InfluxDB and Prometheus too. As I haven’t touched on the latter yet, I figured ...

Navigating InfluxDB CLI

June 13, 2017

I’ve demonstrated a few InfluxDB commands in my Getting to know InfluxDB and InfluxDB: Retention Policies & Shard Groups posts but though it would be a g...

Getting to know Telegraf

June 13, 2017

I first mentioned Telegraf in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the In...

InfluxDB: Retention Policies & Shard Groups

June 11, 2017

Note: This is a continuation of the Getting to know InfluxDB post. If you haven’t read it yet, I suggest you do before reading this post. I found InfluxDB’s...

Getting to know InfluxDB

June 11, 2017

I touched on InfluxDB in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the Install...

Back to top ↑

Docker

Kubernetes from the Ground Up: What is it?

March 13, 2018

If you’ve looked into containers before, you’ve likely heard the name Kubernetes. This post will tackle what it is at a high level, while subsequent posts wi...

Getting Started with Prometheus - Part 2

November 13, 2017

As you’ve probably guessed by Docker posts, I’m a huge fan of containerisation. Therefore instead of installing Prometheus on a host, let’s instead spin it u...

Getting Started with Docker - Part 2

November 01, 2017

In the previous post we may have started running before we could walk. In this post we’ll first take a few steps back to make sure we cover the basics before...

Getting Started with Docker - Part 1

October 31, 2017

For those new to Docker, you’re probably wondering - What is it exactly? “Docker is the company driving the container movement and the only container platfo...

Back to top ↑

Firewall

Zone-Based Policy Firewall, Part 2

August 13, 2013

In my previous post I touched on the four parts (Zones & Zone Members, Class Maps, Policy Maps and Zone Pairs) which make up a ZFW configuration. In this...

Zone-Based Policy Firewall, Part 1

August 12, 2013

Cisco’s Zone-Based Policy Firewall (ZFW) can be quite confusing when you first start looking in to it, so over the next couple of blog posts I hope to provid...

Router URL Filtering using NBAR

August 29, 2011

There are many ways you can block users from accessing websites they shouldn’t be, such as firewalls, proxy servers, DNS servers, etc. However, if you have a...

CBAC in Action, Part 1

April 18, 2010

In a previous post I talked about CBAC and a few of the ways in which it, in conjunction with NBAR can be used to secure your network. Today I will create a ...

CBAC Firewall

April 17, 2010

In my previous post I mentioned the Cisco IOS firewall feature known as CBAC (Context-Based Access Control). Today I will describe it in more detail and expl...

NBAR and its Many Uses

April 16, 2010

NBAR, also known as Network Based Application Recognition is an invaluable tool that many people do not know exists or simply just don’t use it enough. As t...

Back to top ↑

VMWare

Back to top ↑

UCS

Back to top ↑

CBAC

Zone-Based Policy Firewall, Part 2

August 13, 2013

In my previous post I touched on the four parts (Zones & Zone Members, Class Maps, Policy Maps and Zone Pairs) which make up a ZFW configuration. In this...

Zone-Based Policy Firewall, Part 1

August 12, 2013

Cisco’s Zone-Based Policy Firewall (ZFW) can be quite confusing when you first start looking in to it, so over the next couple of blog posts I hope to provid...

CBAC in Action, Part 1

April 18, 2010

In a previous post I talked about CBAC and a few of the ways in which it, in conjunction with NBAR can be used to secure your network. Today I will create a ...

CBAC Firewall

April 17, 2010

In my previous post I mentioned the Cisco IOS firewall feature known as CBAC (Context-Based Access Control). Today I will describe it in more detail and expl...

NBAR and its Many Uses

April 16, 2010

NBAR, also known as Network Based Application Recognition is an invaluable tool that many people do not know exists or simply just don’t use it enough. As t...

Back to top ↑

TextFSM

Installing NTC Ansible

April 27, 2017

I’ve written about NTC-Ansible a couple of times already and thought now would be a good time to run you through the installation process. The github page pr...

Writing your own API, Part 4

November 27, 2016

Now that we’ve covered how TextFSM work and how it can be used to record useful information from device outputs, it’s time to move our focus on how we use Te...

Writing your own API, Part 3

November 21, 2016

In my previous post I covered how to to download, install and test TextFSM. In this post I’ll demonstrate how to write your own template files so that you ca...

Writing your own API, Part 2

November 21, 2016

As I mentioned in my previous post, NTC-Ansible uses TextFSM templates to allow you to convert your CLI outputs to JSON and then access the data in an API-li...

Writing your own API, Part 1

November 21, 2016

In this series of posts I will cover how you can create your own API-like functionality for devices which do not have APIs built into them. Before I get star...

Back to top ↑

Grafana

Getting Started with Prometheus - Part 2

November 13, 2017

As you’ve probably guessed by Docker posts, I’m a huge fan of containerisation. Therefore instead of installing Prometheus on a host, let’s instead spin it u...

Getting Started with Prometheus - Part 1

November 12, 2017

If you’ve used Grafana, or even heard of it, chances are you’ve also heard of InfluxDB and Prometheus too. As I haven’t touched on the latter yet, I figured ...

Back to top ↑

Tools

Navigating InfluxDB CLI

June 13, 2017

I’ve demonstrated a few InfluxDB commands in my Getting to know InfluxDB and InfluxDB: Retention Policies & Shard Groups posts but though it would be a g...

Getting to know Telegraf

June 13, 2017

I first mentioned Telegraf in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the In...

InfluxDB: Retention Policies & Shard Groups

June 11, 2017

Note: This is a continuation of the Getting to know InfluxDB post. If you haven’t read it yet, I suggest you do before reading this post. I found InfluxDB’s...

Getting to know InfluxDB

June 11, 2017

I touched on InfluxDB in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the Install...

Back to top ↑

IaC

Architecting on AWS: ALB

October 26, 2020

This post is a part of the “Architecting on AWS” series Picking up from where we left off, we need eliminate the single point(s) of failure in our architect...

Architecting on AWS: EC2

October 21, 2020

This post is a part of the “Architecting on AWS” series Picking up from where we left off, the the devs’ requirements were as follows: They need a web s...

Python: Demystifying AWS’ Boto3

August 31, 2017

As the GitHub page says, “Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) for Python, which allows Python developers to write software ...

Back to top ↑

Netmiko

Multithreading with Python and Netmiko

June 28, 2020

If you ran the script in the previous post, you will have found it took approximately 18 seconds to run. While that may not feel like a lot of time, what if ...

Learn Python: Dissecting Netmiko - Part 3

June 14, 2020

This is the third post in this series. If you missed Part 2, you can find it here. Dissecting platforms Though it appears platforms is only 2 lines: 1 2 p...

Learn Python: Dissecting Netmiko - Part 2

May 05, 2020

This is the second post in this series. If you missed Part 1, you can find it here. Dissecting ConnectHandler Let’s continue our ConnectHandler investigati...

Learn Python: Dissecting Netmiko - Part 1

May 04, 2020

In the not too distant past, I was a network engineer. In fact, it’s my interest in network automation that led me to DevOps, but I digress. During my networ...

Back to top ↑

NetOps

Multithreading with Python and Netmiko

June 28, 2020

If you ran the script in the previous post, you will have found it took approximately 18 seconds to run. While that may not feel like a lot of time, what if ...

Learn Python: Dissecting Netmiko - Part 3

June 14, 2020

This is the third post in this series. If you missed Part 2, you can find it here. Dissecting platforms Though it appears platforms is only 2 lines: 1 2 p...

Learn Python: Dissecting Netmiko - Part 2

May 05, 2020

This is the second post in this series. If you missed Part 1, you can find it here. Dissecting ConnectHandler Let’s continue our ConnectHandler investigati...

Learn Python: Dissecting Netmiko - Part 1

May 04, 2020

In the not too distant past, I was a network engineer. In fact, it’s my interest in network automation that led me to DevOps, but I digress. During my networ...

Back to top ↑

Certifications

Architecting on AWS: ALB

October 26, 2020

This post is a part of the “Architecting on AWS” series Picking up from where we left off, we need eliminate the single point(s) of failure in our architect...

Architecting on AWS: EC2

October 21, 2020

This post is a part of the “Architecting on AWS” series Picking up from where we left off, the the devs’ requirements were as follows: They need a web s...

Architecting on AWS series

October 17, 2020

In a previous post, I stressed the importance of hands on experience when it comes to preparing for AWS exams. However, people often object because “it’s too...

Back to top ↑

About

About Me - Update

January 03, 2015

Update (January 2015): Well, it has been just over three years since my original “About Me” post and quite a lot has changed. To begin with, I’m no longer 2...

How to Land your Dream Job

November 15, 2014

I have been very lucky in my career to date. Over the years I have been given the privilege of working in some great roles which I have thoroughly enjoyed. B...

About Me

November 13, 2011

Original (November 2011): 2015 Update: See this page to find out what I’ve been up to over the years since this entry was originally posted. I have receive...

Welcome!

April 13, 2010

Hello and welcome to my blog. I know what you are thinking, “not another Cisco Blog!”, but this one will be different, I promise :) The point of this blog ...

Back to top ↑

Riverbed

Back to top ↑

Kubernetes

Kubernetes from the Ground Up: What is it?

March 13, 2018

If you’ve looked into containers before, you’ve likely heard the name Kubernetes. This post will tackle what it is at a high level, while subsequent posts wi...

DevOps: The Evolution of Applications

March 12, 2018

One server per application In the not too distant past, it was normal to have a one to one relationship between applications and servers. For example, your ...

Back to top ↑

Orchestration

Kubernetes from the Ground Up: What is it?

March 13, 2018

If you’ve looked into containers before, you’ve likely heard the name Kubernetes. This post will tackle what it is at a high level, while subsequent posts wi...

DevOps: The Evolution of Applications

March 12, 2018

One server per application In the not too distant past, it was normal to have a one to one relationship between applications and servers. For example, your ...

Back to top ↑

Architecture

Architecting on AWS: ALB

October 26, 2020

This post is a part of the “Architecting on AWS” series Picking up from where we left off, we need eliminate the single point(s) of failure in our architect...

Architecting on AWS: EC2

October 21, 2020

This post is a part of the “Architecting on AWS” series Picking up from where we left off, the the devs’ requirements were as follows: They need a web s...

Architecting on AWS series

October 17, 2020

In a previous post, I stressed the importance of hands on experience when it comes to preparing for AWS exams. However, people often object because “it’s too...

Back to top ↑

Useful Websites

New Website Launch - Ultimate Cisco Lab

May 09, 2013

In the Connecting Your PC to Your Virtual GNS3 Routers post I provided basic instructions explaining how you can connect your PC to your GNS3 topology, allow...

StackExchange - Network Engineering

March 23, 2013

Just a quick post in case you haven’t seen it already - we’re trying to get a “Network Engineering” site going over at StackExchange. If you’re interested, p...

Get Involved - Forums

April 18, 2010

Whether you are are a seasoned Cisco professional or just starting out, one of the best sources of information you will find (apart from this blog :P) are in...

Back to top ↑

Auto Summary

EIGRP No Auto Summary Command, Part 2

July 20, 2013

A few years ago I wrote a blog post about EIGRP and the “auto-summary” command called EIGRP No Auto Summary Command, Part 1. In that post I provided a brief ...

EIGRP Network Command Tips

August 08, 2011

I discussed the EIGRP “network” command in the EIGEP Network Command – The Easy Way Out post, as well as the EIGRP Route Advertising post, and I’m about to d...

EIGRP No Auto Summary Command, Part 1

May 28, 2010

In my previous post about EIGRP Route Advertisements I touched on the “no auto-summary” command, but did not delve in to the details of what this command act...

Back to top ↑

NAT

URL Redirects using NAT

August 30, 2011

In my previous post, Router URL Filtering using NBAR, I explained how it was possible to block users from accessing websites simply by using NBAR, a class-ma...

Single Public IP NATing to Multiple Hosts

August 26, 2011

In my previous blog entry, Multiple Public IP NATing to Multiple Hosts, I described how you can use “one to one” NATing to allocate one public IP address per...

Multiple Public IP NATing to Multiple Hosts

August 26, 2011

I have seen quite a lot of ask the question, “how do I NAT multiple public IPs to multiple inside hosts?”. I think what confuses most people is when they are...

Back to top ↑

Nexus

New PC - Nexus 1000V here I come!

December 01, 2012

As per my previous post, I have been in the market for a new PC for a little while now and have finally made a purchase. The specs can be found below. CP...

Download & Install Nexus 1000v For Free!

November 08, 2012

Cisco has recently announced that the Nexus 1000v can be downloaded and installed free of charge. This is great news for those of us who use VMware products,...

Back to top ↑

Data Center

New PC - Nexus 1000V here I come!

December 01, 2012

As per my previous post, I have been in the market for a new PC for a little while now and have finally made a purchase. The specs can be found below. CP...

Download & Install Nexus 1000v For Free!

November 08, 2012

Cisco has recently announced that the Nexus 1000v can be downloaded and installed free of charge. This is great news for those of us who use VMware products,...

Back to top ↑

N1KV

New PC - Nexus 1000V here I come!

December 01, 2012

As per my previous post, I have been in the market for a new PC for a little while now and have finally made a purchase. The specs can be found below. CP...

Download & Install Nexus 1000v For Free!

November 08, 2012

Cisco has recently announced that the Nexus 1000v can be downloaded and installed free of charge. This is great news for those of us who use VMware products,...

Back to top ↑

Miscellaneous

How to Land your Dream Job

November 15, 2014

I have been very lucky in my career to date. Over the years I have been given the privilege of working in some great roles which I have thoroughly enjoyed. B...

New Website Launch - Ultimate Cisco Lab

May 09, 2013

In the Connecting Your PC to Your Virtual GNS3 Routers post I provided basic instructions explaining how you can connect your PC to your GNS3 topology, allow...

StackExchange - Network Engineering

March 23, 2013

Just a quick post in case you haven’t seen it already - we’re trying to get a “Network Engineering” site going over at StackExchange. If you’re interested, p...

Back to top ↑

CI/CD

Testing your code with pytest

August 13, 2017

If you’re fairly new to coding chances are you’ve run into an issue where you make a minor change in one place, and then end up breaking your script in anoth...

Allure2: A GUI for your code tests

August 13, 2017

In my previous post I touched on the basics of how you can use pytest to test your code. In this post I’ll be covering how you can use Allure2 to prettify yo...

Back to top ↑

TDD

Taking pytest for a test drive

June 16, 2020

In the previous post we got a glimpse of pytest. In this post, we’ll be diving a little deeper. To do this, we’ll be build a basic Flask app. Before we star...

Test Driven Development (TDD) in Python

June 15, 2020

Have you heard of Test Driven Development (TDD)? If you haven’t, you’re in for a real treat. TDD is a development methodology. Before writing a new function...

Back to top ↑

Infrastructure as Code

Architecting on AWS: ALB

October 26, 2020

This post is a part of the “Architecting on AWS” series Picking up from where we left off, we need eliminate the single point(s) of failure in our architect...

Architecting on AWS: EC2

October 21, 2020

This post is a part of the “Architecting on AWS” series Picking up from where we left off, the the devs’ requirements were as follows: They need a web s...

Back to top ↑

Summary Addressing

EIGRP No Auto Summary Command, Part 2

July 20, 2013

A few years ago I wrote a blog post about EIGRP and the “auto-summary” command called EIGRP No Auto Summary Command, Part 1. In that post I provided a brief ...

EIGRP No Auto Summary Command, Part 1

May 28, 2010

In my previous post about EIGRP Route Advertisements I touched on the “no auto-summary” command, but did not delve in to the details of what this command act...

Back to top ↑

MSS

MTU Vs MSS - Part Two

May 24, 2013

A little while back I posted an entry called MTU Vs MSS - Part One. At the time the plan was to follow it up with Part Two a short time later, however, here ...

MTU Vs MSS - Part One

February 17, 2012

Have you ever seen the below configuration and wondered what these commands do? And why the MSS value always seems to be 40 bytes lower than the MTU? interf...

Back to top ↑

MTU

MTU Vs MSS - Part Two

May 24, 2013

A little while back I posted an entry called MTU Vs MSS - Part One. At the time the plan was to follow it up with Part Two a short time later, however, here ...

MTU Vs MSS - Part One

February 17, 2012

Have you ever seen the below configuration and wondered what these commands do? And why the MSS value always seems to be 40 bytes lower than the MTU? interf...

Back to top ↑

ZFW

Zone-Based Policy Firewall, Part 2

August 13, 2013

In my previous post I touched on the four parts (Zones & Zone Members, Class Maps, Policy Maps and Zone Pairs) which make up a ZFW configuration. In this...

Zone-Based Policy Firewall, Part 1

August 12, 2013

Cisco’s Zone-Based Policy Firewall (ZFW) can be quite confusing when you first start looking in to it, so over the next couple of blog posts I hope to provid...

Back to top ↑

Telegraf

Getting to know Telegraf

June 13, 2017

I first mentioned Telegraf in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the In...

Back to top ↑

Boto3

Python: Demystifying AWS’ Boto3

August 31, 2017

As the GitHub page says, “Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) for Python, which allows Python developers to write software ...

Back to top ↑

Prometheus

Getting Started with Prometheus - Part 2

November 13, 2017

As you’ve probably guessed by Docker posts, I’m a huge fan of containerisation. Therefore instead of installing Prometheus on a host, let’s instead spin it u...

Getting Started with Prometheus - Part 1

November 12, 2017

If you’ve used Grafana, or even heard of it, chances are you’ve also heard of InfluxDB and Prometheus too. As I haven’t touched on the latter yet, I figured ...

Back to top ↑

Filter

NBAR and its Many Uses

April 16, 2010

NBAR, also known as Network Based Application Recognition is an invaluable tool that many people do not know exists or simply just don’t use it enough. As t...

Back to top ↑

ACL

CBAC Firewall

April 17, 2010

In my previous post I mentioned the Cisco IOS firewall feature known as CBAC (Context-Based Access Control). Today I will describe it in more detail and expl...

Back to top ↑

Lab

GNS3 IOS Memory Errors - Solution

February 10, 2012

In a previous post I talked about GNS3 memory errors that produced the below log messages when certain IOS images were used and NATing was enabled: R1(confi...

Back to top ↑

Jobs

How to Land your Dream Job

November 15, 2014

I have been very lucky in my career to date. Over the years I have been given the privilege of working in some great roles which I have thoroughly enjoyed. B...

Back to top ↑

Cygwin

Installing Ansible on Windows

May 19, 2017

While Ansible is not supported on Windows, it is very easy to get it up and running. The Ansible documentation provides information on how to do it using  Wi...

Back to top ↑

Monitoring

Back to top ↑

Windows

Back to top ↑

Amazon

Python: Demystifying AWS’ Boto3

August 31, 2017

As the GitHub page says, “Boto3 is the Amazon Web Services (AWS) Software Development Kit (SDK) for Python, which allows Python developers to write software ...

Back to top ↑

nano

Git: nano on Windows

September 02, 2017

When you’re developing on two different OS’ (e.g Windows & Linux), the last thing you want to do is have to remember which tools to use on which system. ...

Back to top ↑

Serverless

DevOps: The Evolution of Applications

March 12, 2018

One server per application In the not too distant past, it was normal to have a one to one relationship between applications and servers. For example, your ...

Back to top ↑

GitLab

Back to top ↑

Flask

Back to top ↑

Networking

Python: Automating network health checks

October 15, 2020

I was a network engineer in a previous life. Though I’ve moved into DevOps, my love for network automation has not subsided. Recently, an engineer posted a ...

Back to top ↑