[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: [s1] ok: [h1] ok: [h2] ok: [h3] ok: [h4] ok: [s2] TASK [Find device readiness script] ******************************************** ok: [s1] ok: [h1] ok: [h2] ok: [h3] ok: [h4] ok: [s2] TASK [Wait for device to become ready] ***************************************** skipping: [s1] skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] included: /home/pipi/netlab_gh/netsim/ansible/tasks/readiness-check/eos-clab.yml for s2 TASK [Wait for cEOS SSH daemon to start] *************************************** ok: [s2] TASK [Normalize config on bridge-like devices] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for s1, s2, h1, h2, h3, h4 TASK [Figure out whether to deploy the module normalize on current device] ***** ok: [s1] ok: [h1] ok: [h3] ok: [h2] ok: [h4] ok: [s2] TASK [Find configuration template for normalize] ******************************* ok: [s1] ok: [h1] ok: [h2] ok: [h3] ok: [h4] ok: [s2] TASK [fail] ******************************************************************** skipping: [s1] skipping: [s2] skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] TASK [Find configuration deployment deploy_script for normalize] *************** ok: [s1] ok: [h1] ok: [h2] ok: [h4] ok: [h3] ok: [s2] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [s1] skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] ok: [s2] => msg: |- normalize configuration for s2 ========================================= ! interface Ethernet1 shutdown mac-address 52dc.cafe.0601 ! interface Ethernet2 shutdown mac-address 52dc.cafe.0602 ! interface Ethernet3 shutdown mac-address 52dc.cafe.0603 TASK [Deploy normalize configuration] ****************************************** skipping: [s1] skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for s2 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: [s2] TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for s1, s2, h1, h2, h3, h4 TASK [Figure out whether to deploy the module initial on current device] ******* ok: [s1] ok: [h1] ok: [h2] ok: [h3] ok: [h4] ok: [s2] TASK [Find configuration template for initial] ********************************* ok: [s1] ok: [h1] ok: [h3] ok: [h2] ok: [h4] ok: [s2] TASK [fail] ******************************************************************** skipping: [s1] skipping: [s2] skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] TASK [Find configuration deployment deploy_script for initial] ***************** ok: [s1] ok: [h1] ok: [h3] ok: [h4] ok: [h2] ok: [s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [s1] => msg: |- initial configuration for s1 ========================================= set -x #!/bin/bash # # This script contains the 'ip' commands needed to set up container # interfaces and route table. It's executed within the container # network namespace on the container host. # # /etc/hosts file is generated as a clab bind. # set -e ### One-Shot configuration (non-Ubuntu VM or container) # # Send ARP requests from a sane source IP address sysctl -w net.ipv4.conf.all.arp_announce=2 # # Disable IPv4 and IPv6 forwarding # sysctl -w net.ipv4.ip_forward=1 sysctl -w net.ipv6.conf.all.forwarding=1 set +e ip addr del 10.0.0.5/32 dev lo 2>/dev/null set -e ip addr add 10.0.0.5/32 dev lo sysctl -w net.ipv6.conf.lo.disable_ipv6=1 # # Interface addressing, create any bond devices # ip link set dev eth1 up sysctl -w net.ipv6.conf.eth1.disable_ipv6=1 ip link set dev eth1 mtu 1500 ip link set dev eth2 up sysctl -w net.ipv6.conf.eth2.disable_ipv6=1 ip link set dev eth2 mtu 1500 ip link set dev eth3 up sysctl -w net.ipv6.conf.eth3.disable_ipv6=1 ip link set dev eth3 mtu 1500 # set -e ok: [h1] => msg: |- initial configuration for h1 ========================================= #!/bin/bash # # This script contains the 'ip' commands needed to set up container # interfaces and route table. It's executed within the container # network namespace on the container host. # # /etc/hosts file is generated as a clab bind. # set -e ### One-Shot configuration (non-Ubuntu VM or container) # # Send ARP requests from a sane source IP address sysctl -w net.ipv4.conf.all.arp_announce=2 # # Disable IPv4 and IPv6 forwarding # sysctl -w net.ipv4.ip_forward=0 sysctl -w net.ipv6.conf.all.forwarding=0 # # Interface addressing, create any bond devices # ip link set dev eth1 up set +e ip addr del 172.16.0.1/24 dev eth1 2>/dev/null set -e ip addr add 172.16.0.1/24 dev eth1 sysctl -w net.ipv6.conf.eth1.disable_ipv6=1 ip link set dev eth1 mtu 1500 ok: [h3] => msg: |- initial configuration for h3 ========================================= #!/bin/bash # # This script contains the 'ip' commands needed to set up container # interfaces and route table. It's executed within the container # network namespace on the container host. # # /etc/hosts file is generated as a clab bind. # set -e ### One-Shot configuration (non-Ubuntu VM or container) # # Send ARP requests from a sane source IP address sysctl -w net.ipv4.conf.all.arp_announce=2 # # Disable IPv4 and IPv6 forwarding # sysctl -w net.ipv4.ip_forward=0 sysctl -w net.ipv6.conf.all.forwarding=0 # # Interface addressing, create any bond devices # ip link set dev eth1 up set +e ip addr del 172.16.1.3/24 dev eth1 2>/dev/null set -e ip addr add 172.16.1.3/24 dev eth1 sysctl -w net.ipv6.conf.eth1.disable_ipv6=1 ip link set dev eth1 mtu 1500 ok: [h2] => msg: |- initial configuration for h2 ========================================= #!/bin/bash # # This script contains the 'ip' commands needed to set up container # interfaces and route table. It's executed within the container # network namespace on the container host. # # /etc/hosts file is generated as a clab bind. # set -e ### One-Shot configuration (non-Ubuntu VM or container) # # Send ARP requests from a sane source IP address sysctl -w net.ipv4.conf.all.arp_announce=2 # # Disable IPv4 and IPv6 forwarding # sysctl -w net.ipv4.ip_forward=0 sysctl -w net.ipv6.conf.all.forwarding=0 # # Interface addressing, create any bond devices # ip link set dev eth1 up set +e ip addr del 172.16.0.2/24 dev eth1 2>/dev/null set -e ip addr add 172.16.0.2/24 dev eth1 sysctl -w net.ipv6.conf.eth1.disable_ipv6=1 ip link set dev eth1 mtu 1500 ok: [h4] => msg: |- initial configuration for h4 ========================================= #!/bin/bash # # This script contains the 'ip' commands needed to set up container # interfaces and route table. It's executed within the container # network namespace on the container host. # # /etc/hosts file is generated as a clab bind. # set -e ### One-Shot configuration (non-Ubuntu VM or container) # # Send ARP requests from a sane source IP address sysctl -w net.ipv4.conf.all.arp_announce=2 # # Disable IPv4 and IPv6 forwarding # sysctl -w net.ipv4.ip_forward=0 sysctl -w net.ipv6.conf.all.forwarding=0 # # Interface addressing, create any bond devices # ip link set dev eth1 up set +e ip addr del 172.16.1.4/24 dev eth1 2>/dev/null set -e ip addr add 172.16.1.4/24 dev eth1 sysctl -w net.ipv6.conf.eth1.disable_ipv6=1 ip link set dev eth1 mtu 1500 ok: [s2] => msg: |- initial configuration for s2 ========================================= hostname s2 ! logging monitor debugging aaa authorization exec default local ! lldp run ip routing no ipv6 unicast-routing ! ! ip host h1 172.16.0.1 ip host h2 172.16.0.2 ip host h3 172.16.1.3 ip host h4 172.16.1.4 ip host s1 10.0.0.5 172.16.0.5 172.16.1.5 ! interface Management0 no lldp transmit no lldp receive ! interface Loopback0 ip address 10.0.0.6/32 ! interface Ethernet1 no switchport description s2 -> s1 ! mac-address 52dc.cafe.0601 no shutdown ! interface Ethernet2 no switchport description [Access VLAN red] s2 -> h2 ! mac-address 52dc.cafe.0602 no shutdown ! interface Ethernet3 no switchport description [Access VLAN blue] s2 -> h4 ! mac-address 52dc.cafe.0603 no shutdown ! interface Vlan700 description VLAN red (700) -> [h1,s1,h2] ! interface Vlan701 description VLAN blue (701) -> [h3,s1,h4] ! TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/linux-clab.yml for s1, h1, h2, h3, h4 included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for s2 TASK [Define script filename and determine whether to execute in netns] ******** ok: [s1] ok: [h1] ok: [h2] ok: [h3] ok: [h4] TASK [Create a temporary file for the rendered script] ************************* changed: [h4 -> localhost] changed: [s1 -> localhost] changed: [h2 -> localhost] changed: [h3 -> localhost] changed: [h1 -> localhost] TASK [Create container setup script from /home/pipi/netlab_gh/netsim/ansible/templates/initial/bird-clab.j2] *** changed: [h4 -> localhost] changed: [h1 -> localhost] changed: [h3 -> localhost] changed: [h2 -> localhost] changed: [s1 -> localhost] TASK [Copy script into running container at /tmp/config-s1_initial.sh] ********* skipping: [s1] skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] TASK [Execute /tmp/config-s1_initial.sh to deploy initial config based on /home/pipi/netlab_gh/netsim/ansible/templates/initial/bird-clab.j2] *** skipping: [s1] skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] TASK [Container configuration for initial based on /home/pipi/netlab_gh/netsim/ansible/templates/initial/bird-clab.j2 executed in netns] *** changed: [h3 -> localhost] changed: [h2 -> localhost] changed: [h1 -> localhost] changed: [s1 -> localhost] changed: [h4 -> localhost] TASK [Remove temporary file /tmp/s1_initial-_b85van7.sh] *********************** changed: [h2 -> localhost] changed: [s1 -> localhost] changed: [h1 -> localhost] changed: [h4 -> localhost] changed: [h3 -> localhost] TASK [eos_config: deploying initial from /home/pipi/netlab_gh/netsim/ansible/templates/initial/eos.j2] *** changed: [s2] PLAY [Deploy module-specific configurations] *********************************** TASK [Set variables that cannot be set with VARS] ****************************** ok: [h1] ok: [h2] ok: [h3] ok: [h4] ok: [s1] ok: [s2] TASK [Deploy individual configuration modules] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for h1, h2, h3, h4, s1, s2 => (item=vlan) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for h1, h2, h3, h4, s1, s2 => (item=routing) TASK [Figure out whether to deploy the module vlan on current device] ********** ok: [h1] ok: [h2] ok: [h3] ok: [h4] ok: [s1] ok: [s2] TASK [Find configuration template for vlan] ************************************ skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] ok: [s1] ok: [s2] TASK [fail] ******************************************************************** skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] skipping: [s1] skipping: [s2] TASK [Find configuration deployment deploy_script for vlan] ******************** skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] ok: [s1] ok: [s2] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] ok: [s1] => msg: |- vlan configuration for s1 ========================================= #!/bin/bash # set -e # Exit immediately when any command fails # if [ ! -e /sys/devices/virtual/net/eth1.701 ]; then ip link add link eth1 name eth1.701 type vlan id 701 ip link set dev eth1.701 up fi if [ ! -e /sys/devices/virtual/net/eth1.700 ]; then ip link add link eth1 name eth1.700 type vlan id 700 ip link set dev eth1.700 up fi if [ ! -e /sys/devices/virtual/net/vlan700 ]; then ip link add vlan700 type bridge ip link set dev vlan700 address 52:dc:ca:fd:05:00 ip link set dev vlan700 mtu 1500 ip addr flush dev vlan700 ip addr add 172.16.0.5/24 dev vlan700 fi if [ ! -e /sys/devices/virtual/net/vlan701 ]; then ip link add vlan701 type bridge ip link set dev vlan701 address 52:dc:ca:fd:05:01 ip link set dev vlan701 mtu 1500 ip addr flush dev vlan701 ip addr add 172.16.1.5/24 dev vlan701 fi ip link set dev eth2 master vlan700 ip link set dev eth3 master vlan701 ip link set dev eth1.701 master vlan701 ip link set dev eth1.700 master vlan700 ip link set dev vlan700 up ip link set dev vlan701 up set +e ip addr del 172.16.0.5/24 dev vlan700 2>/dev/null set -e ip addr add 172.16.0.5/24 dev vlan700 sysctl -w net.ipv6.conf.vlan700.disable_ipv6=1 ip link set dev vlan700 mtu 1500 set +e ip addr del 172.16.1.5/24 dev vlan701 2>/dev/null set -e ip addr add 172.16.1.5/24 dev vlan701 sysctl -w net.ipv6.conf.vlan701.disable_ipv6=1 ip link set dev vlan701 mtu 1500 ok: [s2] => msg: |- vlan configuration for s2 ========================================= vlan 701 name blue ! vlan 700 name red ! ! interface Ethernet1 switchport switchport mode trunk switchport trunk allowed vlan 700,701 switchport trunk native vlan tag ! interface Ethernet2 switchport switchport access vlan 700 ! interface Ethernet3 switchport switchport access vlan 701 ! interface Vlan700 ! interface Vlan701 TASK [Deploy vlan configuration] *********************************************** skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/linux-clab.yml for s1 included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/eos.yml for s2 TASK [Define script filename and determine whether to execute in netns] ******** ok: [s1] TASK [Create a temporary file for the rendered script] ************************* changed: [s1 -> localhost] TASK [Create container setup script from /home/pipi/netlab_gh/netsim/ansible/templates/vlan/linux-clab.j2] *** changed: [s1 -> localhost] TASK [Copy script into running container at /tmp/config-s1_vlan.sh] ************ skipping: [s1] TASK [Execute /tmp/config-s1_vlan.sh to deploy vlan config based on /home/pipi/netlab_gh/netsim/ansible/templates/vlan/linux-clab.j2] *** skipping: [s1] TASK [Container configuration for vlan based on /home/pipi/netlab_gh/netsim/ansible/templates/vlan/linux-clab.j2 executed in netns] *** changed: [s1 -> localhost] TASK [Remove temporary file /tmp/s1_vlan-k55hfyf4.sh] ************************** changed: [s1 -> localhost] TASK [eos_config: deploying vlan from /home/pipi/netlab_gh/netsim/ansible/templates/vlan/eos.j2] *** changed: [s2] TASK [Figure out whether to deploy the module routing on current device] ******* ok: [h1] ok: [h2] ok: [h3] ok: [h4] ok: [s1] ok: [s2] TASK [Find configuration template for routing] ********************************* ok: [h1] skipping: [s1] skipping: [s2] ok: [h2] ok: [h3] ok: [h4] TASK [fail] ******************************************************************** skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] skipping: [s1] skipping: [s2] TASK [Find configuration deployment deploy_script for routing] ***************** ok: [h1] skipping: [s1] ok: [h2] skipping: [s2] ok: [h3] ok: [h4] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [s1] ok: [h1] => msg: |- routing configuration for h1 ========================================= #!/bin/bash # # Add static routes (usually IPv4 routes pointing to the first usable gateway) # # echo Removing existing IPv4 routes while ip route del 172.16.0.0/16 2>/dev/null; do : ; done while ip route del 10.0.0.0/24 2>/dev/null; do : ; done while ip route del 10.1.0.0/16 2>/dev/null; do : ; done while ip route del 10.2.0.0/24 2>/dev/null; do : ; done # # # echo Adding direct static routes ip route add 172.16.0.0/16 via 172.16.0.5 dev eth1 protocol static ip route add 10.0.0.0/24 via 172.16.0.5 dev eth1 protocol static ip route add 10.1.0.0/16 via 172.16.0.5 dev eth1 protocol static ip route add 10.2.0.0/24 via 172.16.0.5 dev eth1 protocol static # # Print the final routing table ip route skipping: [s2] ok: [h2] => msg: |- routing configuration for h2 ========================================= #!/bin/bash # # Add static routes (usually IPv4 routes pointing to the first usable gateway) # # echo Removing existing IPv4 routes while ip route del 172.16.0.0/16 2>/dev/null; do : ; done while ip route del 10.0.0.0/24 2>/dev/null; do : ; done while ip route del 10.1.0.0/16 2>/dev/null; do : ; done while ip route del 10.2.0.0/24 2>/dev/null; do : ; done # # # echo Adding direct static routes ip route add 172.16.0.0/16 via 172.16.0.5 dev eth1 protocol static ip route add 10.0.0.0/24 via 172.16.0.5 dev eth1 protocol static ip route add 10.1.0.0/16 via 172.16.0.5 dev eth1 protocol static ip route add 10.2.0.0/24 via 172.16.0.5 dev eth1 protocol static # # Print the final routing table ip route ok: [h4] => msg: |- routing configuration for h4 ========================================= #!/bin/bash # # Add static routes (usually IPv4 routes pointing to the first usable gateway) # # echo Removing existing IPv4 routes while ip route del 172.16.0.0/16 2>/dev/null; do : ; done while ip route del 10.0.0.0/24 2>/dev/null; do : ; done while ip route del 10.1.0.0/16 2>/dev/null; do : ; done while ip route del 10.2.0.0/24 2>/dev/null; do : ; done # # # echo Adding direct static routes ip route add 172.16.0.0/16 via 172.16.1.5 dev eth1 protocol static ip route add 10.0.0.0/24 via 172.16.1.5 dev eth1 protocol static ip route add 10.1.0.0/16 via 172.16.1.5 dev eth1 protocol static ip route add 10.2.0.0/24 via 172.16.1.5 dev eth1 protocol static # # Print the final routing table ip route ok: [h3] => msg: |- routing configuration for h3 ========================================= #!/bin/bash # # Add static routes (usually IPv4 routes pointing to the first usable gateway) # # echo Removing existing IPv4 routes while ip route del 172.16.0.0/16 2>/dev/null; do : ; done while ip route del 10.0.0.0/24 2>/dev/null; do : ; done while ip route del 10.1.0.0/16 2>/dev/null; do : ; done while ip route del 10.2.0.0/24 2>/dev/null; do : ; done # # # echo Adding direct static routes ip route add 172.16.0.0/16 via 172.16.1.5 dev eth1 protocol static ip route add 10.0.0.0/24 via 172.16.1.5 dev eth1 protocol static ip route add 10.1.0.0/16 via 172.16.1.5 dev eth1 protocol static ip route add 10.2.0.0/24 via 172.16.1.5 dev eth1 protocol static # # Print the final routing table ip route TASK [Deploy routing configuration] ******************************************** skipping: [s1] skipping: [s2] included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/linux-clab.yml for h1, h2, h3, h4 TASK [Define script filename and determine whether to execute in netns] ******** ok: [h1] ok: [h2] ok: [h3] ok: [h4] TASK [Create a temporary file for the rendered script] ************************* changed: [h1 -> localhost] changed: [h4 -> localhost] changed: [h2 -> localhost] changed: [h3 -> localhost] TASK [Create container setup script from /home/pipi/netlab_gh/netsim/ansible/templates/routing/linux-clab.j2] *** changed: [h3 -> localhost] changed: [h4 -> localhost] changed: [h2 -> localhost] changed: [h1 -> localhost] TASK [Copy script into running container at /tmp/config-h1_routing.sh] ********* skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] TASK [Execute /tmp/config-h1_routing.sh to deploy routing config based on /home/pipi/netlab_gh/netsim/ansible/templates/routing/linux-clab.j2] *** skipping: [h1] skipping: [h2] skipping: [h3] skipping: [h4] TASK [Container configuration for routing based on /home/pipi/netlab_gh/netsim/ansible/templates/routing/linux-clab.j2 executed in netns] *** changed: [h1 -> localhost] changed: [h4 -> localhost] changed: [h2 -> localhost] changed: [h3 -> localhost] TASK [Remove temporary file /tmp/h1_routing-tbb98c6l.sh] *********************** changed: [h1 -> localhost] changed: [h2 -> localhost] changed: [h3 -> localhost] changed: [h4 -> localhost] PLAY [Deploy custom deployment templates] ************************************** skipping: no hosts matched PLAY RECAP ********************************************************************* h1 : ok=31 changed=8 unreachable=0 failed=0 skipped=15 rescued=0 ignored=0 h2 : ok=31 changed=8 unreachable=0 failed=0 skipped=15 rescued=0 ignored=0 h3 : ok=31 changed=8 unreachable=0 failed=0 skipped=15 rescued=0 ignored=0 h4 : ok=31 changed=8 unreachable=0 failed=0 skipped=15 rescued=0 ignored=0 s1 : ok=31 changed=8 unreachable=0 failed=0 skipped=15 rescued=0 ignored=0 s2 : ok=28 changed=3 unreachable=0 failed=0 skipped=8 rescued=0 ignored=0 The devices under test are layer-3 switches bridging between ports in the same VLAN and routing across VLANs * All hosts should be able to ping each other and switch interfaces in the same VLAN * Hosts should be able to ping loopback address of the adjacent switch (static routes point to nearest router) Please note it might take a while for the lab to work due to STP learning phase