/home/pipi/.local/lib/python3.10/site-packages/paramiko/pkey.py:100: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0. "cipher": algorithms.TripleDES, /home/pipi/.local/lib/python3.10/site-packages/paramiko/transport.py:259: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0. "class": algorithms.TripleDES, [WARNING]: Could not match supplied host pattern, ignoring: unprovisioned [WARNING]: Found variable using reserved name: hosts PLAY [Deploy initial device configuration] ************************************* TASK [Set variables that cannot be set with VARS] ****************************** ok: [dut] ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [Generic readiness tests] ************************************************* skipping: [dut] included: /home/pipi/netlab_gh/netsim/ansible/tasks/readiness-check/ssh.yml for r1, r3, r2, r4 => (item=ssh) TASK [Check if 'sshpass' is installed] ***************************************** ok: [r1 -> localhost] TASK [Check for 'timeout' command] ********************************************* ok: [r1 -> localhost] ok: [r2 -> localhost] ok: [r4 -> localhost] ok: [r3 -> localhost] TASK [Execute local ssh command to check ssh readiness] ************************ FAILED - RETRYING: [r1 -> localhost]: Execute local ssh command to check ssh readiness (20 retries left). FAILED - RETRYING: [r4 -> localhost]: Execute local ssh command to check ssh readiness (20 retries left). ok: [r2 -> localhost] ok: [r3 -> localhost] ok: [r1 -> localhost] ok: [r4 -> localhost] TASK [Confirm r1 SSH server works] ********************************************* ok: [r1] => { "msg": "Node r1 is ready." } ok: [r2] => { "msg": "Node r2 is ready." } ok: [r3] => { "msg": "Node r3 is ready." } ok: [r4] => { "msg": "Node r4 is ready." } TASK [Find device readiness script] ******************************************** ok: [dut] ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [Wait for device to become ready] ***************************************** skipping: [r1] skipping: [r2] skipping: [r3] skipping: [r4] included: /home/pipi/netlab_gh/netsim/ansible/tasks/readiness-check/cumulus_nvue.yml for dut TASK [Wait for nvued to start] ************************************************* ok: [dut] TASK [Normalize config on bridge-like devices] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for r1, r2, r3, r4, dut TASK [Figure out whether to deploy the module normalize on current device] ***** ok: [dut] ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [Find configuration template for normalize] ******************************* ok: [dut] ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [fail] ******************************************************************** skipping: [r1] skipping: [r2] skipping: [r3] skipping: [r4] skipping: [dut] TASK [Find configuration deployment deploy_script for normalize] *************** ok: [r1] ok: [dut] ok: [r2] ok: [r3] ok: [r4] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [dut] ok: [r1] => { "msg": "normalize configuration for r1\n=========================================\n!\ninterface Ethernet1\n shutdown\n" } ok: [r2] => { "msg": "normalize configuration for r2\n=========================================\n!\ninterface Ethernet1\n shutdown\n" } ok: [r3] => { "msg": "normalize configuration for r3\n=========================================\n!\ninterface Ethernet1\n shutdown\n" } ok: [r4] => { "msg": "normalize configuration for r4\n=========================================\n!\ninterface Ethernet1\n shutdown\n" } TASK [Deploy normalize configuration] ****************************************** skipping: [dut] included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for r1, r2, r3, r4 TASK [eos_config: deploying normalize from /home/pipi/netlab_gh/netsim/ansible/templates/normalize/eos.j2] *** [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: [r2] changed: [r3] changed: [r4] changed: [r1] TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for r1, r2, r3, r4, dut TASK [Figure out whether to deploy the module initial on current device] ******* ok: [dut] ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [Find configuration template for initial] ********************************* ok: [dut] ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [fail] ******************************************************************** skipping: [r1] skipping: [r2] skipping: [r3] skipping: [r4] skipping: [dut] TASK [Find configuration deployment deploy_script for initial] ***************** ok: [dut] ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut] => { "msg": "initial configuration for dut\n=========================================\n\n- set:\n system:\n hostname: dut\n global:\n system-mac: ca:fe:00:01:00:00\n config:\n snippet:\n system-mtu:\n file: /etc/network/ifupdown2/policy.d/mtu.json\n content: |\n { \"address\": { \"defaults\": { \"mtu\": \"1500\" } } }\n\n interface:\n eth0:\n ip:\n vrf: mgmt\n address:\n dhcp: {}\n type: eth\n swp1:\n type: swp\n link:\n state:\n up : {}\n description: \"dut -> r1 [external]\"\n ip:\n address:\n 10.1.0.1/30: {}\n ipv6:\n enable: off\n\n swp2:\n type: swp\n link:\n state:\n up : {}\n description: \"dut -> r2 [external]\"\n ip:\n address:\n 10.1.0.5/30: {}\n ipv6:\n enable: off\n\n swp3:\n type: swp\n link:\n state:\n up : {}\n description: \"dut -> r3 [external]\"\n ip:\n address:\n 10.1.0.9/30: {}\n ipv6:\n enable: off\n\n swp4:\n type: swp\n link:\n state:\n up : {}\n description: \"dut -> r4 [external]\"\n ip:\n address:\n 10.1.0.13/30: {}\n ipv6:\n enable: off\n\n\n- set:\n interface:\n lo:\n type: loopback\n ip:\n address:\n 10.0.0.1/32: {}\n 2001:db8:1:1::1/64: {}\n" } ok: [r1] => { "msg": "initial configuration for r1\n=========================================\nhostname r1\n!\nlogging monitor debugging\naaa authorization exec default local\n!\nlldp run\nip routing\nipv6 unicast-routing\n!\n!\nip host dut 10.0.0.1\nip host dut-red 10.1.0.1 10.1.0.5\nip host dut-blue 10.1.0.9 10.1.0.13\nip host r2 10.0.0.12 10.1.0.6\nip host r3 10.0.0.23 10.1.0.10\nip host r4 10.0.0.24 10.1.0.14\nipv6 host dut 2001:db8:1:1::1\nipv6 host r2 2001:db8:1:c::1\nipv6 host r3 2001:db8:1:17::1\nipv6 host r4 2001:db8:1:18::1\n!\ninterface Management0\n no lldp transmit\n no lldp receive\n!\ninterface Loopback0\n ip address 10.0.0.11/32\n ipv6 nd ra interval 5\n ipv6 address 2001:db8:1:b::1/64\n!\ninterface Ethernet1\n no switchport\n platform tfa phy control-frame disabled\n description r1 -> dut [external]\n ip address 10.1.0.2/30\n mac-address caf0.000b.0001\n!\n no shutdown\n!\n" } ok: [r2] => { "msg": "initial configuration for r2\n=========================================\nhostname r2\n!\nlogging monitor debugging\naaa authorization exec default local\n!\nlldp run\nip routing\nipv6 unicast-routing\n!\n!\nip host dut 10.0.0.1\nip host dut-red 10.1.0.1 10.1.0.5\nip host dut-blue 10.1.0.9 10.1.0.13\nip host r1 10.0.0.11 10.1.0.2\nip host r3 10.0.0.23 10.1.0.10\nip host r4 10.0.0.24 10.1.0.14\nipv6 host dut 2001:db8:1:1::1\nipv6 host r1 2001:db8:1:b::1\nipv6 host r3 2001:db8:1:17::1\nipv6 host r4 2001:db8:1:18::1\n!\ninterface Management0\n no lldp transmit\n no lldp receive\n!\ninterface Loopback0\n ip address 10.0.0.12/32\n ipv6 nd ra interval 5\n ipv6 address 2001:db8:1:c::1/64\n!\ninterface Ethernet1\n no switchport\n platform tfa phy control-frame disabled\n description r2 -> dut [external]\n ip address 10.1.0.6/30\n mac-address caf0.000c.0001\n!\n no shutdown\n!\n" } ok: [r3] => { "msg": "initial configuration for r3\n=========================================\nhostname r3\n!\nlogging monitor debugging\naaa authorization exec default local\n!\nlldp run\nip routing\nipv6 unicast-routing\n!\n!\nip host dut 10.0.0.1\nip host dut-red 10.1.0.1 10.1.0.5\nip host dut-blue 10.1.0.9 10.1.0.13\nip host r1 10.0.0.11 10.1.0.2\nip host r2 10.0.0.12 10.1.0.6\nip host r4 10.0.0.24 10.1.0.14\nipv6 host dut 2001:db8:1:1::1\nipv6 host r1 2001:db8:1:b::1\nipv6 host r2 2001:db8:1:c::1\nipv6 host r4 2001:db8:1:18::1\n!\ninterface Management0\n no lldp transmit\n no lldp receive\n!\ninterface Loopback0\n ip address 10.0.0.23/32\n ipv6 nd ra interval 5\n ipv6 address 2001:db8:1:17::1/64\n!\ninterface Ethernet1\n no switchport\n platform tfa phy control-frame disabled\n description r3 -> dut [external]\n ip address 10.1.0.10/30\n mac-address caf0.0017.0001\n!\n no shutdown\n!\n" } ok: [r4] => { "msg": "initial configuration for r4\n=========================================\nhostname r4\n!\nlogging monitor debugging\naaa authorization exec default local\n!\nlldp run\nip routing\nipv6 unicast-routing\n!\n!\nip host dut 10.0.0.1\nip host dut-red 10.1.0.1 10.1.0.5\nip host dut-blue 10.1.0.9 10.1.0.13\nip host r1 10.0.0.11 10.1.0.2\nip host r2 10.0.0.12 10.1.0.6\nip host r3 10.0.0.23 10.1.0.10\nipv6 host dut 2001:db8:1:1::1\nipv6 host r1 2001:db8:1:b::1\nipv6 host r2 2001:db8:1:c::1\nipv6 host r3 2001:db8:1:17::1\n!\ninterface Management0\n no lldp transmit\n no lldp receive\n!\ninterface Loopback0\n ip address 10.0.0.24/32\n ipv6 nd ra interval 5\n ipv6 address 2001:db8:1:18::1/64\n!\ninterface Ethernet1\n no switchport\n platform tfa phy control-frame disabled\n description r4 -> dut [external]\n ip address 10.1.0.14/30\n mac-address caf0.0018.0001\n!\n no shutdown\n!\n" } TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for r1, r2, r3, r4 included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/cumulus_nvue.yml for dut TASK [eos_config: deploying initial from /home/pipi/netlab_gh/netsim/ansible/templates/initial/eos.j2] *** changed: [r3] changed: [r4] changed: [r1] changed: [r2] TASK [set_fact] **************************************************************** ok: [dut] TASK [copy the cumulus nvue YAML initial config file to switch (generated from /home/pipi/netlab_gh/netsim/ansible/templates/initial/cumulus_nvue.j2)] *** changed: [dut] TASK [execute on cumulus: 'nv config patch' for initial config] **************** changed: [dut] TASK [execute on cumulus: 'nv config apply -y' for initial config] ************* changed: [dut] PLAY [Deploy module-specific configurations] *********************************** TASK [Set variables that cannot be set with VARS] ****************************** ok: [dut] ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [Deploy individual configuration modules] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for r1, r2, r3, r4, dut => (item=bgp) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for r1, r2, r3, r4, dut => (item=vrf) TASK [Figure out whether to deploy the module bgp on current device] *********** ok: [dut] ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [Find configuration template for bgp] ************************************* ok: [dut] ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [fail] ******************************************************************** skipping: [r1] skipping: [r2] skipping: [r3] skipping: [r4] skipping: [dut] TASK [Find configuration deployment deploy_script for bgp] ********************* ok: [dut] ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [Print deployed configuration when running in verbose mode] *************** ok: [r1] => { "msg": "bgp configuration for r1\n=========================================\n!\n!\nrouter bgp 65101\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.11\n!\n neighbor 10.1.0.1 remote-as 65000\n neighbor 10.1.0.1 description dut\n neighbor 10.1.0.1 send-community standard large \n!\n!\n address-family ipv4\n\n!\n!\n! Originate networks from connected subnets\n!\n network 10.0.0.11/32\n!\n!\n neighbor 10.1.0.1 activate\n neighbor 10.1.0.1 next-hop-self\n!\n address-family ipv6\n\n!\n!\n! Originate networks from connected subnets\n!\n network 2001:db8:1:b::/64\n!\n!\n!\n" } ok: [r2] => { "msg": "bgp configuration for r2\n=========================================\n!\n!\nrouter bgp 65102\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.12\n!\n neighbor 10.1.0.5 remote-as 65000\n neighbor 10.1.0.5 description dut\n neighbor 10.1.0.5 send-community standard large \n!\n!\n address-family ipv4\n\n!\n!\n! Originate networks from connected subnets\n!\n network 10.0.0.12/32\n!\n!\n neighbor 10.1.0.5 activate\n neighbor 10.1.0.5 next-hop-self\n!\n address-family ipv6\n\n!\n!\n! Originate networks from connected subnets\n!\n network 2001:db8:1:c::/64\n!\n!\n!\n" } ok: [dut] => { "msg": "bgp configuration for dut\n=========================================\n- set:\n router:\n bgp:\n enable: on\n autonomous-system: 65000\n router-id: 10.0.0.1\n- set:\n vrf:\n default:\n router:\n bgp:\n enable: on\n autonomous-system: 65000\n router-id: 10.0.0.1\n address-family:\n ipv4-unicast:\n enable: on\n network:\n 10.0.0.1/32: {}\n ipv6-unicast:\n enable: on\n network:\n 2001:db8:1:1::/64: {}\n" } ok: [r3] => { "msg": "bgp configuration for r3\n=========================================\n!\n!\nrouter bgp 65103\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.23\n!\n neighbor 10.1.0.9 remote-as 65000\n neighbor 10.1.0.9 description dut\n neighbor 10.1.0.9 send-community standard large \n!\n!\n address-family ipv4\n\n!\n!\n! Originate networks from connected subnets\n!\n network 10.0.0.23/32\n!\n!\n neighbor 10.1.0.9 activate\n neighbor 10.1.0.9 next-hop-self\n!\n address-family ipv6\n\n!\n!\n! Originate networks from connected subnets\n!\n network 2001:db8:1:17::/64\n!\n!\n!\n" } ok: [r4] => { "msg": "bgp configuration for r4\n=========================================\n!\n!\nrouter bgp 65104\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.24\n!\n neighbor 10.1.0.13 remote-as 65000\n neighbor 10.1.0.13 description dut\n neighbor 10.1.0.13 send-community standard large \n!\n!\n address-family ipv4\n\n!\n!\n! Originate networks from connected subnets\n!\n network 10.0.0.24/32\n!\n!\n neighbor 10.1.0.13 activate\n neighbor 10.1.0.13 next-hop-self\n!\n address-family ipv6\n\n!\n!\n! Originate networks from connected subnets\n!\n network 2001:db8:1:18::/64\n!\n!\n!\n" } TASK [Deploy bgp configuration] ************************************************ included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for r1, r2, r3, r4 included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/cumulus_nvue.yml for dut TASK [eos_config: deploying bgp from /home/pipi/netlab_gh/netsim/ansible/templates/bgp/eos.j2] *** changed: [r3] changed: [r4] changed: [r1] changed: [r2] TASK [set_fact] **************************************************************** ok: [dut] TASK [copy the cumulus nvue YAML bgp config file to switch (generated from /home/pipi/netlab_gh/netsim/ansible/templates/bgp/cumulus_nvue.j2)] *** changed: [dut] TASK [execute on cumulus: 'nv config patch' for bgp config] ******************** changed: [dut] TASK [execute on cumulus: 'nv config apply -y' for bgp config] ***************** changed: [dut] TASK [Figure out whether to deploy the module vrf on current device] *********** ok: [dut] ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [Find configuration template for vrf] ************************************* skipping: [r1] skipping: [r2] skipping: [r3] skipping: [r4] ok: [dut] TASK [fail] ******************************************************************** skipping: [r1] skipping: [r2] skipping: [r3] skipping: [r4] skipping: [dut] TASK [Find configuration deployment deploy_script for vrf] ********************* skipping: [r1] skipping: [r2] skipping: [r3] skipping: [r4] ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [r1] skipping: [r2] skipping: [r3] skipping: [r4] ok: [dut] => { "msg": "vrf configuration for dut\n=========================================\n---\n- set:\n vrf:\n red:\n table: auto\n blue:\n table: auto\n\n\n- set:\n vrf:\n red:\n router:\n bgp:\n enable: on\n autonomous-system: 65000\n router-id: 10.0.0.1\n rd: 65000:1\n address-family:\n ipv4-unicast:\n enable: on\n redistribute:\n connected:\n enable: on\n\n neighbor:\n 10.1.0.2:\n description: \"r1\"\n remote-as: 65101\n address-family:\n ipv4-unicast:\n enable: on\n 10.1.0.6:\n description: \"r2\"\n remote-as: 65102\n address-family:\n ipv4-unicast:\n enable: on\n\n- set:\n vrf:\n blue:\n router:\n bgp:\n enable: on\n autonomous-system: 65000\n router-id: 10.0.0.1\n rd: 65000:2\n address-family:\n ipv4-unicast:\n enable: on\n redistribute:\n connected:\n enable: on\n\n neighbor:\n 10.1.0.10:\n description: \"r3\"\n remote-as: 65103\n address-family:\n ipv4-unicast:\n enable: on\n 10.1.0.14:\n description: \"r4\"\n remote-as: 65104\n address-family:\n ipv4-unicast:\n enable: on\n\n\n\n- set:\n interface:\n swp1:\n ip:\n vrf: red\n- set:\n interface:\n swp2:\n ip:\n vrf: red\n- set:\n interface:\n swp3:\n ip:\n vrf: blue\n- set:\n interface:\n swp4:\n ip:\n vrf: blue\n" } TASK [Deploy vrf configuration] ************************************************ skipping: [r1] skipping: [r2] skipping: [r3] skipping: [r4] included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/cumulus_nvue.yml for dut TASK [set_fact] **************************************************************** ok: [dut] TASK [copy the cumulus nvue YAML vrf config file to switch (generated from /home/pipi/netlab_gh/netsim/ansible/templates/vrf/cumulus_nvue.j2)] *** changed: [dut] TASK [execute on cumulus: 'nv config patch' for vrf config] ******************** changed: [dut] TASK [execute on cumulus: 'nv config apply -y' for vrf config] ***************** changed: [dut] PLAY [Deploy custom deployment templates] ************************************** TASK [Run custom configuration deployment scripts] ***************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-custom-config.yml for r1, r2, r3, r4 => (item=bgp-xact) TASK [Find configuration template] ********************************************* ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [fail] ******************************************************************** skipping: [r1] skipping: [r2] skipping: [r3] skipping: [r4] TASK [Check is the configuration template is a file] *************************** ok: [r2 -> localhost] ok: [r3 -> localhost] ok: [r4 -> localhost] ok: [r1 -> localhost] TASK [fail] ******************************************************************** skipping: [r1] skipping: [r2] skipping: [r3] skipping: [r4] TASK [Process template /home/pipi/net101/tools/tests/integration/vrf/bgp-xact.j2 for r1] *** skipping: [r1] skipping: [r2] skipping: [r3] skipping: [r4] TASK [Find custom configuration deployment script] ***************************** ok: [r1] ok: [r2] ok: [r3] ok: [r4] TASK [Run the configuration deployment script] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for r1, r2, r3, r4 TASK [eos_config: deploying bgp-xact from /home/pipi/net101/tools/tests/integration/vrf/bgp-xact.j2] *** changed: [r1] changed: [r2] changed: [r3] changed: [r4] PLAY RECAP ********************************************************************* dut : ok=39 changed=9 unreachable=0 failed=0 skipped=7 rescued=0 ignored=0 r1 : ok=37 changed=4 unreachable=0 failed=0 skipped=12 rescued=0 ignored=0 r2 : ok=36 changed=4 unreachable=0 failed=0 skipped=12 rescued=0 ignored=0 r3 : ok=36 changed=4 unreachable=0 failed=0 skipped=12 rescued=0 ignored=0 r4 : ok=36 changed=4 unreachable=0 failed=0 skipped=12 rescued=0 ignored=0 The device under test has two VRFs with two interfaces in each VRF. Routers are attached to those interfaces and run BGP with device under test. Assuming the multi-vrf test case succeeded, this one adds BGP 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 The test also checks whether DUT unnecessarily enables IPv6 AF over IPv4 EBGP sessions