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.
Setting up your own environment:
- Configuration Management
- Git + Github
- Nexus 9000 Programmability
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)
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.
- Install Ubuntu 14.04 into virtual box using Windows
- install Ubuntu 14.04 into virtual box on OSX (more in part 2)
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.
- AWS micro instances free for one year
- Linode free trial
- Rackspace free trial
- Google Compute Engine free trial
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.
- Vagrant downloads (Mac, OSX, Linux)
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.
- installing Python 2.7 on Ubuntu
- Installing Pip on CentOS 7
- Most OSX installs with have a Python 2.x version installed by default.
- Python 2.7 on Windows 7 (recommended to learn within a linux VM for compatibility with other utilities)
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.
Docker’s lab(under construction it appears)
Installing Docker (64 bit only):
- Install and get your first image running (Ubuntu 14.04)
- Using Docker and boot2docker on OSX (virtualbox)
- Install a webserver
- Docker with vagrant, web server, using docker files, linking
- CoreOS’s guide to getting started with Docker
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.
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.
- Open the zip of the learning VM, there is a quest guide inside
- Standalone Puppet using Vagrant
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.
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.
- DevStack from openstack.org
- DevStack on Virtualbox (Juno)
- Manual install for Juno on Ubuntu (long)
- Juju install for Ubuntu with Openstack
- Openstack Juno on Windows with DevStack
- Using RDO to install Openstack with Packstack (Redhat/CentOS)
Nexus 9000 Programmability
If you’re wanting to play with the Nexus 9000 NX-OS features, there’s Cisco dCloud.
- Create an account on dcloud.cisco.com. 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 opendaylight.org. Versioning is done by the elemental table (Hydrogen->Helium->etc).
- Create an account on dcloud.cisco.com. 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 opendaylight.org