NetDevOps CI/CD pipeline demo for mpls/l3vpn configuration management in a multi vendor environment CISCO IOSXR and JUNIPER JUNOS via NETCONF
The following architecture is used to illustrate a fully automated network configuration pipeline.
Configuration changes are proposed as code to the version control system, in our case, GitHub. Once the changes are pushed, GitHub will trigger webbooks to initiate the pipeline orchestration in Jenkins. The Nornir automation framework will support concurrent task execution as well as inventory management abstraction. On the other hand, Pyats Cisco's test and validation solution, performs stateful validation of the operational status of the network.
I'm not going to explain the operation in depth of every element in the architecture in this post, just as a high-level overview. but the plan is to publish additional articles illustrating them individually.
Very simple topology used to test l3vpn configuration.
Target configuration goals:
2x vrf per PE, each with 1 loopback interface, basic ospf, ldp, bgp ipv4/vpnv4.
Note: Basic connectivity is pre-configured to ensure reachability with Devbox.
The following shows Nornir's structure including inventory, hosts variables, jinja2 templates etc. also the python script to execute the automated configuration using netconf and yang data models.
Basic python script to apply the configuration
Basic Pyats (easypy) to aggregate all testscripts into a job for easier execution. I am planning a separate article elaborating on the Pyats ecosystem.
- The pipeline is initiated by pushing the proposed changes to the SCM (GitHub).
2. Once GitHub receives the, it triggers a webbook to Jenkins in order to kick off the pipeline orchestration..
3. Jenkins jobs are kicked off.
3.1 Build Config: executed configs in Dev network using Nornir via netconf.
3.2 Dev Test: executed test scripts for sanity checks validating operational states in ospf, ldp, bgp are in-line with previously captured golden status. also reachability using icmp ping.
3.3 Deploy prod: executed configs in Prod network using Nornir via netconf.
3.4 Slack notification: Used a Jenkins's plugin to send slack notifications, when CI/CD pipeline is completed.