Creating Device configuration snippets [CREATED] h1: initial,routing [CREATED] h2: initial,routing [CREATED] h3: initial,routing [CREATED] h4: initial,routing [CREATED] h5: initial,routing [CREATED] h6: initial,routing [CREATED] h1a: initial,routing [CREATED] h2a: initial,routing [CREATED] h4a: initial,routing [CREATED] h5a: initial,routing [CREATED] dut_s1: initial,vlan,vxlan,ospf [CREATED] dut_s2: initial,vlan,vxlan,ospf [CREATED] s3: initial,vlan,vxlan,ospf Config Deploying device configurations [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 initial configuration for node h5 (namespace clab- ml-17-h5) [INFO] Executing initial configuration for node h6 (namespace clab- ml-17-h6) [INFO] Executing initial configuration for node h1a (namespace clab- ml-17-h1a) [INFO] Executing initial configuration for node h2a (namespace clab- ml-17-h2a) [INFO] Executing initial configuration for node h4a (namespace clab- ml-17-h4a) [INFO] Executing initial configuration for node h5a (namespace clab- ml-17-h5a) [INFO] Executing initial configuration for node s3 [INFO] Executing routing configuration for node h1 (namespace clab- ml-17-h1) [INFO] Executing routing configuration for node h5 (namespace clab- ml-17-h5) [INFO] Executing routing configuration for node h2a (namespace clab- ml-17-h2a) [INFO] Executing routing configuration for node h3 (namespace clab- ml-17-h3) [INFO] Executing routing configuration for node h2 (namespace clab- ml-17-h2) [INFO] Executing routing configuration for node h1a (namespace clab- ml-17-h1a) [INFO] Executing routing configuration for node h6 (namespace clab- ml-17-h6) [INFO] Executing routing configuration for node h4 (namespace clab- ml-17-h4) [INFO] Executing routing configuration for node h4a (namespace clab- ml-17-h4a) [INFO] Executing routing configuration for node h5a (namespace clab- ml-17-h5a) [INFO] Executing vlan configuration for node s3 [INFO] Executing vxlan configuration for node s3 [INFO] Executing ospf configuration for node s3 [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_s1] ok: [dut_s2] TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut_s1, dut_s2 TASK [Figure out whether to deploy the module initial on current device] ******* ok: [dut_s1] ok: [dut_s2] TASK [Find configuration template for initial] ********************************* ok: [dut_s1] ok: [dut_s2] TASK [fail] ******************************************************************** skipping: [dut_s1] skipping: [dut_s2] TASK [Find configuration deployment deploy_script for initial] ***************** ok: [dut_s1] ok: [dut_s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut_s1] => { "msg": "initial configuration for dut_s1\n=========================================\n#!/bin/sh\n\nset -e # Exit immediately when any command fails\nset -x # Track commands for troubleshooting\n\nhostname dut-s1\n#\n# Build hosts file\n#\n#\ncat <<'SCRIPT' >/tmp/hosts\n#\n# Created by netlab initial\n#\n10.0.0.11 dut-s1 dut_s1\n10.1.0.1 vio1.dut_s1\n10.1.0.9 vio2.dut_s1\n10.0.0.12 dut-s2 dut_s2\n10.1.0.2 vio1.dut_s2\n10.1.0.5 vio2.dut_s2\n172.16.0.1 h1 eth1.h1\n172.16.0.7 h1a eth1.h1a\n172.16.0.2 h2 eth1.h2\n172.16.0.8 h2a eth1.h2a\n172.16.0.3 h3 eth1.h3\n172.16.1.4 h4 eth1.h4\n172.16.1.9 h4a eth1.h4a\n172.16.1.5 h5 eth1.h5\n172.16.1.10 h5a eth1.h5a\n172.16.1.6 h6 eth1.h6\n10.0.0.13 s3\n10.1.0.6 eth1.s3\n10.1.0.10 eth2.s3\nSCRIPT\ngrep \"Created by netlab\" /etc/hosts || uniq /tmp/hosts >>/etc/hosts\n\n#\n# Enable forwarding\n#\nsysctl net.inet.ip.forwarding=1\nsysctl net.inet6.ip6.forwarding=1\necho -n > /etc/rad.conf\n\n#\n# Interface configuration\n#\nifconfig lo0 inet 10.0.0.11/32 alias\nifconfig lo0 up\n\nifconfig vio1 -inet\nifconfig vio1 -inet6\nifconfig vio1 inet 10.1.0.1/30 \nifconfig vio1 mtu 1600\nifconfig vio1 description \"dut_s1 -> dut_s2\"\nifconfig vio1 up\n\nifconfig vio2 -inet\nifconfig vio2 -inet6\nifconfig vio2 inet 10.1.0.9/30 \nifconfig vio2 mtu 1600\nifconfig vio2 description \"dut_s1 -> s3\"\nifconfig vio2 up\n\n\n#\n# (re-)start RA daemon\n#\npkill -q rad || true\nrad\n" } ok: [dut_s2] => { "msg": "initial configuration for dut_s2\n=========================================\n#!/bin/sh\n\nset -e # Exit immediately when any command fails\nset -x # Track commands for troubleshooting\n\nhostname dut-s2\n#\n# Build hosts file\n#\n#\ncat <<'SCRIPT' >/tmp/hosts\n#\n# Created by netlab initial\n#\n10.0.0.11 dut-s1 dut_s1\n10.1.0.1 vio1.dut_s1\n10.1.0.9 vio2.dut_s1\n10.0.0.12 dut-s2 dut_s2\n10.1.0.2 vio1.dut_s2\n10.1.0.5 vio2.dut_s2\n172.16.0.1 h1 eth1.h1\n172.16.0.7 h1a eth1.h1a\n172.16.0.2 h2 eth1.h2\n172.16.0.8 h2a eth1.h2a\n172.16.0.3 h3 eth1.h3\n172.16.1.4 h4 eth1.h4\n172.16.1.9 h4a eth1.h4a\n172.16.1.5 h5 eth1.h5\n172.16.1.10 h5a eth1.h5a\n172.16.1.6 h6 eth1.h6\n10.0.0.13 s3\n10.1.0.6 eth1.s3\n10.1.0.10 eth2.s3\nSCRIPT\ngrep \"Created by netlab\" /etc/hosts || uniq /tmp/hosts >>/etc/hosts\n\n#\n# Enable forwarding\n#\nsysctl net.inet.ip.forwarding=1\nsysctl net.inet6.ip6.forwarding=1\necho -n > /etc/rad.conf\n\n#\n# Interface configuration\n#\nifconfig lo0 inet 10.0.0.12/32 alias\nifconfig lo0 up\n\nifconfig vio1 -inet\nifconfig vio1 -inet6\nifconfig vio1 inet 10.1.0.2/30 \nifconfig vio1 mtu 1600\nifconfig vio1 description \"dut_s2 -> dut_s1\"\nifconfig vio1 up\n\nifconfig vio2 -inet\nifconfig vio2 -inet6\nifconfig vio2 inet 10.1.0.5/30 \nifconfig vio2 mtu 1600\nifconfig vio2 description \"dut_s2 -> s3\"\nifconfig vio2 up\n\n\n#\n# (re-)start RA daemon\n#\npkill -q rad || true\nrad\n" } TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/openbsd.yml for dut_s1, dut_s2 TASK [template] **************************************************************** changed: [dut_s2] changed: [dut_s1] TASK [Execute /tmp/config.sh to deploy initial config from /work/netlab_cicd/node_files/dut_s1/initial] *** changed: [dut_s1] changed: [dut_s2] PLAY [Deploy module-specific configurations] *********************************** TASK [Set variables that cannot be set with VARS] ****************************** ok: [dut_s1] ok: [dut_s2] TASK [Deploy individual configuration modules] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut_s1, dut_s2 => (item=vlan) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut_s1, dut_s2 => (item=vxlan) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut_s1, dut_s2 => (item=routing) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut_s1, dut_s2 => (item=ospf) TASK [Figure out whether to deploy the module vlan on current device] ********** ok: [dut_s1] ok: [dut_s2] TASK [Find configuration template for vlan] ************************************ ok: [dut_s1] ok: [dut_s2] TASK [fail] ******************************************************************** skipping: [dut_s1] skipping: [dut_s2] TASK [Find configuration deployment deploy_script for vlan] ******************** ok: [dut_s1] ok: [dut_s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut_s1] => { "msg": "vlan configuration for dut_s1\n=========================================\n#!/bin/sh\n\nset -e # Exit immediately when any command fails\nset -x # Track commands for troubleshooting\n\nifconfig vio3 -inet\nifconfig vio3 -inet6\nifconfig vio3 mtu 1500\nifconfig vio3 description \"[Access VLAN red] dut_s1 -> h1\"\nifconfig vio3 up\n\nifconfig veb1000 add vio3 up\nifconfig vio4 -inet\nifconfig vio4 -inet6\nifconfig vio4 mtu 1500\nifconfig vio4 description \"[Access VLAN red] dut_s1 -> h1a\"\nifconfig vio4 up\n\nifconfig veb1000 add vio4 up\nifconfig vio5 -inet\nifconfig vio5 -inet6\nifconfig vio5 mtu 1500\nifconfig vio5 description \"[Access VLAN blue] dut_s1 -> h4\"\nifconfig vio5 up\n\nifconfig veb1001 add vio5 up\nifconfig vio6 -inet\nifconfig vio6 -inet6\nifconfig vio6 mtu 1500\nifconfig vio6 description \"[Access VLAN blue] dut_s1 -> h4a\"\nifconfig vio6 up\n\nifconfig veb1001 add vio6 up\nifconfig vport1000 -inet\nifconfig vport1000 -inet6\nifconfig vport1000 description \"VLAN red (1000) -> [h1,h1a,h2,h2a,dut_s2...]\"\nifconfig vport1000 up\n\nifconfig veb1000 add vport1000 up\nifconfig vport1001 -inet\nifconfig vport1001 -inet6\nifconfig vport1001 description \"VLAN blue (1001) -> [h4,h4a,h5,h5a,dut_s2...]\"\nifconfig vport1001 up\n\nifconfig veb1001 add vport1001 up\n\n#\n# (re-)start RA daemon\n#\npkill -q rad || true\nrad\n" } ok: [dut_s2] => { "msg": "vlan configuration for dut_s2\n=========================================\n#!/bin/sh\n\nset -e # Exit immediately when any command fails\nset -x # Track commands for troubleshooting\n\nifconfig vio3 -inet\nifconfig vio3 -inet6\nifconfig vio3 mtu 1500\nifconfig vio3 description \"[Access VLAN red] dut_s2 -> h2\"\nifconfig vio3 up\n\nifconfig veb1000 add vio3 up\nifconfig vio4 -inet\nifconfig vio4 -inet6\nifconfig vio4 mtu 1500\nifconfig vio4 description \"[Access VLAN red] dut_s2 -> h2a\"\nifconfig vio4 up\n\nifconfig veb1000 add vio4 up\nifconfig vio5 -inet\nifconfig vio5 -inet6\nifconfig vio5 mtu 1500\nifconfig vio5 description \"[Access VLAN blue] dut_s2 -> h5\"\nifconfig vio5 up\n\nifconfig veb1001 add vio5 up\nifconfig vio6 -inet\nifconfig vio6 -inet6\nifconfig vio6 mtu 1500\nifconfig vio6 description \"[Access VLAN blue] dut_s2 -> h5a\"\nifconfig vio6 up\n\nifconfig veb1001 add vio6 up\nifconfig vport1000 -inet\nifconfig vport1000 -inet6\nifconfig vport1000 description \"VLAN red (1000) -> [h1,h1a,dut_s1,h2,h2a...]\"\nifconfig vport1000 up\n\nifconfig veb1000 add vport1000 up\nifconfig vport1001 -inet\nifconfig vport1001 -inet6\nifconfig vport1001 description \"VLAN blue (1001) -> [h4,h4a,dut_s1,h5,h5a...]\"\nifconfig vport1001 up\n\nifconfig veb1001 add vport1001 up\n\n#\n# (re-)start RA daemon\n#\npkill -q rad || true\nrad\n" } TASK [Deploy vlan configuration] *********************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/openbsd.yml for dut_s1, dut_s2 TASK [template] **************************************************************** changed: [dut_s1] changed: [dut_s2] TASK [Execute /tmp/config.sh to deploy vlan config from /work/netlab_cicd/node_files/dut_s1/vlan] *** changed: [dut_s1] changed: [dut_s2] TASK [Figure out whether to deploy the module vxlan on current device] ********* ok: [dut_s1] ok: [dut_s2] TASK [Find configuration template for vxlan] *********************************** ok: [dut_s1] ok: [dut_s2] TASK [fail] ******************************************************************** skipping: [dut_s1] skipping: [dut_s2] TASK [Find configuration deployment deploy_script for vxlan] ******************* ok: [dut_s1] ok: [dut_s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut_s1] => { "msg": "vxlan configuration for dut_s1\n=========================================\n#!/bin/sh\n\nset -e # Exit immediately when any command fails\nset -x # Track commands for troubleshooting\n\nifconfig vxlan50001 vnetid 5000 tunnel 10.0.0.11 10.0.0.12\nifconfig veb1000 add vxlan50001\nifconfig vxlan50001 up\nifconfig vxlan50002 vnetid 5000 tunnel 10.0.0.11 10.0.0.13\nifconfig veb1000 add vxlan50002\nifconfig vxlan50002 up\nifconfig vxlan50011 vnetid 5001 tunnel 10.0.0.11 10.0.0.12\nifconfig veb1001 add vxlan50011\nifconfig vxlan50011 up\nifconfig vxlan50012 vnetid 5001 tunnel 10.0.0.11 10.0.0.13\nifconfig veb1001 add vxlan50012\nifconfig vxlan50012 up\n" } ok: [dut_s2] => { "msg": "vxlan configuration for dut_s2\n=========================================\n#!/bin/sh\n\nset -e # Exit immediately when any command fails\nset -x # Track commands for troubleshooting\n\nifconfig vxlan50001 vnetid 5000 tunnel 10.0.0.12 10.0.0.11\nifconfig veb1000 add vxlan50001\nifconfig vxlan50001 up\nifconfig vxlan50002 vnetid 5000 tunnel 10.0.0.12 10.0.0.13\nifconfig veb1000 add vxlan50002\nifconfig vxlan50002 up\nifconfig vxlan50011 vnetid 5001 tunnel 10.0.0.12 10.0.0.11\nifconfig veb1001 add vxlan50011\nifconfig vxlan50011 up\nifconfig vxlan50012 vnetid 5001 tunnel 10.0.0.12 10.0.0.13\nifconfig veb1001 add vxlan50012\nifconfig vxlan50012 up\n" } TASK [Deploy vxlan configuration] ********************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/openbsd.yml for dut_s1, dut_s2 TASK [template] **************************************************************** changed: [dut_s1] changed: [dut_s2] TASK [Execute /tmp/config.sh to deploy vxlan config from /work/netlab_cicd/node_files/dut_s1/vxlan] *** changed: [dut_s1] changed: [dut_s2] TASK [Figure out whether to deploy the module routing on current device] ******* ok: [dut_s1] ok: [dut_s2] TASK [Find configuration template for routing] ********************************* skipping: [dut_s1] skipping: [dut_s2] TASK [fail] ******************************************************************** skipping: [dut_s1] skipping: [dut_s2] TASK [Find configuration deployment deploy_script for routing] ***************** skipping: [dut_s1] skipping: [dut_s2] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [dut_s1] skipping: [dut_s2] TASK [Deploy routing configuration] ******************************************** skipping: [dut_s1] skipping: [dut_s2] TASK [Figure out whether to deploy the module ospf on current device] ********** ok: [dut_s1] ok: [dut_s2] TASK [Find configuration template for ospf] ************************************ ok: [dut_s1] ok: [dut_s2] TASK [fail] ******************************************************************** skipping: [dut_s1] skipping: [dut_s2] TASK [Find configuration deployment deploy_script for ospf] ******************** ok: [dut_s1] ok: [dut_s2] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut_s1] => { "msg": "ospf configuration for dut_s1\n=========================================\n#!/bin/sh\ncat <<'OSPFD_CONF' >/etc/ospfd.conf\nrouter-id 10.0.0.11\nspf-delay msec 100\nspf-holdtime msec 200\n\narea 0.0.0.0 {\n interface lo0:10.0.0.11 {\n }\n interface vio1 {\n type p2p\n }\n interface vio2 {\n type p2p\n }\n}\n \nOSPFD_CONF\n\nchmod 640 /etc/ospfd.conf\nrcctl enable ospfd\nrcctl restart ospfd\n\n" } ok: [dut_s2] => { "msg": "ospf configuration for dut_s2\n=========================================\n#!/bin/sh\ncat <<'OSPFD_CONF' >/etc/ospfd.conf\nrouter-id 10.0.0.12\nspf-delay msec 100\nspf-holdtime msec 200\n\narea 0.0.0.0 {\n interface lo0:10.0.0.12 {\n }\n interface vio1 {\n type p2p\n }\n interface vio2 {\n type p2p\n }\n}\n \nOSPFD_CONF\n\nchmod 640 /etc/ospfd.conf\nrcctl enable ospfd\nrcctl restart ospfd\n\n" } TASK [Deploy ospf configuration] *********************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/openbsd.yml for dut_s1, dut_s2 TASK [template] **************************************************************** changed: [dut_s2] changed: [dut_s1] TASK [Execute /tmp/config.sh to deploy ospf config from /work/netlab_cicd/node_files/dut_s1/ospf] *** changed: [dut_s2] changed: [dut_s1] PLAY [Deploy custom deployment templates] ************************************** skipping: no hosts matched PLAY RECAP ********************************************************************* dut_s1 : ok=36 changed=8 unreachable=0 failed=0 skipped=9 rescued=0 ignored=0 dut_s2 : ok=36 changed=8 unreachable=0 failed=0 skipped=9 rescued=0 ignored=0 Results of configuration script deployments ================================================================================ h1 Script: initial,routing h2 Script: initial,routing h3 Script: initial,routing h4 Script: initial,routing h5 Script: initial,routing h6 Script: initial,routing h1a Script: initial,routing h2a Script: initial,routing h4a Script: initial,routing h5a Script: initial,routing s3 Script: initial,vlan,vxlan,ospf This is the multi-node version of the vxlan-bridging lab. Use it to check that you don't have spanning tree problems in VXLAN overlay * h1, h2 and h3 should be able to ping each other * h4, h5 and h6 should be able to ping each other Please note it might take a while for the lab to work due to OSPF adjacency establishment and STP learning phase