My journey to network programmability programmability and automation
By Jerome Tissieres 1 May, 2018 2 Comments Here is my journey to start learning network programmability 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 f ree 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. 3. 4. 5. 6.
Programming Fundamentals Network Device APIs Network Controllers Application Hosting and the Network NetDevOps Cisco DevNet I also spent a lot of time on Cisco DevNet.
Cisco DevNet is much more than a simple website. This i s 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 m anagement. 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. 2. 3. 4. 5. 6.
Network Industry Trends Network Automation Linux Learning Python in a Network Context Data Formats and Data Models 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 datatypes, 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 la st 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.