Creating Device configuration snippets [CREATED] h1: initial,routing [CREATED] h2: initial,routing [CREATED] h3: initial,routing [CREATED] ch: initial,routing [CREATED] dut: initial,ospf,bgp,mpls,vrf [CREATED] pe2: initial,ospf,bgp,mpls,vrf [CREATED] p1: initial,ospf,mpls [CREATED] p2: initial,ospf,mpls Checking Are lab devices ready to be configured? [INFO] Checking SSH server(s) on dut [SSH] SSH server on node dut (device iosxr) is ready after 25.9 seconds Config Deploying device configurations [INFO] Executing initial configuration for node h1 (namespace clab- ml-31-h1) [INFO] Executing initial configuration for node h2 (namespace clab- ml-31-h2) [INFO] Executing initial configuration for node h3 (namespace clab- ml-31-h3) [INFO] Executing initial configuration for node ch (namespace clab- ml-31-ch) [INFO] Executing initial configuration for node pe2 [INFO] Executing initial configuration for node p1 [INFO] Executing initial configuration for node p2 [INFO] Executing routing configuration for node h1 (namespace clab- ml-31-h1) [INFO] Executing routing configuration for node h3 (namespace clab- ml-31-h3) [INFO] Executing routing configuration for node ch (namespace clab- ml-31-ch) [INFO] Executing routing configuration for node h2 (namespace clab- ml-31-h2) [INFO] Executing ospf configuration for node p1 [INFO] Executing ospf configuration for node pe2 [INFO] Executing ospf configuration for node p2 [INFO] Executing mpls configuration for node p1 [INFO] Executing bgp configuration for node pe2 [INFO] Executing mpls configuration for node p2 [INFO] Executing mpls configuration for node pe2 [INFO] Executing vrf configuration for node pe2 [INFO] Starting Ansible playbook to deploy the rest of the configurations [WARNING]: Found variable using reserved name: hosts PLAY [Deploy initial device configuration] ************************************* TASK [Set variables that cannot be set with VARS] ****************************** ok: [dut] TASK [Normalize config on bridge-like devices] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut TASK [Figure out whether to deploy the module normalize on current device] ***** ok: [dut] TASK [Find configuration template for normalize] ******************************* ok: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for normalize] *************** ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [dut] TASK [Deploy normalize configuration] ****************************************** skipping: [dut] TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut TASK [Figure out whether to deploy the module initial on current device] ******* ok: [dut] TASK [Find configuration template for initial] ********************************* ok: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for initial] ***************** ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut] => { "msg": "initial configuration for dut\n=========================================\nhostname dut\n!\ndomain lookup disable\n!\nlldp\n no management enable\n!\ndomain ipv4 host h1 172.16.0.1\ndomain ipv4 host h2 172.16.1.2\ndomain ipv4 host h3 172.16.2.3\ndomain ipv4 host ch 172.16.3.4\ndomain ipv4 host pe2 10.0.0.6\ndomain ipv4 host p1 10.0.0.7\ndomain ipv4 host p2 10.0.0.8\n!\ninterface Loopback0\n no shutdown\n ipv4 address 10.0.0.5 255.255.255.255\n!\ninterface GigabitEthernet0/0/0/0\n no shutdown\n description dut -> p1\n ipv4 address 10.1.0.1 255.255.255.252\n!\ninterface GigabitEthernet0/0/0/1\n no shutdown\n description dut -> h1 [stub]\n ipv4 address 172.16.0.5 255.255.255.0\n!\ninterface GigabitEthernet0/0/0/2\n no shutdown\n description dut -> ch [stub]\n ipv4 address 172.16.3.5 255.255.255.0\n!\n" } TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/iosxr.yml for dut TASK [iosxr_config: deploying initial from /work/netlab_cicd/xr/node_files/dut/initial] *** [WARNING]: To ensure idempotency and correct diff the input configuration lines should be similar to how they appear if present in the running configuration on device including the indentation changed: [dut] PLAY [Deploy module-specific configurations] *********************************** TASK [Set variables that cannot be set with VARS] ****************************** ok: [dut] TASK [Deploy individual configuration modules] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut => (item=routing) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut => (item=ospf) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut => (item=bgp) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut => (item=mpls) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut => (item=vrf) TASK [Figure out whether to deploy the module routing on current device] ******* ok: [dut] TASK [Find configuration template for routing] ********************************* skipping: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for routing] ***************** skipping: [dut] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [dut] TASK [Deploy routing configuration] ******************************************** skipping: [dut] TASK [Figure out whether to deploy the module ospf on current device] ********** ok: [dut] TASK [Find configuration template for ospf] ************************************ ok: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for ospf] ******************** ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut] => { "msg": "ospf configuration for dut\n=========================================\n!\nrouter ospf 1\n!\n! These throttle timers are probably too aggressive for a production network but\n! make labs run better ;)\n!\n timers throttle spf 10 20 100\n timers throttle lsa all 10 20 100\n router-id 10.0.0.5\n\n loopback stub-network enable\n area 0.0.0.0\n interface Loopback0\n interface GigabitEthernet0/0/0/0\n network point-to-point\n\n" } TASK [Deploy ospf configuration] *********************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/iosxr.yml for dut TASK [iosxr_config: deploying ospf from /work/netlab_cicd/xr/node_files/dut/ospf] *** changed: [dut] TASK [Figure out whether to deploy the module bgp on current device] *********** ok: [dut] TASK [Find configuration template for bgp] ************************************* ok: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for bgp] ********************* ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut] => { "msg": "bgp configuration for dut\n=========================================\n!\n!\nrouter bgp 65001\n bgp unsafe-ebgp-policy\n bgp scan-time 5\n bgp update-delay 5\n bgp router-id 10.0.0.5\n\n!\n address-family ipv4 unicast\n bgp scan-time 5\n!\n network 10.0.0.5/32\n!\n!\n neighbor 10.0.0.6\n remote-as 65001\n description pe2\n update-source Loopback0\n address-family ipv4 unicast\n next-hop-self\n\n" } TASK [Deploy bgp configuration] ************************************************ included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/iosxr.yml for dut TASK [iosxr_config: deploying bgp from /work/netlab_cicd/xr/node_files/dut/bgp] *** changed: [dut] TASK [Figure out whether to deploy the module mpls on current device] ********** ok: [dut] TASK [Find configuration template for mpls] ************************************ ok: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for mpls] ******************** ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut] => { "msg": "mpls configuration for dut\n=========================================\n!\nmpls ldp\n router-id 10.0.0.5\n log neighbor\n log hello-adjacency\n !\n interface GigabitEthernet0/0/0/0\n !\n address-family ipv4\n\n!\nrouter bgp 65001\n!\n! Initialize VPN AFs\n!\n address-family vpnv4 unicast\n bgp scan-time 5\n bgp import-delay 0 0\n!\n! Enable VPN AFs on BGP neighbors\n!\n neighbor 10.0.0.6\n address-family vpnv4 unicast\n\n" } TASK [Deploy mpls configuration] *********************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/iosxr.yml for dut TASK [iosxr_config: deploying mpls from /work/netlab_cicd/xr/node_files/dut/mpls] *** changed: [dut] TASK [Figure out whether to deploy the module vrf on current device] *********** ok: [dut] TASK [Find configuration template for vrf] ************************************* ok: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for vrf] ********************* ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut] => { "msg": "vrf configuration for dut\n=========================================\nvrf t1\n rd 65000:1\n!\n address-family ipv4 unicast\n import route-target 65000:1\n import route-target 65000:4\n export route-target 65000:1\n!\nvrf common\n rd 65000:4\n!\n address-family ipv4 unicast\n import route-target 65000:1\n import route-target 65000:2\n import route-target 65000:3\n import route-target 65000:4\n export route-target 65000:4\n!\ninterface GigabitEthernet0/0/0/1\n vrf t1\n!\ninterface GigabitEthernet0/0/0/2\n vrf common\n!\n!\nrouter bgp 65001\n bgp unsafe-ebgp-policy\n bgp scan-time 5\n bgp update-delay 5\n bgp router-id 10.0.0.5\n\n address-family vpnv4 unicast\n bgp import-delay 0 0\n bgp scan-time 5\n vrf t1\n bgp unsafe-ebgp-policy\n!\n address-family ipv4 unicast\n redistribute connected\n\n vrf common\n bgp unsafe-ebgp-policy\n!\n address-family ipv4 unicast\n redistribute connected\n\n" } TASK [Deploy vrf configuration] ************************************************ included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/iosxr.yml for dut TASK [iosxr_config: deploying vrf from /work/netlab_cicd/xr/node_files/dut/vrf] *** changed: [dut] PLAY [Deploy custom deployment templates] ************************************** skipping: no hosts matched PLAY RECAP ********************************************************************* dut : ok=43 changed=5 unreachable=0 failed=0 skipped=13 rescued=0 ignored=0 Results of configuration script deployments ================================================================================ h1 Script: initial,routing h2 Script: initial,routing h3 Script: initial,routing ch Script: initial,routing pe2 Script: initial,ospf,bgp,mpls,vrf p1 Script: initial,ospf,mpls p2 Script: initial,ospf,mpls The tested device (DUT) is a PE-router running MPLS/VPN and implementing common services VRF. The test checks the MPLS/VPN route import/export functionality. It should succeed if the simple MPLS/VPN test and the VRF Common Services test succeded unless you have to configure some weird nerd knobs to make it work.