Automation is fundamentally changing how we configure and manage networks. The increasing ties between networking and automation demands that we learn new automation skills in order to be effective in the new era of networking.
How to learn network automation: Skills you need
There is a broad continuum of skills related to network automation. Soft skills don't require programming expertise, while other skills require elementary knowledge of software terminology. Advanced skills get into programming and software development methodologies. Where you start depends on your current level of expertise. You can do a lot without having to learn programming, as we'll see.
Let's start with skills that don't need software development expertise. This is the likely starting point for most networking people.
First, there's a mindset change. Change the way you think about network configuration, monitoring, and troubleshooting. Consider how you can use automation for manual processes, even if the manual process is more efficient in the short term. Are there steps in the manual process that consume a lot of time and could be automated? You don't have to tackle the entire task. Just automating a tedious or error-prone part of a process can have great results.
Part of the mindset change is accepting that adopting automation will require an investment in time to learn new methods. This can be difficult for organizations that are always working on the crisis-of-the-day. Progress can be made in as little as an hour per day.
Build skills around creating processes for common tasks. Document these processes and identify tasks within the overall process where automation can be most easily applied. Similarly, conduct postmortem network problem analysis to determine what information must be collected to properly identify the source of the problem. Can some or all of the information be collected using automation? Just knowing what information to collect and the analysis to perform is a valuable way to reduce the time to identify the source of a problem, even if manual methods continue to be used.
Begin building skills around existing tools. Learn how to use the configuration validation and configuration update functions within your existing network management system tools. These tools frequently allow networkers to accomplish their automation goals without programming.
Create a network source-of-truth repository. A source of truth will allow you to validate the network's operational state without relying on its configurations, which can change as failures and ad hoc changes occur. Identify the critical infrastructure interconnections on each network device and document them. Document the connections to critical servers and their services. The source of truth should allow you to easily identify things like misconfigured port channels or incorrect cabling, regardless of whether it is a manual or automated verification process.
You will frequently find that it isn't necessary to use programming to create useful automation systems. Some tools (e.g., Gluware) provide a user interface that networkers can use to automate network configurations without doing any programming. Similarly, network equipment vendors will have products or partners who provide tools to simplify and automate the configuration of their equipment.
The next learning step is a script-based system like Ansible. Its control language is more like a network configuration syntax than a programming language. You will find that it is very easy to do simple things with Ansible and that its configuration is easy to create. A variety of useful functions are possible:
- Run commands and collect the output in files (great for troubleshooting).
- Validate network operation (checked against a source of truth).
- Create configurations from templates (with the addition of Jinja2 variables).
- Load configurations into network devices.
Now that you're creating documentation (source of truth) and scripts, you should learn how to use a web-based source code repository like Git (GitHub, GitLab or an equivalent central repository where developers can store source code and collaborate on and test it). You never want to find yourself in the situation where your latest working script was overwritten with a newer version that doesn't quite work.
Software concepts and development skills
You should start with simple things and progress to the more complex as you learn.
A basic understanding of software will be valuable for talking with software developers, even if you're not writing software yourself. You should learn basic concepts and terminology. If you've never written any software, check out the hour of code. Read basic articles and take a free, online, basic programming class to learn the software development concepts. You should understand terms like refactoring, idempotent, iteration, looping, conditionals, lists and dictionaries.
As you advance, learn software development fundamentals, including algorithms, data structures, data models and abstraction. The concept of abstraction is particularly important because it is how software is constructed. Note that device model abstraction is how we can use network automation to control devices from multiple vendors (see video, "How Data Abstraction Changed Computing Forever").
The next step in how to learn network automation? Learning how to develop software. Python has become the principle language for network automation, so it makes sense to focus on it. There are numerous sources for learning Python, many of which are free or cheap. One way to learn is to use a technique called pair programming, in which a pair of software developers work together to develop software. In this case, a networker and a developer would be paired together, helping networkers learn software and developers learn networking.
How can the quality of the produced code be checked? Through automated testing. It is easy for new developers to create bugs that are challenging to diagnose. Automated testing is a software development methodology in which tests are created along with the software. With automated testing, it is then a step to continuous integration and continuous delivery. CI/CD runs comprehensive tests whenever new code or network configurations are checked into the software code repository. If all tests are passed, the updated code is ready for deployment, either manually or automatically, as determined by the organization.
It's a cliché, but networking is a great example of the need for lifelong learning and the need to adapt to change. Networking started with simple serial interfaces, often over long-haul, private links. Then local area networking came along. We had to learn how to work with this new technology called Ethernet. Then LAN switching provided new capabilities and added some complexity. WAN technology changed from dedicated links to Frame Relay and then to MPLS. We now have SD-WAN. TCP/IP became the main networking standard, with Open Shortest Path First, Intermediate System to Intermediate System and Border Gateway Protocol as the dominant routing protocols. Spanning tree's limitations have begun to create problems, forcing us to adapt again.
Each of these changes has required that we learn new technologies. Automation is no different. How to learn network automation is merely the latest step in the ongoing journey of any networking professional. A continuum of automation technologies exists, allowing us to start simple and work toward complexity, just as we've done before.
The ideal scenario for adopting network automation is for the entire organization to work together. Use pair programming techniques, regular training sessions and even "what I learned" sessions to share tips and learn from one another. Don't worry if you can't get the entire team on board. Even one person can have a positive effect by automating simple things that don't risk changing the network configuration.
Don't be a network dinosaur. You need to adapt to the new network technology climate.