Let us look at the various phases involved in adopting Network Programmability and Automation. This can be broken down into five phases as below:

Step 1: Simplify and Standardize

One key to improving the success of automation is to simplify and standardize your process before attempting to automate it. You can’t automate a complete mess. Standardization means getting everybody, everywhere, to do the same thing, in the same way. It often has the biggest return on investment, but it’s also the step that requires people to change – and that makes it the biggest challenge.

An approach to achieving an optimized process is the lean methodology; eliminate, simplify, standardize, and automate. To do this, you need to engage with teams involved across the whole spectrum. Generally, the engineers have tribal knowledge on the end-to-end process that will be optimized.

Look for patterns, common tasks, things you do daily, take note of what these common things are, maybe it’s a common set of steps you take when troubleshooting an issue. Harnessing and transferring that knowledge into an automation workflow, even without a lot of programming, hastens the path to network automation.

The key points to note here are:

  • Standardize network device naming conventions, and don’t put too much detail into names, capture extra details in your source of truth/inventory.
  • Standardize network configurations e.g., interface descriptions.
  • Avoid massive variations in vendors, platforms, OS versions, topologies and feature use.

Step 2: Build an inventory and/or Source of Truth

In phase 2, build an inventory for your network devices capturing details such as IP addresses, credentials, and platforms.  The inventory can be in a text file such as YAML, in a database or in a CMDB/DCIM.

A popular and efficient approach today is building a network inventory with Ansible and NetBox. NetBox is a simple yet powerful and highly extensible inventory system, that can additionally act as a source of truth regarding your network.

It has a powerful REST API, which can be used to retrieve or update the data stored in the NetBox database. It allows us to document and describe the following features on any network infrastructure:

  • IP address management (IPAM): IP networks and addresses, VRFs, and VLANs
  • Equipment racks: Organized by groups and sites
  • Devices: Types of devices and where they are installed
  • Connections: Network, console, and power connections between devices
  • Virtualization: Virtual machines and clusters
  • Data circuits: Long-haul communication circuits and providers
  • Secrets: Encrypted storage of sensitive credentials

Step 3: Automate Read-Only Tasks

In phase 3 automate tasks that don’t require you to change anything on network devices. You might look to automate common workflows, like a set of commonly used show commands when troubleshooting an issue, backing up device configurations, monitoring, alerting, compliance checks, generating reports using data returned from show commands etc.

Step 4: Auto-generate and Deploy Configurations

In phase 4, you can begin creating and using configuration templates e.g., start using Ansible to auto-generate network device configurations from a template. The de-facto standard when it comes to network configurations is Jinja2 templating language.

Step 5: Implement Network CI/CD Pipelines

Finally, when the team is more confident and has achieved an advanced level of understanding and expertise in Network Automation implementation, start building and executing end-to-end network CI/CD pipelines using DevOps principles and techniques.

A Network CI/CD pipeline helps you automate steps in your network provisioning process, such as initiating config builds, running automated tests, and deploying changes to a production network. A network CI/CD pipeline typically consists of four main stages: Creating, Building, Testing, and Deploying configuration as code.

Network Automation Adoption

Adaptability to change; Network automation is a practice that is constantly evolving; hence people should be willing to change with time.

Progressive Learning: Network automation is a lifelong process; hence it is advisable to learn progressively. Testing out what one has learned is a way of ensuring that they do not forget.

Organization collaboration: All the members of an organization should be willing to work together to incorporate network automation. This will enable people to share tips for effective incorporation.

The ideal scenario for adopting network automation is for the entire organization to work together. Large scale automation requires buy-in from the business and network team. Here are some of the people that you need to bring on-board:

  1. The company executives, people like the business development manager, CTO and CIO. These are the people who ultimately own the delivery of the network services and the budget.
  2. Network Architects/Engineers. These are the people responsible for network design, vendor selection, and other key strategic tasks. They are responsible for dictating the lifecycle of the network.
  3. Technical support and/or network operations team. These are the people responsible for keeping the network running daily. They handle ticket queues and resolve issues that arise from any network state changes.

Bonus Write-up: Software concepts and development skills

Now that we have a general understanding of the Network Programmability and Automation phases. Let us take some time to discuss how to pick up one of the key enablers of Network Programmability and Automation; that is Software Concepts and Development skills. This is to reiterate and emphasize just how important programming skills are to the Network Automation Process.

  • A fundamental understanding of software concepts is key in Network Automation Processes. Learning software development fundamentals, such as algorithms, data structures, data models, and abstraction, is crucial as one progresses. The concept of abstraction is particularly essential because it is used to build software.
  •  Learning how to write software is the next step. Python has emerged as the primary language for network automation, so it is critical to concentrate on it. Python can be learned from various sources, many of which are free or inexpensive. One can also utilize Pair programming, a technique in which two software developers collaborate to produce software.
  • Automated testing verifies the quality of produced code. It is easy for new developers to create difficult to debug flaws. Automated testing is a software development process that creates tests alongside the software and enables Continuous integration and delivery. When new code or network configurations are checked into the software code repository, CI/CD performs extensive testing. If all tests pass, the modified code is ready for deployment, either manually or automatically, as the company determines.

References:

  1. Network Automation Framework by networktocode.com
  2. Network Programmability and Automation by Jason Edelman.