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
- 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:
- Git and GitHub
- NETCONF / REST / RESTCONF / YANG models
- JSON and XML data-structures
- Linux networking
- Ansible, maybe also Puppet and Chef
- 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:
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:
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:
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:
- Programming Fundamentals
- Network Device APIs
- Network Controllers
- Application Hosting and the Network
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:
Network Programmability and automation book
The content of the book, by chapters, is:
- Network Industry Trends
- Network Automation
- Learning Python in a Network Context
- Data Formats and Data Models
- Network Configuration Templates
- Working with Network APIs
- Source Control with Git
- Automation Tools
- Continuous Integration
- Building a Culture for Network Automation
- Appendix A – Advanced Networking in Linux
- 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.
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.
Cisco NPDESI classroom training
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
- 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
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
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.