[INFO] Creating configuration snippets [CREATED] x1: normalize,initial,vlan,stp [CREATED] h1: initial,routing [CREATED] h2: initial,routing [CREATED] h3: initial,routing [CREATED] h4: initial,routing [CREATED] dut: normalize,initial,vlan,stp [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 initial configuration for node h4 (namespace clab- ml-17-h4) [INFO] Executing routing configuration for node h2 (namespace clab- ml-17-h2) [INFO] Executing routing configuration for node h1 (namespace clab- ml-17-h1) [INFO] Executing routing configuration for node h3 (namespace clab- ml-17-h3) [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: [x1] ok: [dut] TASK [Generic readiness tests] ************************************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/readiness-check/ssh.yml for x1, dut => (item=ssh) TASK [Check if 'sshpass' is installed] ***************************************** ok: [x1 -> localhost] TASK [Check for 'timeout' command] ********************************************* ok: [dut -> localhost] ok: [x1 -> localhost] TASK [Execute local ssh command to check ssh readiness] ************************ FAILED - RETRYING: [dut -> localhost]: Execute local ssh command to check ssh readiness (20 retries left). FAILED - RETRYING: [x1 -> localhost]: Execute local ssh command to check ssh readiness (20 retries left). ok: [dut -> localhost] ok: [x1 -> localhost] TASK [Confirm x1 SSH server works] ********************************************* ok: [x1] => { "msg": "Node x1 is ready." } ok: [dut] => { "msg": "Node dut is ready." } TASK [Find device readiness script] ******************************************** ok: [x1] ok: [dut] TASK [Wait for device to become ready] ***************************************** skipping: [x1] skipping: [dut] TASK [Normalize config on bridge-like devices] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for x1, dut TASK [Figure out whether to deploy the module normalize on current device] ***** ok: [x1] ok: [dut] TASK [Find configuration template for normalize] ******************************* ok: [x1] ok: [dut] TASK [fail] ******************************************************************** skipping: [x1] skipping: [dut] TASK [Find configuration deployment deploy_script for normalize] *************** ok: [x1] ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** ok: [x1] => { "msg": "normalize configuration for x1\n=========================================\n!\ninterface Ethernet1\n shutdown\n" } ok: [dut] => { "msg": "normalize configuration for dut\n=========================================\n!\ninterface Ethernet1\n shutdown\n!\ninterface Ethernet2\n shutdown\n!\ninterface Ethernet3\n shutdown\n!\ninterface Ethernet4\n shutdown\n!\ninterface Ethernet5\n shutdown\n" } TASK [Deploy normalize configuration] ****************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for x1, dut TASK [eos_config: deploying normalize from /work/netlab_cicd/node_files/x1/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: [x1] changed: [dut] TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for x1, dut TASK [Figure out whether to deploy the module initial on current device] ******* ok: [x1] ok: [dut] TASK [Find configuration template for initial] ********************************* ok: [x1] ok: [dut] TASK [fail] ******************************************************************** skipping: [x1] skipping: [dut] TASK [Find configuration deployment deploy_script for initial] ***************** ok: [x1] ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** ok: [x1] => { "msg": "initial configuration for x1\n=========================================\nhostname x1\n!\nlogging monitor debugging\naaa authorization exec default local\n!\nlldp run\nip routing\nno ipv6 unicast-routing\n!\n!\nip host dut 10.0.0.6\nip host h1 172.16.0.2\nip host h2 172.16.0.3\nip host h3 172.16.0.4\nip host h4 172.16.2.5\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 description x1 -> dut\n mac-address caf0.0001.0001\n!\n no shutdown\n!\ninterface Vlan1001\n description VLAN blue (1001) -> [dut]\n!\ninterface Vlan1000\n description VLAN red (1000) -> [h1,h2,h3,dut]\n!\n" } ok: [dut] => { "msg": "initial configuration for dut\n=========================================\nhostname dut\n!\nlogging monitor debugging\naaa authorization exec default local\n!\nlldp run\nip routing\nno ipv6 unicast-routing\n!\n!\nip host h1 172.16.0.2\nip host h2 172.16.0.3\nip host h3 172.16.0.4\nip host h4 172.16.2.5\nip host x1 10.0.0.1\n!\ninterface Management0\n no lldp transmit\n no lldp receive\n!\ninterface Loopback0\n ip address 10.0.0.6/32\n!\ninterface Ethernet1\n no switchport\n description dut -> x1\n mac-address caf0.0006.0001\n!\n no shutdown\n!\ninterface Ethernet2\n no switchport\n description [Access VLAN red] dut -> h1\n!\n no shutdown\n!\ninterface Ethernet3\n no switchport\n description [Access VLAN red] dut -> h2\n!\n no shutdown\n!\ninterface Ethernet4\n no switchport\n description [Access VLAN red] dut -> h3\n!\n no shutdown\n!\ninterface Ethernet5\n no switchport\n description [Access VLAN green] dut -> h4\n!\n no shutdown\n!\ninterface Vlan1000\n description VLAN red (1000) -> [x1,h1,h2,h3]\n!\ninterface Vlan1002\n description VLAN green (1002) -> [h4] [stub]\n!\ninterface Vlan1001\n description VLAN blue (1001) -> [x1]\n!\n" } TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for x1, dut TASK [eos_config: deploying initial from /work/netlab_cicd/node_files/x1/initial] *** changed: [x1] changed: [dut] PLAY [Deploy module-specific configurations] *********************************** TASK [Set variables that cannot be set with VARS] ****************************** ok: [x1] ok: [dut] TASK [Deploy individual configuration modules] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for x1, dut => (item=vlan) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for x1, dut => (item=stp) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for x1, dut => (item=routing) TASK [Figure out whether to deploy the module vlan on current device] ********** ok: [x1] ok: [dut] TASK [Find configuration template for vlan] ************************************ ok: [x1] ok: [dut] TASK [fail] ******************************************************************** skipping: [x1] skipping: [dut] TASK [Find configuration deployment deploy_script for vlan] ******************** ok: [x1] ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** ok: [x1] => { "msg": "vlan configuration for x1\n=========================================\nvlan 1001\n name blue\n!\nvlan 1000\n name red\n!\n\n!\ninterface Ethernet1\n switchport\n switchport mode trunk\n switchport trunk allowed vlan 1000,1001\n switchport trunk native vlan tag\n!\ninterface Vlan1001\n!\ninterface Vlan1000\n" } ok: [dut] => { "msg": "vlan configuration for dut\n=========================================\nvlan 1000\n name red\n!\nvlan 1002\n name green\n!\nvlan 1001\n name blue\n!\n\n!\ninterface Ethernet1\n switchport\n switchport mode trunk\n switchport trunk allowed vlan 1000,1001\n switchport trunk native vlan tag\n!\ninterface Ethernet2\n switchport\n switchport access vlan 1000\n!\ninterface Ethernet3\n switchport\n switchport access vlan 1000\n!\ninterface Ethernet4\n switchport\n switchport access vlan 1000\n!\ninterface Ethernet5\n switchport\n switchport access vlan 1002\n!\ninterface Vlan1000\n!\ninterface Vlan1002\n!\ninterface Vlan1001\n" } TASK [Deploy vlan configuration] *********************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for x1, dut TASK [eos_config: deploying vlan from /work/netlab_cicd/node_files/x1/vlan] **** changed: [x1] changed: [dut] TASK [Figure out whether to deploy the module stp on current device] *********** ok: [x1] ok: [dut] TASK [Find configuration template for stp] ************************************* ok: [x1] ok: [dut] TASK [fail] ******************************************************************** skipping: [x1] skipping: [dut] TASK [Find configuration deployment deploy_script for stp] ********************* ok: [x1] ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** ok: [x1] => { "msg": "stp configuration for x1\n=========================================\nspanning-tree mode rstp \n\n\n\n\ninterface Ethernet1\n \n spanning-tree portfast network\n" } ok: [dut] => { "msg": "stp configuration for dut\n=========================================\nspanning-tree mode rstp \n\n\n\n\ninterface Ethernet1\n \n spanning-tree portfast network\ninterface Ethernet2\n \n spanning-tree portfast edge\ninterface Ethernet3\n \n spanning-tree portfast edge\ninterface Ethernet4\n \n spanning-tree portfast auto\ninterface Ethernet5\n \n spanning-tree portfast normal\n" } TASK [Deploy stp configuration] ************************************************ included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for x1, dut TASK [eos_config: deploying stp from /work/netlab_cicd/node_files/x1/stp] ****** changed: [x1] changed: [dut] TASK [Figure out whether to deploy the module routing on current device] ******* ok: [x1] ok: [dut] TASK [Find configuration template for routing] ********************************* skipping: [x1] skipping: [dut] TASK [fail] ******************************************************************** skipping: [x1] skipping: [dut] TASK [Find configuration deployment deploy_script for routing] ***************** skipping: [x1] skipping: [dut] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [x1] skipping: [dut] TASK [Deploy routing configuration] ******************************************** skipping: [x1] skipping: [dut] PLAY [Deploy custom deployment templates] ************************************** skipping: no hosts matched PLAY RECAP ********************************************************************* dut : ok=37 changed=4 unreachable=0 failed=0 skipped=10 rescued=0 ignored=0 x1 : ok=38 changed=4 unreachable=0 failed=0 skipped=10 rescued=0 ignored=0 Results of configuration script deployments ================================================================================ h1 OK: 2 h2 OK: 2 h3 OK: 2 h4 OK: 2 This is a config-only test that uses all possible STP port types. It's a bit hard to validate whether a particular port type is configured ;), the only check we can do is for edge ports.