This is my Ansible Playbook for a simple Cisco BGP routing topology and using a CICD pipeline for integration testing. The virtual network environment is created on-demand by using Vagrant, see my post about Cisco IOSv and XE network simulation using Vagrant.
Network overview:
Here’s my Github repository where you can find the complete Ansible Playbook: https://github.com/berndonline/cisco-lab-provision
You can find all the variables for the interface and routing configuration under host_vars. Below is an example for router rtr-1:
--- hostname: rtr-1 domain_name: lab.local loopback: address: 10.255.0.1 mask: 255.255.255.255 interfaces: 0/1: alias: connection rtr-2 address: 10.0.255.1 mask: 255.255.255.252 0/2: alias: connection rtr-3 address: 10.0.255.5 mask: 255.255.255.252 bgp: asn: 65001 neighbor: - {address: 10.0.255.2, remote_as: 65000} - {address: 10.0.255.6, remote_as: 65000} networks: - {network: 10.0.255.0, mask: 255.255.255.252} - {network: 10.0.255.4, mask: 255.255.255.252} - {network: 10.255.0.1, mask: 255.255.255.255} maxpath: 2
Roles:
- Hostname: The task in main.yml uses the Ansible module ios_system and configures hostname, domain name and disables dns lookups.
- Interfaces: This role uses the Ansible module ios_config to deploy the template interfaces.j2 to configure the interfaces. In the main.yml is a second task to enable the interfaces when the previous template applied the configuration.
- Routing: Very similar to the interfaces role and uses also the ios_config module to deploy the template routing.j2 for the BGP routing configuration.
Main Ansible Playbook site.yml:
--- - hosts: all connection: local user: vagrant gather_facts: 'no' roles: - hostname - interfaces - routing
When a change triggers the gitlab-ci pipeline it spins up the Vagrant instances and executes the main Ansible Playbook:
After the main site.yml ran, a second Playbook is executed for basic connectivity testing cisco_check_icmp.yml. This uses the Ansible module ios_ping and can be useful in my case to validate if the configuration was correctly applied:
If everything goes well, like in this example, the job is successful:
I will continue to improve the Playbook and the CICD pipeline so come back later to check it out.