Creating Device configuration snippets [CREATED] dut: initial,ospf,vrf [CREATED] r1: initial,ospf [CREATED] r2: initial,ospf [CREATED] r3: initial,ospf [CREATED] r4: initial,ospf 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 26.8 seconds Config Deploying device configurations [INFO] Executing initial configuration for node r1 [INFO] Executing initial configuration for node r2 [INFO] Executing initial configuration for node r3 [INFO] Executing initial configuration for node r4 [INFO] Executing ospf configuration for node r1 [INFO] Executing ospf configuration for node r2 [INFO] Executing ospf configuration for node r3 [INFO] Executing ospf configuration for node r4 [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 r1 10.0.0.2\ndomain ipv4 host r2 10.0.0.3\ndomain ipv4 host r3 10.0.0.4\ndomain ipv4 host r4 10.0.0.5\n!\ninterface Loopback0\n no shutdown\n ipv4 address 10.0.0.1 255.255.255.255\n!\ninterface GigabitEthernet0/0/0/0\n no shutdown\n description dut -> r1\n mtu 1514\n ipv4 address 10.1.0.1 255.255.255.252\n!\ninterface GigabitEthernet0/0/0/1\n no shutdown\n description dut -> r2\n mtu 1514\n ipv4 address 10.1.0.5 255.255.255.252\n!\ninterface GigabitEthernet0/0/0/2\n no shutdown\n description dut -> r3\n mtu 1514\n ipv4 address 10.1.0.9 255.255.255.252\n!\ninterface GigabitEthernet0/0/0/3\n no shutdown\n description dut -> r4\n mtu 1514\n ipv4 address 10.1.0.13 255.255.255.252\n!\ninterface Loopback1\n no shutdown\n description VRF Loopback red\n ipv4 address 10.2.0.1 255.255.255.255\n!\ninterface Loopback2\n no shutdown\n description VRF Loopback blue\n ipv4 address 10.2.0.2 255.255.255.255\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/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=ospf) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut => (item=vrf) 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!\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/node_files/dut/ospf] *** ok: [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 red\n rd 65000:1\n!\n address-family ipv4 unicast\n import route-target 65000:1\n export route-target 65000:1\n!\nvrf blue\n rd 65000:2\n!\n address-family ipv4 unicast\n import route-target 65000:2\n export route-target 65000:2\n!\ninterface GigabitEthernet0/0/0/0\n vrf red\n!\ninterface GigabitEthernet0/0/0/1\n vrf red\n!\ninterface GigabitEthernet0/0/0/2\n vrf blue\n!\ninterface GigabitEthernet0/0/0/3\n vrf blue\n!\ninterface Loopback1\n vrf red\n!\ninterface Loopback2\n vrf blue\n!\nrouter ospf 100 vrf red\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.1\n\n loopback stub-network enable\n redistribute connected\n\n area 0.0.0.2\n interface GigabitEthernet0/0/0/0\n network point-to-point\n interface GigabitEthernet0/0/0/1\n network point-to-point\n interface Loopback1\n\nrouter ospf 101 vrf blue\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.1\n\n loopback stub-network enable\n redistribute connected\n\n area 0.0.0.0\n interface Loopback2\n area 0.0.0.3\n interface GigabitEthernet0/0/0/2\n network point-to-point\n area 0.0.0.4\n interface GigabitEthernet0/0/0/3\n network point-to-point\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/node_files/dut/vrf] *** changed: [dut] PLAY [Deploy custom deployment templates] ************************************** skipping: no hosts matched PLAY RECAP ********************************************************************* dut : ok=27 changed=2 unreachable=0 failed=0 skipped=6 rescued=0 ignored=0 Results of configuration script deployments ================================================================================ r1 Script: initial,ospf r2 Script: initial,ospf r3 Script: initial,ospf r4 Script: initial,ospf The device under test has two VRFs with two interfaces in each VRF. Routers are attached to those interfaces and run OSPF with device under test. Assuming the multi-vrf test case succeeded, this one adds OSPF routing with CE routers. * r1 and r2 should be able to ping each other * r3 and r4 should be able to ping each other * r1 should not be able to reach r3