Creating Device configuration snippets [CREATED] dut: initial,ospf,bgp,evpn [CREATED] l1: initial,vlan,bgp,vxlan,evpn [CREATED] l2: initial,vlan,bgp,vxlan,evpn [CREATED] l3: initial,vlan,ospf,bgp,vxlan,evpn [CREATED] h1: initial,routing [CREATED] h2: initial,routing [CREATED] h3: initial,routing Config Deploying device configurations [INFO] Executing initial configuration for node l1 [INFO] Executing initial configuration for node l2 [INFO] Executing initial configuration for node l3 [INFO] Executing initial configuration for node h1 (namespace clab- ml-17-h1) [INFO] Executing initial 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 h1 (namespace clab- ml-17-h1) [INFO] Executing routing configuration for node h2 (namespace clab- ml-17-h2) [INFO] Executing routing configuration for node h3 (namespace clab- ml-17-h3) [INFO] Executing vlan configuration for node l1 [INFO] Executing vlan configuration for node l2 [INFO] Executing vlan configuration for node l3 [INFO] Executing bgp configuration for node l2 [INFO] Executing bgp configuration for node l1 [INFO] Executing ospf configuration for node l3 [INFO] Executing vxlan configuration for node l2 [INFO] Executing vxlan configuration for node l1 [INFO] Executing bgp configuration for node l3 [INFO] Executing evpn configuration for node l2 [INFO] Executing evpn configuration for node l1 [INFO] Executing vxlan configuration for node l3 [INFO] Executing evpn configuration for node l3 [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!\nno ip domain lookup\nlogging buffered 256000\n\n!\nlldp run\n!\nip host h1 172.31.1.5\nip host h2 172.31.1.6\nip host h3 172.31.1.7\nip host l1 10.0.0.2 10.1.0.2\nip host l2 10.0.0.3 10.1.0.5\nip host l3 10.0.0.4 10.1.0.9\n!\nip routing\n!\nno ipv6 unicast-routing\n!\n!\ninterface Loopback0\n ip address 10.0.0.1 255.255.255.255\n!\ninterface GigabitEthernet1\n no lldp transmit\n no lldp receive\n!\ninterface GigabitEthernet2\n description dut -> l1 [external]\n mtu 1600\n ip address 10.1.0.1 255.255.255.252\n no shutdown\n!\ninterface GigabitEthernet3\n description dut -> l2 [external]\n mtu 1600\n ip address 10.1.0.6 255.255.255.252\n no shutdown\n!\ninterface GigabitEthernet4\n description dut -> l3\n mtu 1600\n ip address 10.1.0.10 255.255.255.252\n no shutdown\n!\n!\nline vty 0 4\n exec-timeout 0 0 \n!\nno banner exec\nno banner login\nno banner incoming\n" } TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/ios.yml for dut TASK [ios_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=vlan) 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=vxlan) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut => (item=evpn) TASK [Figure out whether to deploy the module vlan on current device] ********** ok: [dut] TASK [Find configuration template for vlan] ************************************ skipping: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for vlan] ******************** skipping: [dut] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [dut] TASK [Deploy vlan configuration] *********************************************** skipping: [dut] 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=========================================\nrouter ospf 1\n router-id 10.0.0.1\n\n!\ninterface Loopback0\n! \n ip ospf 1 area 0.0.0.0\n!\ninterface GigabitEthernet4\n! dut -> l3\n ip ospf 1 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/ios.yml for dut TASK [ios_config: deploying ospf from /work/netlab_cicd/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!\nip bgp-community new-format\n!\nrouter bgp 65100\n no bgp default ipv4-unicast\n bgp update-delay 5\n bgp nopeerup-delay cold-boot 1\n bgp nopeerup-delay user-initiated 1\n bgp router-id 10.0.0.1\n bgp cluster-id 10.0.0.1\n neighbor 10.0.0.4 remote-as 65100\n neighbor 10.0.0.4 description l3\n neighbor 10.0.0.4 update-source Loopback0\n\n neighbor 10.1.0.2 remote-as 65201\n neighbor 10.1.0.2 description l1\n\n neighbor 10.1.0.5 remote-as 65202\n neighbor 10.1.0.5 description l2\n\n!\n address-family ipv4\n bgp scan-time 5\n!\n!\n! Originate networks from connected subnets\n!\n network 10.0.0.1 mask 255.255.255.255\n\n!\n neighbor 10.0.0.4 activate\n neighbor 10.0.0.4 advertisement-interval 0\n neighbor 10.0.0.4 next-hop-self\n neighbor 10.0.0.4 route-reflector-client\n neighbor 10.0.0.4 send-community both\n\n neighbor 10.1.0.2 activate\n neighbor 10.1.0.2 advertisement-interval 0\n neighbor 10.1.0.2 send-community both\n\n neighbor 10.1.0.5 activate\n neighbor 10.1.0.5 advertisement-interval 0\n neighbor 10.1.0.5 send-community both\n\n!\n" } TASK [Deploy bgp configuration] ************************************************ included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/ios.yml for dut TASK [ios_config: deploying bgp from /work/netlab_cicd/node_files/dut/bgp] ***** changed: [dut] TASK [Figure out whether to deploy the module vxlan on current device] ********* ok: [dut] TASK [Find configuration template for vxlan] *********************************** skipping: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for vxlan] ******************* skipping: [dut] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [dut] TASK [Deploy vxlan configuration] ********************************************** skipping: [dut] TASK [Figure out whether to deploy the module evpn on current device] ********** ok: [dut] TASK [Find configuration template for evpn] ************************************ ok: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for evpn] ******************** ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut] => { "msg": "evpn configuration for dut\n=========================================\n!\nroute-map evpn_nh_unchanged permit 10\n set ip next-hop unchanged\n!\nrouter bgp 65100\n neighbor 10.1.0.2 ebgp-multihop\n neighbor 10.1.0.5 ebgp-multihop\n address-family l2vpn evpn\n neighbor 10.0.0.4 encap vxlan\n neighbor 10.0.0.4 activate\n neighbor 10.0.0.4 send-community both\n neighbor 10.0.0.4 route-reflector-client\n neighbor 10.1.0.2 encap vxlan\n neighbor 10.1.0.2 activate\n neighbor 10.1.0.2 send-community both\n neighbor 10.1.0.5 encap vxlan\n neighbor 10.1.0.5 activate\n neighbor 10.1.0.5 send-community both\n no bgp default route-target filter\n neighbor 10.1.0.2 next-hop-unchanged\n neighbor 10.1.0.2 route-map evpn_nh_unchanged out\n neighbor 10.1.0.5 next-hop-unchanged\n neighbor 10.1.0.5 route-map evpn_nh_unchanged out\n" } TASK [Deploy evpn configuration] *********************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/ios.yml for dut TASK [ios_config: deploying evpn from /work/netlab_cicd/node_files/dut/evpn] *** changed: [dut] PLAY [Deploy custom deployment templates] ************************************** skipping: no hosts matched PLAY RECAP ********************************************************************* dut : ok=40 changed=4 unreachable=0 failed=0 skipped=22 rescued=0 ignored=0 Results of configuration script deployments ================================================================================ l1 Script: initial,vlan,bgp,vxlan,evpn l2 Script: initial,vlan,bgp,vxlan,evpn l3 Script: initial,vlan,ospf,bgp,vxlan,evpn h1 Script: initial,routing h2 Script: initial,routing h3 Script: initial,routing The device under test is an EVPN spine device using EVPN-over-EBGP. It should propagate EVPN AF routes between PE-devices, resulting in VXLAN-based VLAN extension. The test checks whether the spine device changes the BGP next hop on EBGP EVPN AF (it should not). * h1 and h2 should be able to ping each other Please note it might take a while for the lab to work due to STP learning phase