Check the whitepaper on CCO for more information.
Clone the sdwan-devops repo using the main branch (default: origin/main):
git clone --single-branch --recursive https://github.com/ciscodevnet/sdwan-devops.git
Make sure you use --recursive
to also clone folders sdwan-edge and terraform-sdwan.
All operations are run out of the sdwan-devops directory: cd sdwan-devops
If you are on a Mac: we need openssl version3, while on mac this is LibreSSL.
Upgrade openssl:
brew install openssl@3
Generate a licence file corresponding to your org-name that will contain your device UUIDs. Go to CCO under Network Plug and Play using your Smart Account / Virtual Account (SA/VA).
Download and copy into ansible/licences
All parameters are defined in a single configuration file named config.yaml under folder config.
Go to the config directory
- copy
config.example.yaml
toconfig.yaml
- Update required parameters, most likely your ssh_public_key, controllers and wan-edge ami image identifiers as well as wan-edge UUIDs.
Go to the bin folder.
Update your AWS profile name in file minimal_env.sh (if this is not "default").
Set environnement variables (make sure to use source ....)
source minimal_env.sh
With bin as your current folder, build all ansible parameter files:
./config_build.sh
This will render parameter files for ansible playbooks based on config/config.yaml and jinja templates:
- Ansible day-1 vars: 'config/templates/day-1_local.j2' -> '../ansible/day_-1/group_vars/all/local.yml'
- Ansible day_0 vars: 'config/templates/day0_local.j2' -> '../ansible/day_0/group_vars/all/local.yml'
- Ansible day_1 vars: 'config/templates/day1_local.j2' -> '../ansible/day_1/group_vars/all/local.yml'
- Ansible SDWAN inventory: 'config/templates/sdwan_inventory.j2' -> '../ansible/inventory/sdwan_inventory.yml'
With bin as your current folder, run the script to create certificates:
./install_ca.sh
This will create a local CA in ansible/myCA.
With bin as your current folder, deploy and configure Control Plane:
./install_cp.sh
This will execute ansible playbook: /ansible/day_0/build-control-plane.yml
Which imports:
- /ansible/day_0/deploy-control-plane.yml
- /ansible/day_0/config-control-plane.yml
- which in turns, imports:
- /ansible/day_0/check-reqs.yml
- /ansible/day_0/check-vmanage.yml
- /ansible/day_0/config-vmanage.yml
- which in turns, imports:
You can also execute individual playbooks if you want to check every step of the process:
./play.sh /ansible/day_0/deploy-control-plane.yml
./play.sh /ansible/day_0/check-reqs.yml
./play.sh /ansible/day_0/check-vmanage.yml
./play.sh /ansible/day_0/config-vmanage.yml
./play.sh /ansible/day_0/config-certificates.yml
Notes:
- deploy-control-plane.yml: generate day0 configurations and instantiate all controllers.
- check-reqs.yml: check org-name is defined and serial file exists.
- check-vmanage.yml: check vManage is able to respond to REST API calls. Can take a while (~60 retries or 15 sec each).
- config-vmanage.yml: configure vManage settings and add vBond and vSmart controllers to vManage.
- config-certificates.yml: add certificates for all controllers.
With bin as your current folder:
./delete_cp.sh