https://github.com/ciscodevnet/sd-wan-ansible-pipeline-code
SD-WAN Ansible CI/CD pipeline Code
https://github.com/ciscodevnet/sd-wan-ansible-pipeline-code
Last synced: 8 months ago
JSON representation
SD-WAN Ansible CI/CD pipeline Code
- Host: GitHub
- URL: https://github.com/ciscodevnet/sd-wan-ansible-pipeline-code
- Owner: CiscoDevNet
- License: mit
- Created: 2019-04-30T15:44:17.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-24T23:18:41.000Z (almost 3 years ago)
- Last Synced: 2025-04-14T21:54:18.675Z (8 months ago)
- Language: Python
- Size: 196 KB
- Stars: 30
- Watchers: 24
- Forks: 29
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# sd-wan-ansible-pipeline-code
This collection of Ansible inventory and playbooks is designed to be used with the DevNet Learning Module [Cisco SD-WAN Ansible Pipeline](https://developer.cisco.com/learning/modules/sd-wan-ansible-pipeline) and the DevNet [Multi-IOS Cisco Test Network](https://devnetsandbox.cisco.com/RM/Topology) sandbox. However, it can also be applied to any VIRL server that has the appropriate Cisco SD-WAN images installed.
> Note: future development of the SDWAN DevOps code base has been moved to the [sdwan-devops](https://github.com/CiscoDevNet/sdwan-devops) repo. There are many improvements there, including support for VIRL2/CML2 and VMware deployments.
## Requirements
- VIRL server with vManage, vSmart, vBond and vEdge images installed. For instructions on how to do this, look at the [virl-howtos](https://github.com/CiscoSE/virl-howtos) repo.
- [sshpass](https://sourceforge.net/projects/sshpass/) installed
## Installation
Clone the repo. Note the use of the recursive switch. This is to make sure the necessary submodules get pulled down as well.
```
git clone --recursive https://github.com/CiscoDevNet/sd-wan-ansible-pipeline-code.git
```
Change into the sd-wan-ansible-pipeline-code directory.
```
cd sd-wan-ansible-pipeline-code
```
Install the required Python modules.
```
pip install -r requirements.txt
```
## Topology
The Ansible inventory data included in this repo is designed to build and configure the following topology:

## Playbooks
There are seven playbooks in this collection:
- **build.yml** builds the dynamic VIRL topology file and starts the simulation
- **configure.yml** pushes the Day 1 configuration to devices via NETCONF
- **import-templates.yml** imports device/feature templates into vManage
- **export-templates.yml** writes device/feature templates from vManage to a local YAML file
- **attach-template.yml** attaches device templates to devices
- **detach-template.yml** detaches device templates from devices
- **clean.yml** cleans up file and stops the simulation
## Basic usage
Build the topology.
```
ansible-playbook build.yml
```
Bring up the control plane and basic device connectivity.
```
ansible-playbook configure.yml
```
Import device/feature templates into vManage
```
ansible-playbook import-templates.yml
```
Attach device templates to devices.
```
ansible-playbook attach-template.yml
```
When you're done, cleanup.
```
ansible-playbook clean.yml
```
## Adding a site to the topology
Ensure you are starting with clean directory and no simulation running.
```
ansible-playbook clean.yml
```
Copy a new viptela-workshop.yml file with the additional branch site into the inventory directory.
```
cp inventory_files/viptela-workshop-2branch.yml inventory/viptela-workshop.yml
```
Build the topology.
```
ansible-playbook build.yml
```
Bring up the control plane and basic device connectivity.
```
ansible-playbook configure.yml
```
Import device/feature templates into vManage
```
ansible-playbook import-templates.yml
```
Attach device templates to devices.
```
ansible-playbook attach-template.yml
```
> Note: It can take some time for vEdges to register in vManage, trying to run the attach-template.yml playbook before the vEdge is registered in vManage will result in an error.
## Updating a device banner
Copy a new network.yml file with an updated banner into the vedge1 directory.
```
cp inventory_files/vedge1_network.yml inventory/host_vars/vedge1/
```
Reattach the device template to vedge1
```
ansible-playbook attach-template.yml --limit=vedge1
```
## Useful tips
1. Use `virl nodes` to find node management IP addresses.
1. When running the attach-template.yml playbook, you can limit the playbook to a specific node (e.g `--limit=vedge1`).
1. When running the configure.yml playbook, you can limit the playbook to just control plane or just edge with `--limit=control` and `--limit=edge`.