You are on page 1of 12

My journey to network programmability and automation

By Jerome Tissieres 1 May, 2018 2 Comments

Here is my journey to start learning network programmability and automation, and how I
get the Cisco network programmability specialist certification (300-550 exam). In this post,
I give you the links towards all the resources which I used to study.

Back in 2015: SDN, new fancy buzzword or a paradigm shift?

I started this journey in 2015, when at the Cisco Network Innovation Summit in Prague, I
saw a presentation of Tim Szigeti about dynamic QoS with Cisco APIC-EM. That was the
trigger for me, after a few years reading everything about SDN without anything concrete,
now this was real! Finally, the network industry is evolving, and the network engineer job
will inevitably follow.

I always thought that the network engineer job needs to evolve: since more than twenty
years, copying and pasting into a CLI is the standard for network operations, and Notepad
is the most common text editor… At the opposite, systems admins can seamlessly move
virtual servers from one data-center to another in two clicks. Now this will change.

Where to start, what to learn?

First, my questions were: How do I get started with SDN and network automation? What
should I learn?

Because I am working for a Cisco partner for enterprise networking, I had the opportunity
to see webinars and do some workshops on APIC-EM. But it was only the beginning of this
product, so it had not yet many features. Furthermore, I quickly realized that APIC-EM or
the SDN controller in general is only a single link in the network automation chain, and I
need to learn the entire chain.
At that time, I needed to focus on my CCIE R&S, so I put this subject aside until mid-2017.
And I did well, because things have seriously evolved in two years.

So, in September 2017, I had the chance to make a very good internal training on IaaS,
SDN, NFV and network automation basics. It was two day of theory and three days of
hands-on labs on:

 Openstack (Horizon, config, deployment of an instance, CLI, VIRSH)


 Open vSwitch (OVS) with OVSDB, then OVS with Openflow
 Mininet
 Container networking with Docker and IOS-XE containers
 YANG and NETCONF
 REST APIs
 NFV on Cisco NFVIS

The labs part was tough and very interesting. And it helped me a lot to understand what
exactly I must learn.
My Learning List

After this course, I made a list of the topics I wanted to learn:

 Python
 Git and GitHub
 NETCONF / REST / RESTCONF / YANG models
 JSON and XML data-structures
 Linux networking
 Ansible, maybe also Puppet and Chef
 NFVs
 Network (SDN) controllers
 DevOps principles
 Jenkins, maybe also Travis CI
 Docker and other container technologies, especially the networking part
 Cloud networking

First, let’s start with Python & Git

First, I started with Python. Because this was probably the most difficult and longer part
for me. Despite the fact that I made some bash/shell scripting in the past, my last real
coding course was more then 25 years ago on Pascal and assembler (assembly). So, I am
starting nearly from zero.

And learning how to use Git and GitHub at the same time was not a bad idea, because
they go together.

My idea was to build a good enough foundation of Python to be able to read, write and
debug a script. I did not pretend to become a developer.

Here are the tutorials and courses I made for that:


Sololearn.com – Python tutorial

I started first with a Python tutorial on Sololearn.com:


https://www.sololearn.com/Play/Python

I found this tutorial perfect for someone like me, it starts from zero; the difficulty is
increasing step-by-step and after each chapter there is a series of questions that challenge
you on what you just learned. There is also an app for IOS and Android, to learn when you
commute. And a mini-sandbox built into the website to try basic scripts. For some more
advanced scripts they redirect you to Trinket.

Futurelearn.com – Object-oriented programming in Python course

Then, I made an online course at FutureLearn.com, on Python object-oriented


programming:
https://www.futurelearn.com/courses/object-oriented-principles/

This is a 4-weeks course online, with a good mix of videos and practice. Useful to dig a
little deeper into the Python’s objects.

Git Tutorial – Learn Git in 15 minutes.

To learn how to use GitHub, I made this nice tutorial: learn Git in 15 minutes:
https://try.github.io/levels/1/challenges/1.

I made it two or three times to be familiar with the commands. After, of course, I
practiced and used Git as often as possible.

Kirk Byers – Python for network engineers

