Primary drivers for Network Automation
- Achieve Agility
- Reduce Cost
- Eliminate Errors
- Ensure Compliance
- Centralised Management
The automation adoption process is specific to each business. There's no one size fits all when it comes to deploying automation, the ability to identify and embrace the approach that works best for your organisation is critical in advancing towards maintaining or creating a more agile environment, the focus should always be on business value and end-user experience. (We said something similar right at the start in regards to the whole of DevOps and the culture change and the automated process that this brings)
To break this down you would need to identify how the task or process that you're trying to automate is going to achieve and improve the end-user experience or business value whilst following a step-by-step systematic approach.
"If you don't know where you are going, any road will take you there."
Having a framework or design structure that you're trying to achieve knowing what your end goal is and then working step by step towards achieving that goal measuring the automation success at various stages based on the business outcomes.
Build concepts modelled around existing applications there's no need to design the concepts around automation in a bubble because they need to be applied to your application, your service, your infrastructure, so begin to build the concepts and model them around your existing infrastructure, you're existing applications.
We should identify the tasks and perform a discovery on network change requests so that you have the most common issues and problems to automate a solution to.
- Make a list of all the change requests and workflows that are currently being addressed manually.
- Determine the most common, time-consuming and error-prone activities.
- Prioritise the requests by taking a business-driven approach.
- This is the framework for building an automation process, what must be automated and what must not.
We should then divide tasks and analyse how different network functions work and interact with each other.
- Infrastructure/Network team receives change tickets at multiple layers to deploy applications.
- Based on Network services, divide them into different areas and understand how they interact with each other.
- Application Optimisation
- ADC (Application Delivery Controller)
- Firewall
- DDI (DNS, DHCP, IPAM etc)
- Routing
- Others
- Identify various dependencies to address business and cultural differences and bring in cross-team collaboration.
Reusable policies, define and simplify reusable service tasks, processes and input/outputs.
- Define offerings for various services, processes and input/outputs.
- Simplifying the deployment process will reduce the time to market for both new and existing workloads.
- Once you have a standard process, it can be sequenced and aligned to individual requests for a multi-threaded approach and delivery.
Combine the policies with business-specific activities. How does implementing this policy help the business? Saves time? Saves Money? Provides better business outcome?
- Ensure that service tasks are interoperable.
- Associate the incremental service tasks so that they align to create business services.
- Allow for the flexibility to associate and re-associate service tasks on demand.
- Deploy Self-Service capabilities and pave the way for improved operational efficiency.
- Allow for the multiple technology skillsets to continue to contribute with oversight and compliance.
Iterate on the policies and process, adding and improving while maintaining availability and service.
- Start small by automating existing tasks.
- Get familiar with the automation process, so that you can identify other areas that can benefit from automation.
- iterate your automation initiatives, adding agility incrementally while maintaining the required availability.
- Taking an incremental approach paves the way for success!
Orchestrate the network service!
- Automation of the deployment process is required to deliver applications rapidly.
- Creating an agile service environment requires different elements to be managed across technology skillsets.
- Prepare for an end to end orchestration that provides for control over automation and the order of deployments.
The good news here is that for the most part, the tools we use here for Network automation are generally the same that we will use for other areas of automation or what we have already covered so far or what we will cover in future sessions.
Operating System - As I have throughout this challenge, I am focusing on doing most of my learning with a Linux OS, those reasons were given in the Linux section but almost all of the tooling that we will touch albeit cross-OS platform maybe today they all started as Linux based applications or tools, to begin with.
Integrated Development Environment (IDE) - Again not much to say here other than throughout I would suggest Visual Studio Code as your IDE, based on the extensive plugins that are available for so many different languages.
Configuration Management - We have not got to the Configuration management section yet, but it is very clear that Ansible is a favourite in this area for managing and automating configurations. Ansible is written in Python but you do not need to know Python.
- Agentless
- Only requires SSH
- Large Support Community
- Lots of Network Modules
- Push only model
- Configured with YAML
- Open Source!
Link to Ansible Network Modules
We will also touch on Ansible Tower in the configuration management section, see this as the GUI front end for Ansible.
CI/CD - Again we will cover more about the concepts and tooling around this but it's important to at least mention here as this spans not only networking but all provisioning of service and platform.
In particular, Jenkins provides or seems to be a popular tool for Network Automation.
- Monitors git repository for changes and then initiates them.
Version Control - Again something we will dive deeper into later on.
- Git provides version control of your code on your local device - Cross-Platform
- GitHub, GitLab, BitBucket etc are online websites where you define your repositories and upload your code.
Language | Scripting - Something we have not covered here is Python as a language, I decided to dive into Go instead as the programming language based on my circumstances, I would say that it was a close call between Golang and Python and Python it seems to be the winner for Network Automation.
- Nornir is something to mention here, an automation framework written in Python. This seems to take the role of Ansible but specifically around Network Automation. Nornir documentation
Analyse APIs - Postman is a great tool for analysing RESTful APIs. Helps to build, test and modify APIs.
- POST >>> To create resources objects.
- GET >>> To retrieve a resources.
- PUT >>> To create or replace the resources.
- PATCH >>> To create or update the resources object.
- Delete >>> To delete a resources
Cisco NSO (Network Services Orchestrator)
NetYCE - Simplify Network Automation
Over the next 3 days, I am planning to get more hands-on around some of the things we have covered and put some work in around Python and Network automation.
We have nowhere near covered all of the networking topics so far but wanted to make this broad enough to follow along and still keep learning from the resources I am adding below.
- 3 Necessary Skills for Network Automation
- Computer Networking full course
- Practical Networking
- Python Network Automation
See you on Day 25