Lambda packaging the right way
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 ...
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 ...
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...
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...
This post is a part of the “Architecting on AWS” series Today’s the first day at our new job! After meeting the team, we were given our first task: Set up a...
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...
Due to COVID social distancing, I’m currently working from home. As I no longer travel to and from the office each day, I figured I’d put my newfound spare t...
As a senior Sales Engineer for Trend Micro, I regularly run security PoCs, demos, webinars, etc. One day while running one of these sessions, I had an idea: ...
Test Driven Development (TDD) in Python touched on TDD and pytest. Then in Taking pytest for a test drive we dived deeper on both subjects. Now that we’ve g...
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...
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...
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...
There are two important methodologies which can be used to assist you in writing clean, maintainable code. They are: Style Guides Test Driven Developmen...
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...
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...
I’ve used Grafana for several years. Ever since the first time I used it, I have wanted to sit down and write a server which would provide metrics to it thro...
In the previous post, Choosing a configuration method, we looked at the three ways in which a Kubernetes cluster can be configured. In this post we’ll go thr...
GitLab Runner is used as part of GitLab CI/CD pipelines. On a side note, it also supports GitHub and BitBucket too! But I digress… In this post we’ll cover...
In the previous post, What is it?, we gained an understanding of Kubernetes and container orchestrations in general. In this post we’ll cover the three ways ...
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...
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 ...
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...
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 ...
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...
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...
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. ...
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 ...
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...
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...
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...
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...
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...
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...
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 ...
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 ...
A lot of Python books often mention that “everything in Python is an object”, and “objects are first class citizens”, but they don’t always explain what that...
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...
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...
I first mentioned Telegraf in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the In...
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...
I touched on InfluxDB in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the Install...
I mentioned these tools in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and thought now would be a good time to cover their inst...
I remember using Cacti at my first job over a decade ago. I’ve revisited it more than a few times since but it hasn’t been my go to monitoring tool for quite...
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...
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...
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 ...
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...
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 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...
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...
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...
You’ve probably already heard that Python is a strong, dynamically typed language. But what does that actually mean? Let’s jump in and take a look. Dynamica...
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...
A common misconception is that the only difference between Lists and Tuples is that the former is mutable while the latter is immutable. While this is true, ...
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...
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...
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...
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...
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...
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...
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...
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...
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...
Install git sudo apt-get install git Generating Ubuntu SSH key ssh-keygen Find your SSH key. cd ~/.ss...
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 ...
Using Variables: About Jinja2 Reference: Ansible Ansible allows you to reference variables in your playbooks using the Jinja2 templating system. While you ...
Reference: Stackoverflow set_fact module only sets facts available during a run. For persistent facts, you’ll need to either: Static: define them i...
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. ...
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...
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...
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...
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...
Hostnames Reference: Ansible Variables & Inventory inventory_hostname is the name of the hostname as configured in Ansible’s inventory host file. Thi...
Reference: Ansible To configure the PPA on your machine and install Ansible run these commands: $ sudo apt-get install software-properties-common $ sudo ap...
Inline expressions Reference: Inline ‘if’ expressions It’s possible to use inline if-expressions: {{ 'Update' if files else 'Continue' }} Note: See the...
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...
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 Ansible tag documentation does a great job of explaining tags, tag re-used and tag inheritance. However, I’d like to dive a little deeper to show you ju...
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...
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...
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...
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...
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...
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...
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...
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...
My collection of Ansible posts is steadily rising, so I thought it would be a good idea to write a post on how you can connect an Ansible VM into GNS3 so tha...
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...
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...
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...
In my previous post, Getting started with Network Automation, I discussed why I chose Ansible as my configuration management and orchestration tool over the ...
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...
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 ...
Coming from a network engineering background, network automation has always interested me. In fact, it was network automation which spiked my interest in Dev...
My collection of Ansible posts is steadily rising, so I thought it would be a good idea to write a post on how you can connect an Ansible VM into GNS3 so tha...
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...
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...
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...
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...
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...
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...
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...
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 ...
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 ...
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...
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...
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...
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...
In my previous post I described how you can achieve 80Gb per blade with a UCS system. I went a little deeper than I had intended, so I thought it would be go...
OK, so in Part 1 and Part 2 I gave high level overviews of the UCS components. In Part 3 I did it all over again, but went a little deeper that time around. ...
In Part 1 & Part 2 I provided a high level overview of the UCS components. In this post I’m going to delve deeper into each of these components as well a...
In my previous post I covered Wikipedia’s and my versions of an overview of the UCS platform. For good measure, here are a couple of additional “Overview” in...
My NetApp From the Ground Up series of posts have proven to be quite popular. Though I still have quite a lot of posts left to write in that series, I though...
Below is a list of all the posts in the “Cisco UCS From the Ground Up – A Beginner’s Guide” series: Cisco UCS From the Ground Up – A Beginner’s Guide Par...
Note: This post carries on from Part 3. Testing & Reporting Now that you’ve set up your lab, you can start working on the VSHs. Test #1 - TCP Options...
Note: This post carries on from Part 2. Virtual Steelhead Installation Now that the vSwitches are set up, the next thing you will need to do is install the...
Note: This post carries on from Part 1. VLANs SW1 and SW2 have been used to allow multiple devices to connect to the VSH’s Primary, Auxiliary and lan0_0 su...
A little while back I began looking into WAN optimisation, and in particular, Riverbed’s Steelheads. I really enjoyed all that I was reading so decided it wa...
In my previous post Connecting the NetApp Simulator to your Virtual and Physical Labs, I explained the steps you need to follow in order to connect the NetAp...
I have written a few pieces on making the most out of your virtual and physical labs. These include: Connecting Your PC to Your Virtual GNS3 Routers Vi...
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...
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...
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...
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...
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...
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 ...
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 ...
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...
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...
In my previous post I mentioned the six steps which are required in order to implement a QoS solution. In this post I’ll use those steps to create an example...
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...
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...
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...
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...
I have posted a few entries covering GNS3 and how you can use it to help you with your studies. And, in the Connecting Your PC to Your Virtual GNS3 Routers I...
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...
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,...
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...
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...
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...
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...
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...
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...
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 ...
Update: Please also see my Virtual Equipment + Physical Equipment = Big Lab post for more information. As you already know, GNS3 allows you to create virtua...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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”...
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...
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 ...
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, 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...
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...
My collection of Ansible posts is steadily rising, so I thought it would be a good idea to write a post on how you can connect an Ansible VM into GNS3 so tha...
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...
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...
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...
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...
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 ...
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 ...
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...
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...
Note: This post carries on from Part 3. Testing & Reporting Now that you’ve set up your lab, you can start working on the VSHs. Test #1 - TCP Options...
Note: This post carries on from Part 2. Virtual Steelhead Installation Now that the vSwitches are set up, the next thing you will need to do is install the...
Note: This post carries on from Part 1. VLANs SW1 and SW2 have been used to allow multiple devices to connect to the VSH’s Primary, Auxiliary and lan0_0 su...
A little while back I began looking into WAN optimisation, and in particular, Riverbed’s Steelheads. I really enjoyed all that I was reading so decided it wa...
In my previous post Connecting the NetApp Simulator to your Virtual and Physical Labs, I explained the steps you need to follow in order to connect the NetAp...
I have written a few pieces on making the most out of your virtual and physical labs. These include: Connecting Your PC to Your Virtual GNS3 Routers Vi...
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...
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 ...
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 ...
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...
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...
In my previous post I mentioned the six steps which are required in order to implement a QoS solution. In this post I’ll use those steps to create an example...
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...
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...
I have posted a few entries covering GNS3 and how you can use it to help you with your studies. And, in the Connecting Your PC to Your Virtual GNS3 Routers I...
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...
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,...
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...
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...
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...
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...
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 ...
Update: Please also see my Virtual Equipment + Physical Equipment = Big Lab post for more information. As you already know, GNS3 allows you to create virtua...
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...
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...
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...
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...
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...
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...
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...
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”...
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...
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 ...
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...
My collection of Ansible posts is steadily rising, so I thought it would be a good idea to write a post on how you can connect an Ansible VM into GNS3 so tha...
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...
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...
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 ...
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 ...
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...
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...
Note: This post carries on from Part 3. Testing & Reporting Now that you’ve set up your lab, you can start working on the VSHs. Test #1 - TCP Options...
Note: This post carries on from Part 2. Virtual Steelhead Installation Now that the vSwitches are set up, the next thing you will need to do is install the...
Note: This post carries on from Part 1. VLANs SW1 and SW2 have been used to allow multiple devices to connect to the VSH’s Primary, Auxiliary and lan0_0 su...
A little while back I began looking into WAN optimisation, and in particular, Riverbed’s Steelheads. I really enjoyed all that I was reading so decided it wa...
In my previous post Connecting the NetApp Simulator to your Virtual and Physical Labs, I explained the steps you need to follow in order to connect the NetAp...
I have written a few pieces on making the most out of your virtual and physical labs. These include: Connecting Your PC to Your Virtual GNS3 Routers Vi...
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...
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 ...
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 ...
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...
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...
In my previous post I mentioned the six steps which are required in order to implement a QoS solution. In this post I’ll use those steps to create an example...
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...
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...
I have posted a few entries covering GNS3 and how you can use it to help you with your studies. And, in the Connecting Your PC to Your Virtual GNS3 Routers I...
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...
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,...
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...
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...
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...
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...
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 ...
Update: Please also see my Virtual Equipment + Physical Equipment = Big Lab post for more information. As you already know, GNS3 allows you to create virtua...
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...
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...
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...
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...
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...
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...
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...
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”...
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 ...
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...
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 ...
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...
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 ...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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 ...
Using Variables: About Jinja2 Reference: Ansible Ansible allows you to reference variables in your playbooks using the Jinja2 templating system. While you ...
Reference: Stackoverflow set_fact module only sets facts available during a run. For persistent facts, you’ll need to either: Static: define them i...
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. ...
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...
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...
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...
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...
Hostnames Reference: Ansible Variables & Inventory inventory_hostname is the name of the hostname as configured in Ansible’s inventory host file. Thi...
Reference: Ansible To configure the PPA on your machine and install Ansible run these commands: $ sudo apt-get install software-properties-common $ sudo ap...
Inline expressions Reference: Inline ‘if’ expressions It’s possible to use inline if-expressions: {{ 'Update' if files else 'Continue' }} Note: See the...
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...
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 Ansible tag documentation does a great job of explaining tags, tag re-used and tag inheritance. However, I’d like to dive a little deeper to show you ju...
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...
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...
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...
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...
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...
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...
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...
My collection of Ansible posts is steadily rising, so I thought it would be a good idea to write a post on how you can connect an Ansible VM into GNS3 so tha...
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...
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...
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...
In my previous post, Getting started with Network Automation, I discussed why I chose Ansible as my configuration management and orchestration tool over the ...
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...
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...
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 ...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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...
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 ...
Using Variables: About Jinja2 Reference: Ansible Ansible allows you to reference variables in your playbooks using the Jinja2 templating system. While you ...
Reference: Stackoverflow set_fact module only sets facts available during a run. For persistent facts, you’ll need to either: Static: define them i...
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. ...
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...
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...
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...
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...
Hostnames Reference: Ansible Variables & Inventory inventory_hostname is the name of the hostname as configured in Ansible’s inventory host file. Thi...
Reference: Ansible To configure the PPA on your machine and install Ansible run these commands: $ sudo apt-get install software-properties-common $ sudo ap...
Inline expressions Reference: Inline ‘if’ expressions It’s possible to use inline if-expressions: {{ 'Update' if files else 'Continue' }} Note: See the...
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...
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 Ansible tag documentation does a great job of explaining tags, tag re-used and tag inheritance. However, I’d like to dive a little deeper to show you ju...
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...
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...
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...
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...
My collection of Ansible posts is steadily rising, so I thought it would be a good idea to write a post on how you can connect an Ansible VM into GNS3 so tha...
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...
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...
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...
In my previous post, Getting started with Network Automation, I discussed why I chose Ansible as my configuration management and orchestration tool over the ...
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...
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 ...
As a senior Sales Engineer for Trend Micro, I regularly run security PoCs, demos, webinars, etc. One day while running one of these sessions, I had an idea: ...
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 ...
Coming from a network engineering background, network automation has always interested me. In fact, it was network automation which spiked my interest in Dev...
Test Driven Development (TDD) in Python touched on TDD and pytest. Then in Taking pytest for a test drive we dived deeper on both subjects. Now that we’ve g...
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...
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...
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...
There are two important methodologies which can be used to assist you in writing clean, maintainable code. They are: Style Guides Test Driven Developmen...
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...
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...
I’ve used Grafana for several years. Ever since the first time I used it, I have wanted to sit down and write a server which would provide metrics to it thro...
virtualenv, as the name suggests, creates virtual Python environments. If you’re familiar with server virtualisation, virtualenv acts in a similar fashion to...
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 ...
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...
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...
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 ...
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 ...
A lot of Python books often mention that “everything in Python is an object”, and “objects are first class citizens”, but they don’t always explain what that...
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...
When you install Python on Windows, you may find that you cannot access it and/or pip from anywhere on the commandline. For example, you find that you need t...
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...
You’ve probably already heard that Python is a strong, dynamically typed language. But what does that actually mean? Let’s jump in and take a look. Dynamica...
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...
A common misconception is that the only difference between Lists and Tuples is that the former is mutable while the latter is immutable. While this is true, ...
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...
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...
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...
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...
In my previous post, Getting started with Network Automation, I discussed why I chose Ansible as my configuration management and orchestration tool over the ...
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...
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...
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...
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...
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...
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...
Snap Reserve Overview Reference: NetApp - Understanding Snapshot copy reserve Snapshot copy reserve sets a specific percent of the disk space for stori...
Below is a list of all the posts in the “NetApp From the Ground Up - A Beginner’s Guide” series: NetApp From the Ground Up - Part 1 NetApp From the Gro...
Volume and Aggregate Reallocation Reference: Understanding NetApp Volume and Aggregate Reallocation Summary Volume Reallocation: Spreads a volume a...
Capacity Right-Sizing Reference: NetApp Forum Disk drives from different manufacturers may differ slightly in size even though they belong to the same ...
OnCommand Overview Reference: NetApp Training - Fast Track 101: NetApp Portfolio OnCommand management software helps your customers to monitor and mana...
In my previous post Connecting the NetApp Simulator to your Virtual and Physical Labs, I explained the steps you need to follow in order to connect the NetAp...
I have written a few pieces on making the most out of your virtual and physical labs. These include: Connecting Your PC to Your Virtual GNS3 Routers Vi...
SnapRestore Reference: NetApp SnapRestore NetApp SnapRestore software uses stored Snapshot copies to recover entire file systems or data volumes in sec...
HA Pair Summary Reference: Overview of NetApp Replication and HA features HA Pair is basically two controllers which both have connection to their own...
SyncMirror Summary Reference: Overview of NetApp Replication and HA features SyncMirror mirror aggregates and work on a RAID level. You can configure ...
Backups Reference: NetApp Training - Fast Track 101: NetApp Portfolio Affordable NetApp protection software safeguards your data and business-critical ...
FlexVolume Reference: NetApp University - Introduction to NetApp Products Data production and data protection are the basic capabilities of any storage...
WAFL Reference: Bitpushr: How Data ONTAP caches, assembles and writes data WAFL is our Write Anywhere File Layout. If NVRAM’s role is the most-commonly...
Storage Summary Reference: Me :) Vservers : contain one or more FlexVol volumes, or a single Infinite Volume Volume : is like a partition that can spa...
Overview Source #1 Reference: Datadisk - NetApp Overview The NetApp filer also know as NetApp Fabric-Attached Storage (FAS) is a type of disk storage ...
I have recently started working on a FlexPod environment. The environment relies on NetApp for all of its storage needs, but unfortunately I hadn’t worked wi...
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...
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...
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...
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...
Snap Reserve Overview Reference: NetApp - Understanding Snapshot copy reserve Snapshot copy reserve sets a specific percent of the disk space for stori...
Below is a list of all the posts in the “NetApp From the Ground Up - A Beginner’s Guide” series: NetApp From the Ground Up - Part 1 NetApp From the Gro...
Volume and Aggregate Reallocation Reference: Understanding NetApp Volume and Aggregate Reallocation Summary Volume Reallocation: Spreads a volume a...
Capacity Right-Sizing Reference: NetApp Forum Disk drives from different manufacturers may differ slightly in size even though they belong to the same ...
OnCommand Overview Reference: NetApp Training - Fast Track 101: NetApp Portfolio OnCommand management software helps your customers to monitor and mana...
SnapRestore Reference: NetApp SnapRestore NetApp SnapRestore software uses stored Snapshot copies to recover entire file systems or data volumes in sec...
HA Pair Summary Reference: Overview of NetApp Replication and HA features HA Pair is basically two controllers which both have connection to their own...
SyncMirror Summary Reference: Overview of NetApp Replication and HA features SyncMirror mirror aggregates and work on a RAID level. You can configure ...
Backups Reference: NetApp Training - Fast Track 101: NetApp Portfolio Affordable NetApp protection software safeguards your data and business-critical ...
FlexVolume Reference: NetApp University - Introduction to NetApp Products Data production and data protection are the basic capabilities of any storage...
WAFL Reference: Bitpushr: How Data ONTAP caches, assembles and writes data WAFL is our Write Anywhere File Layout. If NVRAM’s role is the most-commonly...
Storage Summary Reference: Me :) Vservers : contain one or more FlexVol volumes, or a single Infinite Volume Volume : is like a partition that can spa...
Overview Source #1 Reference: Datadisk - NetApp Overview The NetApp filer also know as NetApp Fabric-Attached Storage (FAS) is a type of disk storage ...
I have recently started working on a FlexPod environment. The environment relies on NetApp for all of its storage needs, but unfortunately I hadn’t worked wi...
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...
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...
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...
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...
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...
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...
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...
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...
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...
Using Variables: About Jinja2 Reference: Ansible Ansible allows you to reference variables in your playbooks using the Jinja2 templating system. While you ...
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...
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...
Inline expressions Reference: Inline ‘if’ expressions It’s possible to use inline if-expressions: {{ 'Update' if files else 'Continue' }} Note: See the...
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...
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...
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 ...
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 ...
A lot of Python books often mention that “everything in Python is an object”, and “objects are first class citizens”, but they don’t always explain what that...
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...
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 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...
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...
You’ve probably already heard that Python is a strong, dynamically typed language. But what does that actually mean? Let’s jump in and take a look. Dynamica...
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...
A common misconception is that the only difference between Lists and Tuples is that the former is mutable while the latter is immutable. While this is true, ...
GitLab Runner is used as part of GitLab CI/CD pipelines. On a side note, it also supports GitHub and BitBucket too! But I digress… In this post we’ll cover...
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. ...
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...
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...
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...
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 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...
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...
Install git sudo apt-get install git Generating Ubuntu SSH key ssh-keygen Find your SSH key. cd ~/.ss...
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...
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 ...
Coming from a network engineering background, network automation has always interested me. In fact, it was network automation which spiked my interest in Dev...
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...
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...
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...
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...
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 ...
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...
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...
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...
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...
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...
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...
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...
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...
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 ...
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...
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...
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...
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...
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...
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...
In my previous post I mentioned the six steps which are required in order to implement a QoS solution. In this post I’ll use those steps to create an example...
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...
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...
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, 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...
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 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 ...
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...
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...
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...
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...
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...
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”...
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...
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...
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 ...
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...
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...
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...
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...
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...
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...
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...
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 ...
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 ...
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...
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...
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...
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...
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...
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...
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 ...
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 ...
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...
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...
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...
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...
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 ...
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...
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...
This post is a part of the “Architecting on AWS” series Today’s the first day at our new job! After meeting the team, we were given our first task: Set up a...
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...
Due to COVID social distancing, I’m currently working from home. As I no longer travel to and from the office each day, I figured I’d put my newfound spare t...
As a senior Sales Engineer for Trend Micro, I regularly run security PoCs, demos, webinars, etc. One day while running one of these sessions, I had an idea: ...
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 ...
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...
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...
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...
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...
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 ...
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, 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...
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...
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...
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...
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...
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 ...
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, 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...
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 ...
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...
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...
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...
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...
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...
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”...
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...
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...
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...
In my previous post I mentioned the six steps which are required in order to implement a QoS solution. In this post I’ll use those steps to create an example...
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...
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...
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...
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 ...
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...
I first mentioned Telegraf in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the In...
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...
I touched on InfluxDB in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the Install...
I mentioned these tools in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and thought now would be a good time to cover their inst...
I remember using Cacti at my first job over a decade ago. I’ve revisited it more than a few times since but it hasn’t been my go to monitoring tool for quite...
In the previous post, Choosing a configuration method, we looked at the three ways in which a Kubernetes cluster can be configured. In this post we’ll go thr...
GitLab Runner is used as part of GitLab CI/CD pipelines. On a side note, it also supports GitHub and BitBucket too! But I digress… In this post we’ll cover...
In the previous post, What is it?, we gained an understanding of Kubernetes and container orchestrations in general. In this post we’ll cover the three ways ...
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...
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...
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...
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...
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...
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...
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...
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 ...
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, 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...
Note: This post carries on from Part 3. Testing & Reporting Now that you’ve set up your lab, you can start working on the VSHs. Test #1 - TCP Options...
Note: This post carries on from Part 2. Virtual Steelhead Installation Now that the vSwitches are set up, the next thing you will need to do is install the...
Note: This post carries on from Part 1. VLANs SW1 and SW2 have been used to allow multiple devices to connect to the VSH’s Primary, Auxiliary and lan0_0 su...
A little while back I began looking into WAN optimisation, and in particular, Riverbed’s Steelheads. I really enjoyed all that I was reading so decided it wa...
In my previous post Connecting the NetApp Simulator to your Virtual and Physical Labs, I explained the steps you need to follow in order to connect the NetAp...
I have posted a few entries covering GNS3 and how you can use it to help you with your studies. And, in the Connecting Your PC to Your Virtual GNS3 Routers I...
In my previous post I described how you can achieve 80Gb per blade with a UCS system. I went a little deeper than I had intended, so I thought it would be go...
OK, so in Part 1 and Part 2 I gave high level overviews of the UCS components. In Part 3 I did it all over again, but went a little deeper that time around. ...
In Part 1 & Part 2 I provided a high level overview of the UCS components. In this post I’m going to delve deeper into each of these components as well a...
In my previous post I covered Wikipedia’s and my versions of an overview of the UCS platform. For good measure, here are a couple of additional “Overview” in...
My NetApp From the Ground Up series of posts have proven to be quite popular. Though I still have quite a lot of posts left to write in that series, I though...
Below is a list of all the posts in the “Cisco UCS From the Ground Up – A Beginner’s Guide” series: Cisco UCS From the Ground Up – A Beginner’s Guide Par...
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...
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...
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 ...
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, 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...
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...
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...
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...
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...
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...
I’ve used Grafana for several years. Ever since the first time I used it, I have wanted to sit down and write a server which would provide metrics to it thro...
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...
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 ...
I mentioned these tools in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and thought now would be a good time to cover their inst...
I remember using Cacti at my first job over a decade ago. I’ve revisited it more than a few times since but it hasn’t been my go to monitoring tool for quite...
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...
I first mentioned Telegraf in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the In...
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...
I touched on InfluxDB in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the Install...
I remember using Cacti at my first job over a decade ago. I’ve revisited it more than a few times since but it hasn’t been my go to monitoring tool for quite...
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...
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...
This post is a part of the “Architecting on AWS” series Today’s the first day at our new job! After meeting the team, we were given our first task: Set up a...
As a senior Sales Engineer for Trend Micro, I regularly run security PoCs, demos, webinars, etc. One day while running one of these sessions, I had an idea: ...
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 ...
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 ...
Coming from a network engineering background, network automation has always interested me. In fact, it was network automation which spiked my interest in Dev...
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...
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...
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...
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 ...
Coming from a network engineering background, network automation has always interested me. In fact, it was network automation which spiked my interest in Dev...
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...
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...
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...
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...
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...
This post is a part of the “Architecting on AWS” series Today’s the first day at our new job! After meeting the team, we were given our first task: Set up a...
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...
Due to COVID social distancing, I’m currently working from home. As I no longer travel to and from the office each day, I figured I’d put my newfound spare t...
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...
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...
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...
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 ...
Note: This post carries on from Part 3. Testing & Reporting Now that you’ve set up your lab, you can start working on the VSHs. Test #1 - TCP Options...
Note: This post carries on from Part 2. Virtual Steelhead Installation Now that the vSwitches are set up, the next thing you will need to do is install the...
Note: This post carries on from Part 1. VLANs SW1 and SW2 have been used to allow multiple devices to connect to the VSH’s Primary, Auxiliary and lan0_0 su...
A little while back I began looking into WAN optimisation, and in particular, Riverbed’s Steelheads. I really enjoyed all that I was reading so decided it wa...
In the previous post, Choosing a configuration method, we looked at the three ways in which a Kubernetes cluster can be configured. In this post we’ll go thr...
In the previous post, What is it?, we gained an understanding of Kubernetes and container orchestrations in general. In this post we’ll cover the three ways ...
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...
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 ...
In the previous post, Choosing a configuration method, we looked at the three ways in which a Kubernetes cluster can be configured. In this post we’ll go thr...
In the previous post, What is it?, we gained an understanding of Kubernetes and container orchestrations in general. In this post we’ll cover the three ways ...
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...
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 ...
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...
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...
This post is a part of the “Architecting on AWS” series Today’s the first day at our new job! After meeting the team, we were given our first task: Set up a...
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...
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...
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...
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...
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 ...
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...
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...
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...
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...
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...
I have posted a few entries covering GNS3 and how you can use it to help you with your studies. And, in the Connecting Your PC to Your Virtual GNS3 Routers I...
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...
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,...
I have posted a few entries covering GNS3 and how you can use it to help you with your studies. And, in the Connecting Your PC to Your Virtual GNS3 Routers I...
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...
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,...
I have posted a few entries covering GNS3 and how you can use it to help you with your studies. And, in the Connecting Your PC to Your Virtual GNS3 Routers I...
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...
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,...
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...
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...
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...
GitLab Runner is used as part of GitLab CI/CD pipelines. On a side note, it also supports GitHub and BitBucket too! But I digress… In this post we’ll cover...
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...
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...
Test Driven Development (TDD) in Python touched on TDD and pytest. Then in Taking pytest for a test drive we dived deeper on both subjects. Now that we’ve g...
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...
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...
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...
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...
This post is a part of the “Architecting on AWS” series Today’s the first day at our new job! After meeting the team, we were given our first task: Set up a...
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 ...
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...
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 ...
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...
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 ...
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...
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...
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...
I first mentioned Telegraf in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and then covered its installation and setup in the In...
I mentioned these tools in the My Monitoring Journey: Cacti, Graphite, Grafana & Chronograf post and thought now would be a good time to cover their inst...
As a senior Sales Engineer for Trend Micro, I regularly run security PoCs, demos, webinars, etc. One day while running one of these sessions, I had an idea: ...
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 ...
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...
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 ...
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...
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...
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...
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...
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...
I remember using Cacti at my first job over a decade ago. I’ve revisited it more than a few times since but it hasn’t been my go to monitoring tool for quite...
When you install Python on Windows, you may find that you cannot access it and/or pip from anywhere on the commandline. For example, you find that you need t...
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 ...
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. ...
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 ...
GitLab Runner is used as part of GitLab CI/CD pipelines. On a side note, it also supports GitHub and BitBucket too! But I digress… In this post we’ll cover...
I’ve used Grafana for several years. Ever since the first time I used it, I have wanted to sit down and write a server which would provide metrics to it thro...
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 ...