My last course on Python was the Kirk Byers free Python for network engineers, 8-weeks
course. I encourage you to visit Kirk Byers’s website and also his GitHub page.There are a
lot of useful resources. Kirk is doing a fantastic job for network engineers.
I loved this course! Every week, on Thursday, I received an email from Kirk including from
5 to 14 videos he made on Python, including theory and demo. Then, there are also useful
resources and five to six exercises to practice what you just learned.

The course content was composed like this:

 Week-1 – Why Python, the Python Interpreter Shell, and Strings


 Week-2 – Numbers, Files, Lists, and Linters
 Week-3 – Conditionals and Loops
 Week-4 – Dictionaries, Exceptions, and Regular Expressions
 Week-5 – Functions and the Python Debugger
 Week-6 – Netmiko Basics
 Week-7 – Jinja2 Basics, Introduction to YAML and JSON and Complex Data Structures
 Week-8 – Libraries, Package Installation and Virtual Environments

A new similar and updated course is starting May 8, you can register here.

Courses including more or other topics

After these courses and tutorials focused on Python, I was looking for trainings including
the next topics of my learning list. Here is what I did:

Cisco DevNet – Network Programmability Basics Video Course

In parallel with the end of Kirk’s course, I started the Cisco DevNet Network
Programmability Basics Video Course. This is a 6-modules video course from Hank
Preston from Cisco DevNet.

This course is totally free and very good! Each module has from 4 to 8 videos of around 30
minutes, combining theory and demo, on many network programmability topics.

Here is the content of each module:

1. Introduction
2. Programming Fundamentals
3. Network Device APIs
4. Network Controllers
5. Application Hosting and the Network
6. NetDevOps
Cisco DevNet

I also spent a lot of time on Cisco DevNet.

Cisco DevNet is much more than a simple website. This is a fully integrated developer
program consisting of a website, an interactive developer community, developer tools,
discussion forums and sandboxes. There are tons of free and useful resources on network
programmability, network controllers, APIs, and so on. These people are doing an amazing
job!

Here are some interesting modules I completed:

 Networking Basics
 Network Programmability
 Network Controllers
 Meraki APIs
 Introduction to Device Level Interfaces (ex: NETCONF/YANG)
 Getting Started With Meraki
 APIC-EM and REST APIs
 DNA Explained

But there are many more…

Cisco Learning Network Videos

On Cisco website, there is a huge list of very good videos and webinars on Python,
network automation, SDN and so on. For example:

 SDN Recorded Seminars


 Intent-Based Networking Training Videos
 Python Programming Training Videos
 Network Evolution for the Cloud and Digital Era – SD-WAN Training Videos

Ansible Essentials course on Udemy

This is a two hours of very good online and official Red Hat Inc. course on udemy.com, to
learn the basics of Ansible for automation and configuration management. And it’s free:

https://www.udemy.com/ansible-essentials-simplicity-in-automation/

Network Programmability and automation book

End of March 2018, I ordered this book, written by Jason Edelman (@jedelman8), Scott S.
Lowe (@scott_lowe) and Matt Oswalt (@Mierdin).

The content of the book, by chapters, is:

1. Network Industry Trends


2. Network Automation
3. Linux
4. Learning Python in a Network Context
5. Data Formats and Data Models
6. Network Configuration Templates
7. Working with Network APIs
8. Source Control with Git
9. Automation Tools
10. Continuous Integration
11. Building a Culture for Network Automation
12. Appendix A – Advanced Networking in Linux
13. Appendix B – Using NAPALM
The book is organized in such a way that it is not necessary to read the chapters in
order. Except maybe for the first two, which are an introduction to the more technical
content of the following chapters. And this is exactly what I did.

At the time of writing this post, I have not read the entire book yet, but I recommend this
book to anyone who wants to start learning network automation.

Get Certified?

My goal was to learn network programmability, but, in addition, I also needed to renew
my current Cisco certifications before June 2018. So, I thought about the Cisco Network
Programmability Design and Implementation Specialist exam (NPDESI).

This certification is not part of the CCNA or CCNP curriculum, this is a “specialist”
certification. But, as the others 300-xxx exams, it allows to renew your
current CCNA/DA/NP or DP certifications.

