[INFO] Checking for updates in configuration templates [INFO] Creating configuration snippets [CREATED] s1: normalize,initial,vlan,ospf,bgp,vrf,vxlan,evpn [CREATED] s2: normalize,initial,vlan,ospf,bgp,vrf,vxlan,evpn [CREATED] h1: initial,routing [CREATED] h2: initial,routing [CREATED] h3: initial,routing [CREATED] h4: initial,routing [INFO] Executing initial configuration for node h1 (namespace clab- ml_17-h1) [INFO] Executing routing configuration for node h1 (namespace clab- ml_17-h1) [INFO] Executing initial configuration for node h2 (namespace clab- ml_17-h2) [INFO] Executing routing configuration for node h2 (namespace clab- ml_17-h2) [INFO] Executing initial configuration for node h3 (namespace clab- ml_17-h3) [INFO] Executing routing configuration for node h3 (namespace clab- ml_17-h3) [INFO] Executing initial configuration for node h4 (namespace clab- ml_17-h4) [INFO] Executing routing configuration for node h4 (namespace clab- ml_17-h4) [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: [s1] ok: [s2] TASK [Generic readiness tests] ************************************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/readiness-check/ssh.yml for s1, s2 => (item=ssh) TASK [Check if 'sshpass' is installed] ***************************************** ok: [s1 -> localhost] TASK [Check for 'timeout' command] ********************************************* ok: [s1 -> localhost] ok: [s2 -> localhost] TASK [Execute local ssh command to check ssh readiness] ************************ FAILED - RETRYING: [s1 -> localhost]: Execute local ssh command to check ssh readiness (20 retries left). FAILED - RETRYING: [s2 -> localhost]: Execute local ssh command to check ssh readiness (20 retries left). ok: [s2 -> localhost] ok: [s1 -> localhost] TASK [Confirm s1 SSH server works] ********************************************* ok: [s1] => { "msg": "Node s1 is ready." } ok: [s2] => { "msg": "Node s2 is ready." } TASK [Find device readiness script] ******************************************** ok: [s1] ok: [s2] TASK [Wait for device to become ready] ***************************************** skipping: [s1] skipping: [s2] TASK [Normalize config on bridge-like devices] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for s1, s2 TASK [Figure out whether to deploy the module normalize on current device] ***** ok: [s1] ok: [s2] TASK [Find configuration template for normalize] ******************************* ok: [s1] ok: [s2] TASK [fail] ******************************************************************** skipping: [s1] skipping: [s2] TASK [Find configuration deployment deploy_script for normalize] *************** ok: [s1] ok: [s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [s1] => { "msg": "normalize configuration for s1\n=========================================\n!\ninterface Ethernet1\n shutdown\n!\ninterface Ethernet2\n shutdown\n!\ninterface Ethernet3\n shutdown\n" } ok: [s2] => { "msg": "normalize configuration for s2\n=========================================\n!\ninterface Ethernet1\n shutdown\n!\ninterface Ethernet2\n shutdown\n!\ninterface Ethernet3\n shutdown\n" } TASK [Deploy normalize configuration] ****************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for s1, s2 TASK [eos_config: deploying normalize from /work/netlab_cicd/node_files/s1/normalize] *** [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: [s2] changed: [s1] TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for s1, s2 TASK [Figure out whether to deploy the module initial on current device] ******* ok: [s1] ok: [s2] TASK [Find configuration template for initial] ********************************* ok: [s1] ok: [s2] TASK [fail] ******************************************************************** skipping: [s1] skipping: [s2] TASK [Find configuration deployment deploy_script for initial] ***************** ok: [s1] ok: [s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [s1] => { "msg": "initial configuration for s1\n=========================================\nhostname s1\n!\nlogging monitor debugging\naaa authorization exec default local\n!\nlldp run\nip routing\nno ipv6 unicast-routing\n!\nvrf instance tenant\n rd 65000:1\n!\nip routing vrf tenant\n!\n!\nip host h1 172.16.0.3\nip host h2 172.16.1.4\nip host h3 172.16.2.5\nip host h4 172.16.3.6\nip host s1-tenant 172.16.0.1 172.16.2.1 172.16.1.1\nip host s2 10.0.0.2 10.1.0.2\nip host s2-tenant 172.16.1.2 172.16.3.2 172.16.0.2\n!\ninterface Management0\n no lldp transmit\n no lldp receive\n!\ninterface Loopback0\n ip address 10.0.0.1/32\n!\ninterface Ethernet1\n no switchport\n mtu 1600\n description s1 -> s2\n ip address 10.1.0.1/30\n mac-address caf0.0001.0001\n!\n no shutdown\n!\ninterface Ethernet2\n no switchport\n description [Access VLAN red] s1 -> h1\n!\n no shutdown\n!\ninterface Ethernet3\n no switchport\n description [Access VLAN green] s1 -> h3\n!\n no shutdown\n!\ninterface Vlan1000\n vrf tenant\n description VLAN red (1000) -> [h1,s2]\n ip address 172.16.0.1/24\n!\ninterface Vlan1002\n vrf tenant\n description VLAN green (1002) -> [h3] [stub]\n ip address 172.16.2.1/24\n!\ninterface Vlan1001\n vrf tenant\n description VLAN blue (1001) -> [h2,s2]\n ip address 172.16.1.1/24\n!\n" } ok: [s2] => { "msg": "initial configuration for s2\n=========================================\nhostname s2\n!\nlogging monitor debugging\naaa authorization exec default local\n!\nlldp run\nip routing\nno ipv6 unicast-routing\n!\nvrf instance tenant\n rd 65000:1\n!\nip routing vrf tenant\n!\n!\nip host h1 172.16.0.3\nip host h2 172.16.1.4\nip host h3 172.16.2.5\nip host h4 172.16.3.6\nip host s1 10.0.0.1 10.1.0.1\nip host s1-tenant 172.16.0.1 172.16.2.1 172.16.1.1\nip host s2-tenant 172.16.1.2 172.16.3.2 172.16.0.2\n!\ninterface Management0\n no lldp transmit\n no lldp receive\n!\ninterface Loopback0\n ip address 10.0.0.2/32\n!\ninterface Ethernet1\n no switchport\n mtu 1600\n description s2 -> s1\n ip address 10.1.0.2/30\n mac-address caf0.0002.0001\n!\n no shutdown\n!\ninterface Ethernet2\n no switchport\n description [Access VLAN blue] s2 -> h2\n!\n no shutdown\n!\ninterface Ethernet3\n no switchport\n description [Access VLAN purple] s2 -> h4\n!\n no shutdown\n!\ninterface Vlan1001\n vrf tenant\n description VLAN blue (1001) -> [s1,h2]\n ip address 172.16.1.2/24\n!\ninterface Vlan1003\n vrf tenant\n description VLAN purple (1003) -> [h4] [stub]\n ip address 172.16.3.2/24\n!\ninterface Vlan1000\n vrf tenant\n description VLAN red (1000) -> [h1,s1]\n ip address 172.16.0.2/24\n!\n" } TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for s1, s2 TASK [eos_config: deploying initial from /work/netlab_cicd/node_files/s1/initial] *** changed: [s1] changed: [s2] PLAY [Deploy module-specific configurations] *********************************** TASK [Set variables that cannot be set with VARS] ****************************** ok: [s1] ok: [s2] TASK [Deploy individual configuration modules] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for s1, s2 => (item=vlan) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for s1, s2 => (item=routing) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for s1, s2 => (item=ospf) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for s1, s2 => (item=bgp) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for s1, s2 => (item=vrf) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for s1, s2 => (item=vxlan) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for s1, s2 => (item=evpn) TASK [Figure out whether to deploy the module vlan on current device] ********** ok: [s1] ok: [s2] TASK [Find configuration template for vlan] ************************************ ok: [s1] ok: [s2] TASK [fail] ******************************************************************** skipping: [s1] skipping: [s2] TASK [Find configuration deployment deploy_script for vlan] ******************** ok: [s1] ok: [s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [s1] => { "msg": "vlan configuration for s1\n=========================================\nvlan 1000\n name red\n!\nvlan 1001\n name blue\n!\nvlan 1002\n name green\n!\n\n!\ninterface Ethernet2\n switchport\n switchport access vlan 1000\n!\ninterface Ethernet3\n switchport\n switchport access vlan 1002\n!\ninterface Vlan1000\n!\ninterface Vlan1002\n!\ninterface Vlan1001\n" } ok: [s2] => { "msg": "vlan configuration for s2\n=========================================\nvlan 1000\n name red\n!\nvlan 1001\n name blue\n!\nvlan 1003\n name purple\n!\n\n!\ninterface Ethernet2\n switchport\n switchport access vlan 1001\n!\ninterface Ethernet3\n switchport\n switchport access vlan 1003\n!\ninterface Vlan1001\n!\ninterface Vlan1003\n!\ninterface Vlan1000\n" } TASK [Deploy vlan configuration] *********************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for s1, s2 TASK [eos_config: deploying vlan from /work/netlab_cicd/node_files/s1/vlan] **** changed: [s1] changed: [s2] TASK [Figure out whether to deploy the module routing on current device] ******* ok: [s1] ok: [s2] TASK [Find configuration template for routing] ********************************* skipping: [s1] skipping: [s2] TASK [fail] ******************************************************************** skipping: [s1] skipping: [s2] TASK [Find configuration deployment deploy_script for routing] ***************** skipping: [s1] skipping: [s2] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [s1] skipping: [s2] TASK [Deploy routing configuration] ******************************************** skipping: [s1] skipping: [s2] TASK [Figure out whether to deploy the module ospf on current device] ********** ok: [s1] ok: [s2] TASK [Find configuration template for ospf] ************************************ ok: [s1] ok: [s2] TASK [fail] ******************************************************************** skipping: [s1] skipping: [s2] TASK [Find configuration deployment deploy_script for ospf] ******************** ok: [s1] ok: [s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [s1] => { "msg": "ospf configuration for s1\n=========================================\n!\n! OSPFv2 configuration\n!\nrouter ospf 1\n router-id 10.0.0.1\n interface unnumbered hello mask tx 0.0.0.0\n timers spf delay initial 100 200 500\n timers lsa rx min interval 100\n timers lsa tx delay initial 100 200 500\n\n\n!\ninterface Loopback0\n! \n ip ospf area 0.0.0.0\n!\ninterface Ethernet1\n! s1 -> s2\n ip ospf area 0.0.0.0\n ip ospf network point-to-point\n!\n\n" } ok: [s2] => { "msg": "ospf configuration for s2\n=========================================\n!\n! OSPFv2 configuration\n!\nrouter ospf 1\n router-id 10.0.0.2\n interface unnumbered hello mask tx 0.0.0.0\n timers spf delay initial 100 200 500\n timers lsa rx min interval 100\n timers lsa tx delay initial 100 200 500\n\n\n!\ninterface Loopback0\n! \n ip ospf area 0.0.0.0\n!\ninterface Ethernet1\n! s2 -> s1\n ip ospf area 0.0.0.0\n ip ospf network point-to-point\n!\n\n" } TASK [Deploy ospf configuration] *********************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for s1, s2 TASK [eos_config: deploying ospf from /work/netlab_cicd/node_files/s1/ospf] **** changed: [s2] changed: [s1] TASK [Figure out whether to deploy the module bgp on current device] *********** ok: [s1] ok: [s2] TASK [Find configuration template for bgp] ************************************* ok: [s1] ok: [s2] TASK [fail] ******************************************************************** skipping: [s1] skipping: [s2] TASK [Find configuration deployment deploy_script for bgp] ********************* ok: [s1] ok: [s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [s1] => { "msg": "bgp configuration for s1\n=========================================\n!\nroute-map next-hop-self-ipv4 permit 10\n match route-type external\n set ip next-hop peer-address\n!\nroute-map next-hop-self-ipv4 permit 20\n!\n!\nrouter bgp 65000\n bgp advertise-inactive\n bgp log-neighbor-changes\n no bgp default ipv4-unicast\n no bgp default ipv6-unicast\n router-id 10.0.0.1\n!\n neighbor 10.0.0.2 remote-as 65000\n neighbor 10.0.0.2 description s2\n neighbor 10.0.0.2 update-source Loopback0\n neighbor 10.0.0.2 send-community standard extended large \n!\n!\n address-family ipv4\n\n!\n!\n! Originate networks from connected subnets\n!\n network 10.0.0.1/32\n!\n!\n neighbor 10.0.0.2 activate\n neighbor 10.0.0.2 route-map next-hop-self-ipv4 out\n!\n" } ok: [s2] => { "msg": "bgp configuration for s2\n=========================================\n!\nroute-map next-hop-self-ipv4 permit 10\n match route-type external\n set ip next-hop peer-address\n!\nroute-map next-hop-self-ipv4 permit 20\n!\n!\nrouter bgp 65000\n bgp advertise-inactive\n bgp log-neighbor-changes\n no bgp default ipv4-unicast\n no bgp default ipv6-unicast\n router-id 10.0.0.2\n!\n neighbor 10.0.0.1 remote-as 65000\n neighbor 10.0.0.1 description s1\n neighbor 10.0.0.1 update-source Loopback0\n neighbor 10.0.0.1 send-community standard extended large \n!\n!\n address-family ipv4\n\n!\n!\n! Originate networks from connected subnets\n!\n network 10.0.0.2/32\n!\n!\n neighbor 10.0.0.1 activate\n neighbor 10.0.0.1 route-map next-hop-self-ipv4 out\n!\n" } TASK [Deploy bgp configuration] ************************************************ included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for s1, s2 TASK [eos_config: deploying bgp from /work/netlab_cicd/node_files/s1/bgp] ****** changed: [s1] changed: [s2] TASK [Figure out whether to deploy the module vrf on current device] *********** ok: [s1] ok: [s2] TASK [Find configuration template for vrf] ************************************* ok: [s1] ok: [s2] TASK [fail] ******************************************************************** skipping: [s1] skipping: [s2] TASK [Find configuration deployment deploy_script for vrf] ********************* ok: [s1] ok: [s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [s1] => { "msg": "vrf configuration for s1\n=========================================\n!\nmpls ip\n!\nrouter bgp 65000\n!\n vrf tenant\n router-id 10.0.0.1\n rd 65000:1\n!\n address-family ipv4\n redistribute connected\n redistribute ospf\n\n!\n! OSPFv2 configuration\n!\nrouter ospf 100 vrf tenant\n router-id 10.0.0.1\n interface unnumbered hello mask tx 0.0.0.0\n timers spf delay initial 100 200 500\n timers lsa rx min interval 100\n timers lsa tx delay initial 100 200 500\n\n redistribute bgp include leaked\n redistribute connected include leaked\n\n passive-interface Vlan1002\n!\ninterface Vlan1000\n! VLAN red (1000) -> [h1,s2]\n ip ospf area 0.0.0.0\n!\ninterface Vlan1002\n! VLAN green (1002) -> [h3]\n ip ospf area 0.0.0.0\n ip ospf network point-to-point\n!\ninterface Vlan1001\n! VLAN blue (1001) -> [h2,s2]\n ip ospf area 0.0.0.0\n!\n\n" } ok: [s2] => { "msg": "vrf configuration for s2\n=========================================\n!\nmpls ip\n!\nrouter bgp 65000\n!\n vrf tenant\n router-id 10.0.0.2\n rd 65000:1\n!\n address-family ipv4\n redistribute connected\n redistribute ospf\n\n!\n! OSPFv2 configuration\n!\nrouter ospf 100 vrf tenant\n router-id 10.0.0.2\n interface unnumbered hello mask tx 0.0.0.0\n timers spf delay initial 100 200 500\n timers lsa rx min interval 100\n timers lsa tx delay initial 100 200 500\n\n redistribute bgp include leaked\n redistribute connected include leaked\n\n passive-interface Vlan1003\n!\ninterface Vlan1001\n! VLAN blue (1001) -> [s1,h2]\n ip ospf area 0.0.0.0\n!\ninterface Vlan1003\n! VLAN purple (1003) -> [h4]\n ip ospf area 0.0.0.0\n ip ospf network point-to-point\n!\ninterface Vlan1000\n! VLAN red (1000) -> [h1,s1]\n ip ospf area 0.0.0.0\n!\n\n" } TASK [Deploy vrf configuration] ************************************************ included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for s1, s2 TASK [eos_config: deploying vrf from /work/netlab_cicd/node_files/s1/vrf] ****** changed: [s1] changed: [s2] TASK [Figure out whether to deploy the module vxlan on current device] ********* ok: [s1] ok: [s2] TASK [Find configuration template for vxlan] *********************************** ok: [s1] ok: [s2] TASK [fail] ******************************************************************** skipping: [s1] skipping: [s2] TASK [Find configuration deployment deploy_script for vxlan] ******************* ok: [s1] ok: [s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [s1] => { "msg": "vxlan configuration for s1\n=========================================\ninterface vxlan 1\n vxlan source-interface Loopback0\n vxlan vlan 1000 vni 21000\n vxlan vlan 1001 vni 21001\n" } ok: [s2] => { "msg": "vxlan configuration for s2\n=========================================\ninterface vxlan 1\n vxlan source-interface Loopback0\n vxlan vlan 1000 vni 21000\n vxlan vlan 1001 vni 21001\n" } TASK [Deploy vxlan configuration] ********************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for s1, s2 TASK [eos_config: deploying vxlan from /work/netlab_cicd/node_files/s1/vxlan] *** changed: [s2] changed: [s1] TASK [Figure out whether to deploy the module evpn on current device] ********** ok: [s1] ok: [s2] TASK [Find configuration template for evpn] ************************************ ok: [s1] ok: [s2] TASK [fail] ******************************************************************** skipping: [s1] skipping: [s2] TASK [Find configuration deployment deploy_script for evpn] ******************** ok: [s1] ok: [s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [s1] => { "msg": "evpn configuration for s1\n=========================================\n!\nrouter bgp 65000\n address-family evpn\n!\n neighbor 10.0.0.2 activate\n!\n vlan 1000\n rd 10.0.0.1:1000\n route-target import 65000:1000\n route-target export 65000:1000\n redistribute learned\n!\n vlan 1001\n rd 10.0.0.1:1001\n route-target import 65000:1001\n route-target export 65000:1001\n redistribute learned\n!\n vrf tenant\n rd 65000:1\n route-target import evpn 65000:1\n route-target export evpn 65000:1\n redistribute connected\n" } ok: [s2] => { "msg": "evpn configuration for s2\n=========================================\n!\nrouter bgp 65000\n address-family evpn\n!\n neighbor 10.0.0.1 activate\n!\n vlan 1000\n rd 10.0.0.2:1000\n route-target import 65000:1000\n route-target export 65000:1000\n redistribute learned\n!\n vlan 1001\n rd 10.0.0.2:1001\n route-target import 65000:1001\n route-target export 65000:1001\n redistribute learned\n!\n vrf tenant\n rd 65000:1\n route-target import evpn 65000:1\n route-target export evpn 65000:1\n redistribute connected\n" } TASK [Deploy evpn configuration] *********************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for s1, s2 TASK [eos_config: deploying evpn from /work/netlab_cicd/node_files/s1/evpn] **** changed: [s2] changed: [s1] PLAY [Deploy custom deployment templates] ************************************** skipping: no hosts matched PLAY RECAP ********************************************************************* s1 : ok=66 changed=8 unreachable=0 failed=0 skipped=14 rescued=0 ignored=0 s2 : ok=65 changed=8 unreachable=0 failed=0 skipped=14 rescued=0 ignored=0 Results of configuration script deployments ================================================================================ h1 OK: 2 h2 OK: 2 h3 OK: 2 h4 OK: 2 The devices under test are VLAN-to-VXLAN routers using asymmetric IRB with EVPN control plane and running OSPF within the VRF (across VXLAN segments) to exchange information about non-EVPN subnets. All hosts should be able to ping each other