For my bachelor's thesis I've been doing research into DevOps and how it would apply to our network operations team. We were just starting on our journey to automate everything, and some of the questions I had were:
- What tasks do network operators generally automate first?
- What tools do most people use to automate their networks?
Lucky for me, right at the time I needed this information, the Network-to-Code community was running a NetDevOps Survey. The final report is not finished yet, but the raw data is available so I could use that to try to help my research. Pending that report, I thought it might be worthwhile to share my conclusions.
What is the NetDevOps Survey?
The NetDevOps Fall 2016 Survey is the first edition of what will probably be a regular survey amongst network engineers about network automation and DevOps. It's spearheaded by Damian Garros and run mainly from #netdevops-survey on the NetworktoCode Slack channel.
The survey had 307 responses from network engineers around the globe, running all kinds of networks ranging from small to very large. Since it comes from a community of engineers interested in networking as code, there is certainly a self-selection bias towards people already running all kinds of automation tools. That's fine for my purpose since these are the people I want to learn from, but it's probably not representative of what Average Joe Networker is currently running in production.
So, what to automate first?
My assumption is that tasks that most network operations teams are automating, are either easy to automate or have great impact when you do. Either way, that's probably the low-hanging fruit and a good place to start.
It seems like there's a strong preference for automating configuration-related tasks (configuration management, changes and new deployments). This makes sense, since as network engineers we're very much used to dealing with a device through its configuration file. Reporting is also often automated, probably because it's generally boring work that's always the same. Other tasks are much less commonly automated.
What programming language to learn?
A common question is whether us network engineers should learn to be a coder, and if so, what language to learn.
By far the most common language is Python, followed at some distance by shell scripting (Bash, PowerShell, etc.). The other languages are far less commonly used in automating networks. This isn't very surprising, influential people in the networking community have been telling us to learn Python for years.
What tools should we look at?
Once we've mastered Python, we can write all the tooling we need ourselves, but it's probably more useful to check what tools other people are using in automating their network.
So everybody is using or at least looking at Git as a central repository. Makes sense, with the advent of free services like GitHub and GitLab it has pretty much become an industry standard. Ansible is also quite common amongst network engineers, leaving competing products like Puppet, Chef and SaltStack in the dust.
Since most organizations seem to start with automating configuration management, it might be worthwhile to zoom in to the tools they use specifically for those tasks.
Ansible is once more the most popular tool, but the majority of people use custom-built tooling. Apparently learning Python is still the smart move. What's a bit surprising to me is that only 17% of respondents use vendor-specific tools for configuration management; nearly all vendors push their own proprietary management platform when selling kit, but clearly those tools do not fit the automation needs of network operators.
My conclusion is that we ought to look at a toolchain including Git and Ansible, stitched together using Python scripting. Obviously, there is a lot more insight to be found in the dataset, and you should certainly look for the finished report.
If you want to know more about all these tools and how to automate networks, check out Network Programmability and Automation by Matt Oswalt, Jason Edelman, and Scott Lowe for vendor independent advise, and Automating Junos Administration or Programming and Automating Cisco Networks for excellent vendor specific information. And if you too would like to start learning Python, I can heartily recommend Kirk Byers' free course Python for Network Engineers. These are the resources that were most useful to me during my studies.