This is a collection of self paced resources on the internet to become familiar with the many new technologies related to programmability. Do these on your own time or in a group to the depth you please. These are merely pointers, the fun is in making your own path rather than following prescriptive labs.

If at some point you don’t see an exact description of what you’re trying to do – google it. You may not get an exact match of your linux flavor, base OS, version of software, or hypervisor – this is expected, common, and good practice. Google it. Break things.

Setting up your own environment:

Running Labs:

Building an environment

Virtualbox / Fusion / Workstation

You will need an environment to run these virtual machines. Virtualbox seems to be more prevalent with open source, but everything from ESX to Fusion will suffice – though you may need to translate VM settings based on your platform.

VirtualBox Download (OSX, Windows, Linux, Solaris)

Fusion (OSX)

Run Labs from Source / Do a base install of Linux

Some labs you can install code from github repositories or using packages/tarballs. You may want to create your own development VM from a base CentOS or Ubuntu host depending on your preference and the lab. There tends to be more information, particularly introductory information, about Ubuntu so it lends itself well for these purposes. However many labs have standalone VMs which don’t require a base OS install. If you’ve never installed linux before, this is a good place to start.


Labs to do on linux:

Alternative: Run a Cloud Image

You may not have enough space on your machine to run a local image, or for simplicity’s sake you would want to abstract away any host-specific problems that could occur. In those scenarios running a VM from the cloud is a good option. Most of the major cloud providers offer some form of free trial which is ideal. It’s good fun and practice even if you have your own VM though.

While they can be free, it’s trivially easy to accidentally spend money on these clouds. Some will also not feel comfortable giving their credit card to a provider for testing only.




Vagrant is useful for images with vagrant files because it abstracts away the hypervisor and device settings so that no matter what device you’re on, it will run the same. If you’re playing with something that provides a vagrant file or just want to learn it, you can get started. More on why here.



Doing Labs

This is an unordered, un-prioritized list of of labs. Choose what interests you or what sounds fun.


When getting started with Python you’ll want to pick a version. At this time 2.7 has more support and libraries, and at some point 3.x will be more prevalent. Here’s one opinion to help make up your mind. Personally, I’m using 2.7 and most of the examples I run use 2.7. If you’re feeling frisky, you may want to install your python version with virtualenv so you don’t create any dependencies. If that doesn’t make sense to you, skip it.

Browser-based labs:



Docker / Containers

Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications. Consisting of Docker Engine, a portable, lightweight runtime and packaging tool, and Docker Hub, a cloud service for sharing applications and automating workflows, Docker enables apps to be quickly assembled from components and eliminates the friction between development, QA, and production environments. More detail here. If you’re confused by this, google docker and containers a bit. This mindmap of integration is eye-opening as well.

Browser-based labs:

Installing Docker (64 bit only):



Representational Stateful Transfer (REST) is a format of building Application Programming Interfaces (API’s). These expose readable and/or writable data through a standard interface. In the world of infrastructure the function of CLI’s are moving towards API’s. More practically, it means there is a HTTP/S interface for reading data or making changes via methods like GET, PUT, and DELETE. More here.

Browser Labs:


Public API’s:

Configuration Management

Configuration management tools are used to manage servers and configuration of those servers. Configuration management is starting to expand past linux servers (primary use case) into network and infrastructure devices. Many include frameworks, agents, and verified configurations for managing different types of applications and devices. This allows management to scale, become predictable, and make changes with reliability. In this list are Puppet, Chef, and Ansible.


Puppet is one of the leading configuration management tools. There are two puppet distributions – open source and Puppet Enterprise (PE). Depending on your requirements you’ll want to choose the right version. Difference in features here. If you don’t know or don’t care, just start with open source puppet.




Chef is one of the leading configuration management tools. It uses Ruby as a configuration language, so it’s flexible and powerful, but requires a bit of Ruby knowledge.

Learn with a provided VM:



Ansible is another configuration management tool, and has capabilities to run without any agents on clients. This makes it attractive to get started faster or for systems like infrastructure where agents can be difficult.



Git + GitHub

Git is a Version Control System (VCS) and is a way to store, save, and share code (with Github). It’s important to learn for both copying and creating code. Puppet does a good job with this guide of Git for beginners. GitHub is an easy way to take a local repository and share it publically. GitHub is free for public repositories.


Browser Labs:



Openstack is an open project to create cloud infrastructure. Here’s one explanation. There are a number of versions (Havana->Icehouse->Juno->Kilo, etc), installers (Packstack, RDO, etc), and distributions (Redhat, Mirantis, etc). DevStack is the easiest way to get started and play with OpenStack (not intended for production). Many vendors have their own scripted installations of OpenStack.


Nexus 9000 Programmability

If you’re wanting to play with the Nexus 9000 NX-OS features, there’s Cisco dCloud.

Remote Labs:

  • Create an account on After logging in, click Home in the upper right, then on the ‘Application Centric Infrastructure’ section. There should be a Nexus programmability lab you can start and log into. (Depending on availability).
  • Nexus Data Broker. Follow the same instructions above, but click on ‘Datacenter and Virtualization’ and then there’s a Nexus Data Broker lab. There are a number of other available labs on this site (UCS Director, CIMC, MATE, etc).


OpenDaylight (ODL) is an open-source SDN controller owned by the Linux Foundation. More from Versioning is done by the elemental table (Hydrogen->Helium->etc).

Prebuilt VM:

Remote Labs:

  • Create an account on After logging in, click Home in the upper right, then on the ‘Service Provider’ section. There are a few OpenDaylight labs and Cisco Open SDN Controller (COSC). COSC is Cisco’s release of ODL. (Depending on availability).
  • Community labs from


Leave a Comment