With this first article, I will explain how I started learning about the topics network programmability and automation. For me, it was one of the most difficult question, because there are a lot of information out there but without a guideline, how to get started. At the beginning, I read a lot in books and blogs about this topic and researched anything within the bigger Software Defined Networks (SDN) topic. My interest was primarily in SDN and moved later to programmability and automation.
After all this reading, I discovered for me three main learning areas:
- Programming and scripting
- Work with APIs (Application Programming Interfaces)
- Automation Frameworks
Programming and scripting
The best explanation for this learning area is, „how to automate things“. During my research I saw in various examples, what’s possible with scripting languages like Perl or Python without a lot of effort. My advice is not to become a professional programmer, but you should have at least a basic programming and/or scripting skill. This makes live easier, as you will see in other posts on this blog.
Work with APIs
The API topic comes mainly from the integration of controllers to the network (e.g. OpenDaylight, Cisco APIC), which provides a central point of management and an abstraction layer from the underlying physical infrastructure. Furthermore, I think APIs are necessary in the future to interact with network devices in a scalable professional way. Many vendors start to adopt the use of APIs for their network devices to provide a programmable machine-to-machine interface.
Today, most APIs in modern products are based on REST interfaces. REST stands for Representational State Transfer and is in short a HTTP based way to interact with something based on regular HTTP GET, POST, PUT and DELETE calls. I will explain this topic in more detail in another post.
During my research, I read more and more about various automation frameworks and configuration management tools, including Puppet, Chef and Ansible. These frameworks are primarily used to interact with server systems to automate their deployment and configuration. Within the data center space, these tools are widely used and many vendors start to adopt it for network configuration, for example Juniper publishes various Ansible modules on Github (Junos Ansible Modules on GitHub) based on there PyEZ library (Junos PyEZ on GitHub).
Three learning areas, but seriously, how to get started?
Okay, I hope you got now an idea, where you can start with learning. The most important thing beside any technical topic for me was the use case. Why would you start within the area of network programmability and automation? For me, it was all about the use case. At some point you just need to see some real results to stay motivated. At the beginning of my learning, I had four primary use cases on top of my mind:
- Abstracting the network and generate configurations
- Automatically configure devices at scale
- Collect information from multiple nodes and work with this data
- Automate „boring“ stuff (e.g. end of life checks for hardware)
These use cases are very large and I broke it down into smaller pieces during my learning and development for it. When you get started, you will note that this area isn’t that complicated as is appears to be. I will continue with more detailed explanations of the three learning areas mentioned in this post, along with some practical examples.
This post does not aim to cover all topics in the network programmability and automation area, this is not possible with less than 700 words. I skipped with intent the whole DevOps and development tools (Git, Vagrant etc.) story, because they will appear anyway sooner or later in this blog. I hope you have now a direction to get started with learning in this area and I hope to see you next time.