Taking the Cisco NPDESI 300-550 course (and exam) was, for me, probably the best way to
combine my current learning goals and renew my existing certs, so I signed up for the
course.

Cisco NPDESI classroom training

Content

The content of this course (V.1.0) is this:


 Day-1: Network Programmability Fundamentals
 Introduction to Network Programmability
 Linux Primer for Network Engineers
 Linux Networking
 Python Foundations for Network Engineers
 Writing and Troubleshooting Python Scripts
 Python Libraries

 Day-2: APIs and Automation Protocols


 Introduction to Network APIs and Protocols
 Cisco ASA REST API
 NX-OS Programmability
 Cisco IOS XE & IOS XR APIs
 Securing the Management Plane

 Day-3: Data Models


 YANG Data Modeling
 YANG Tools

 Day-4: Network Controllers


 Introduction to Controller Networking
 OpenDaylight
 APIC-EM
 ACI / Application Centric Infrastructure
 Cisco Element and Domain Managers

 Day-5: Operations
 Software Development Methodologies
 Introduction to DevOps
 Version Control
 Automated Testing
 Continuous Integration
 Configuration Management and Automation Tools
My comments

The overall course content was very good, and there are many topics to see in only five
days of theory and labs.

The only negative point is the course is spending too much time on some subjects, like
Python basics and ACI architectures for example, and not enough on other, like the topics
of the last day.

For example, on the first day, we spent the afternoon reviewing Python basics, like data-
types, booleans, lists, dictionaries and loops. Can you learn Python in three or four hours?
The answer is no, of course. Furthermore, basic knowledge of Python is one of the
prerequisites of the course. So why did we spend four hours on this?

Same on Thursday, we spend a lot of time on Cisco ACI and APIC. It seems like Cisco is
trying to promote ACI fabrics during this training.

On the other hand, Friday’s subjects were seen in a very superficial way. We saw Ansible
very quickly and nothing about Jenkins for example.

But apart from that, I repeat, the course content is very complete, the student guide is
very good, and there are a lot of labs.

The Cisco NPDESI 300-550 exam

End of April 2018, I took the Cisco 300-550 exam. This is a standard Cisco 90-minutes exam
with 65 to 75 questions to be done at a Pearson VUE exam center.

This exam gives you the Designing and Implementing Cisco Network Programmability
specialist certification, but it is also valid to renew any CCNA and CCNP level certification.
This is a typical Cisco written exam. The questions are not all very clear and some others
are not covered at all during the related course. Since the list of topics is very large, the
exam is difficult. I failed my first attempt for 12 points, studied again, and passed the week
after.

I am now: Cisco Network Programmability Design and Implementation Specialist

Next steps and conclusion

If I go back to the list of topics that I wrote in September of last year, I can say that I
learned and practiced many of them. I have now a solid foundation to continue on this
path, but I do not pretend being an expert in any of the topics below:

 Python: able to write and debug simple scripts

 Git and GitHub

 NETCONF / REST / RESTCONF / YANG models

 JSON and XML data-structures

 Linux networking: I am at a network-admin level, but I must dig more into the
routing and advanced networking possibilities.

 Ansible: able to use it, but I need to practice more complex playbooks.

 Puppet and Chef: I’ve seen the principles, nothing more.

 Network (SDN) controllers: Seen Cisco APIC-EM, Cisco APIC (ACI), Cisco DNA-Center
(SD-Access) and OpenDayLight. But almost every vendor have a network controller.
 DevOps principles

 Jenkins and Travis CI: I’ve seen the principles of Jenkins and the basics of Travis
CI. Need more experience on Continuous Integration.

 Docker and other container technologies, especially the networking part: Also
here, I’ve seen the basics. I need more experience on Docker and start to learn about
Kubernetes.

 Cloud networking: I am playing with AWS since some months but I need to see
more in details the advanced networking part now.

Now, I must continue practicing and experiment what I have learned during the last year,
and I also have to keep learning new things.

First, I will finish to read the Network Programmability and Automation book. Then, I
already scheduled many sessions related to network automation and programmability at
Cisco Live US. And last but not least, I will try to use these new tools as soon as I have the
opportunity in my daily work.

My conclusion: Constant learning is the key in this field.