New DevNet Learning Module, “Home Lab: Setting up Your Desktop OS for Network Programmability”

Hey, you networkers out there. (Yes, it’s a little weird – I’m talking to networkers in a blog post at a site where a lot of Developers hang out.) Remember the short struggle when you first learned about Cisco devices? What cable to use to connect to the console? What drivers to add to make the USB console cable work? What apps you needed (terminal emulator, telnet/SSH app) to connect to your lab devices, and what configuration settings you needed? With proper guidance, and a short bit of practice, you got through it, and those details became second nature – but we all had to get through it.

For network programmability, the same progression happens, but with some complications. You need more software tools in comparison, and many will require upgrades over time. The inner workings of the software tools require more thought, first to avoid some simple mistakes, but also to open a whole world of interesting and useful features.

At the same time, we often install desktop tools and quickly move on to the next topic. For instance, when you first learned about Python, did you stop and think about Python and PIP as installed on your computer, where PIP installs code so that Python knows where to look for it, where the Python executables are, whether there was a concept of a virtual environment even exists? Most of us don’t – we just install the tool and move on.

This blog post introduces a new DevNet Learning Module gives us a chance to reverse that trend. Instead, this new Learning Module has this as its overarching goal:

Help you build the same level of comfort with the programming software tools on your desktop OS as you have built from tools to access the Cisco CLI.

The Basics:
The labs in this module follow the usual DevNet Learning Lab format: read about something, do some scripted exercise steps, and make something work. Almost all the steps in these labs happen on your desktop OS, but with details so the labs can be applied on Windows, Linux, and Mac OS X operation systems.

The labs touch on a variety of topics, and beyond the labs about Python and PIP, you can pick and choose which tools you care to investigate or ignore as you work through the labs. The following figure shows most of the primary topics, with a few other sprinkled throughout the labs.

If you do work through all five labs in order without skipping tools, you should finish with a better understanding of each tool, and have installed a good beginning toolset, as follows:

Python 2.7 and 3.6 installed, with the confidence to know when you are using one or the other.

One virtual environment installed, with the knowledge of how to create more.

PIP installed and working, with the confidence to know how to use PIP with multiple Python versions and with virtual environments.

Experience with how to use the Postman API client to create API calls, group into Collections, and share those Collections with others.

An understanding of the basics of Python editors, Integrated Development Environments (IDEs), Git/GitHub, and Spark, with some suggested further reading and exercises.

The software installed on your computer to begin NETCONF/YANG and Ansible experiments, managing devices either in a DevNet Sandbox or in your own home lab.

The Details:
For the backstory… a while back, the folks at DevNet asked if I would write some Learning Labs, all centered around a theme of what to do with your home lab to make it ready for you to learn about network programmability. Networkers have built their home labs to learn about networking since it was affordable to build a lab with used gear, probably somewhere around the mid 1990’s. So we decided on one module about adding APIC-EM to your home lab, and then this next module about the tools you would put on your home PC’s OS to make you productive with network programmability in your home lab.

As an example of what these labs provide, consider some of the issues discussed in the first two labs in the module about Desktop OS tools. Imagine you take your Windows laptop, with no Python installed by Microsoft, and install Python 3.6. Now you have one specific version/release of Python. When you run the python command, you know it must be using that one release you installed. When you install Python libraries with PIP, you know they install for use with that once instance of Python. And even if you see mention of virtual environments in DevNet, you ignore them, because they do not seem useful on your computer. Nice, simple, and no confusion. However…

Now realize that different labs, books, courses, and libraries will use some examples that require Python 2.7, with others that require 3.6, and possibly different releases of Python version 3. Those differences then require you to install both Python 2.7 and 3.6 (and maybe other releases). Just adding two instances of Python on one computer causes issues with which commands to use, how PIP works, and is one of the first (of many) reasons to think about using virtual environments.

The first two labs in this module discuss Python, PIP, and virtual environments, all within the context of running both Python 2.7 and 3.6.

As another example, the last two labs in the Dekstop OS module take a similar approach to two different topics: NETCONF/YANG and Ansible. These labs approach the topic from the perspective of getting your desktop OS ready to do lab experiments with NETCONF/YANG and Ansible, rather than being about NETCONF/YANG and Ansible as ends to themselves. Each lab lets you prove that you are ready to start doing lab experiments by first testing with an always-on DevNet Sandbox, and then showing how to test with a router in your home lab.

Where from Here:
What next? Find yourself a little time, sit in front of whatever computer you will use in lab for doing network programmability, and work through the labs. Simple enough.

Check out the “Home Lab: APIC-EM and Network Automation” learning track for an overview of the labs contained in each module, and find your starting point on your journey into network programmability.

I’d also love to hear from you, here in the blog, and/or on Twitter (@WendellOdom). What do you think of the idea for this module? What other topics would you be interested in seeing in this Home Lab series? What else can we do to help you become productive on your journey? I’d love to hear your thoughts!