Creating Device configuration snippets [CREATED] dut: initial,ospf,bgp,vrf [CREATED] r1: initial,ospf [CREATED] r2: initial,bgp [CREATED] r3: initial,ospf [CREATED] r4: initial,bgp Config Deploying device configurations [INFO] Executing initial configuration for node r1 [INFO] Executing initial configuration for node r2 [INFO] Executing initial configuration for node r3 [INFO] Executing initial configuration for node r4 [INFO] Executing ospf configuration for node r1 [INFO] Executing bgp configuration for node r4 [INFO] Executing bgp configuration for node r2 [INFO] Executing ospf configuration for node r3 [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 [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=========================================\n\nupdates:\n- path: /system/mtu\n value:\n default-port-mtu: 1514\n default-l2-mtu: 1514\n default-ip-mtu: 1500\n _annotate_default-ip-mtu: \"Custom system wide setting, overrides default 1500\"\n\n- path: /interface[name=system0]/subinterface[index=0]\n value:\n description: \"No description\"\n admin-state: enable\n ipv4:\n admin-state: enable\n address:\n - ip-prefix: \"10.0.0.1/32\"\n\n- path: /interface[name=ethernet-1/1]\n value:\n description: \"dut ~ r1\"\n subinterface:\n index: 0\n description: \"dut ~ r1\"\n\n- path: /interface[name=ethernet-1/1]/subinterface[index=0]\n value:\n description: \"dut ~ r1\"\n admin-state: enable\n ipv4:\n admin-state: enable\n address:\n - ip-prefix: \"10.1.0.1/30\"\n primary: [null]\n\n- path: /interface[name=ethernet-1/2]\n value:\n description: \"dut ~ r2\"\n subinterface:\n index: 0\n description: \"dut ~ r2\"\n\n- path: /interface[name=ethernet-1/2]/subinterface[index=0]\n value:\n description: \"dut ~ r2\"\n admin-state: enable\n ipv4:\n admin-state: enable\n address:\n - ip-prefix: \"10.1.0.5/30\"\n primary: [null]\n\n- path: /interface[name=ethernet-1/3]\n value:\n description: \"dut ~ r3\"\n subinterface:\n index: 0\n description: \"dut ~ r3\"\n\n- path: /interface[name=ethernet-1/3]/subinterface[index=0]\n value:\n description: \"dut ~ r3\"\n admin-state: enable\n ipv4:\n admin-state: enable\n address:\n - ip-prefix: \"10.1.0.9/30\"\n primary: [null]\n\n- path: /interface[name=ethernet-1/4]\n value:\n description: \"dut ~ r4\"\n subinterface:\n index: 0\n description: \"dut ~ r4\"\n\n- path: /interface[name=ethernet-1/4]/subinterface[index=0]\n value:\n description: \"dut ~ r4\"\n admin-state: enable\n ipv4:\n admin-state: enable\n address:\n - ip-prefix: \"10.1.0.13/30\"\n primary: [null]\n\n\n\n- path: /network-instance[name=default]\n value:\n type: default\n interface:\n - name: system0.0\n\n\n\n\n# TODO: vdata.rd, vdata.import/export, vdata.af\n- path: /network-instance[name=red]\n value:\n type: ip-vrf\n interface:\n - name: ethernet-1/1.0\n- path: /network-instance[name=red]\n value:\n type: ip-vrf\n interface:\n - name: ethernet-1/2.0\n\n\n\n# TODO: vdata.rd, vdata.import/export, vdata.af\n- path: /network-instance[name=blue]\n value:\n type: ip-vrf\n interface:\n - name: ethernet-1/3.0\n- path: /network-instance[name=blue]\n value:\n type: ip-vrf\n interface:\n - name: ethernet-1/4.0\n\n\n" } TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/srlinux.yml for dut TASK [Generate JSON-RPC YAML configuration] ************************************ ok: [dut] TASK [Update SRL initial node configuration (template=/work/netlab_cicd/node_files/dut/initial)] *** changed: [dut] TASK [debug] ******************************************************************* skipping: [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=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=vrf) 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=========================================\nupdates:\n" } TASK [Deploy ospf configuration] *********************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/srlinux.yml for dut TASK [Generate JSON-RPC YAML configuration] ************************************ ok: [dut] TASK [Update SRL ospf node configuration (template=/work/netlab_cicd/node_files/dut/ospf)] *** skipping: [dut] TASK [debug] ******************************************************************* skipping: [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=========================================\nupdates:\n- path: /routing-policy/policy[name=accept_all]\n value:\n default-action:\n policy-result: accept\n\n- path: /routing-policy/community-set[name=ibgp-mark]\n value:\n member: [ \"65536:0:65536\" ]\n\n- path: /routing-policy/policy[name=ibgp-mark]\n value:\n default-action:\n policy-result: reject\n statement:\n - name: mark-ibgp-routes\n action:\n bgp:\n communities:\n add: ibgp-mark\n policy-result: accept\n\n- path: /routing-policy/prefix-set[name=default_bgp_advertise]\n value:\n prefix: [] # Make sure it exists\n\n- path: /routing-policy/policy[name=default_bgp_export]\n value:\n default-action:\n policy-result: reject\n statement:\n - name: prefixes\n match:\n prefix:\n prefix-set: default_bgp_advertise\n action:\n policy-result: next-policy\n - name: bgp\n match:\n protocol: bgp\n action:\n policy-result: next-policy\n bgp:\n communities:\n remove:\n ibgp-mark\n\n\n- path: /network-instance[name=default]/protocols/bgp\n value:\n admin-state: enable\n autonomous-system: 65000\n router-id: 10.0.0.1\n ebgp-default-policy:\n export-reject-all: False\n import-reject-all: False\n\n afi-safi:\n - afi-safi-name: ipv4-unicast\n admin-state: enable\n\n- path: /routing-policy/prefix-set[name=default_bgp_advertise]\n value:\n prefix:\n - ip-prefix: 10.0.0.1/32\n mask-length-range: exact\n\n\n\n" } TASK [Deploy bgp configuration] ************************************************ included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/srlinux.yml for dut TASK [Generate JSON-RPC YAML configuration] ************************************ ok: [dut] TASK [Update SRL bgp node configuration (template=/work/netlab_cicd/node_files/dut/bgp)] *** changed: [dut] TASK [debug] ******************************************************************* skipping: [dut] TASK [Figure out whether to deploy the module vrf on current device] *********** ok: [dut] TASK [Find configuration template for vrf] ************************************* ok: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for vrf] ********************* ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut] => { "msg": "vrf configuration for dut\n=========================================\n\nupdates:\n\n- path: /network-instance[name=red]\n value:\n type: ip-vrf\n\n- path: /routing-policy/policy[name=red_export_ospf]\n value:\n default-action:\n policy-result: reject\n statement:\n - name: export_bgp\n match:\n protocol: bgp\n action:\n policy-result: accept\n - name: export_leaked\n match:\n network-instance-leaked-route: true\n action:\n policy-result: accept\n - name: export_local\n match:\n protocol: local\n action:\n policy-result: accept\n\n\n- path: /network-instance[name=red]\n value:\n router-id: 10.100.0.1\n protocols:\n ospf:\n instance:\n - name: \"0\"\n version: ospf-v2\n admin-state: enable\n max-ecmp-paths: 64\n asbr: {}\n export-policy: \"red_export_ospf\"\n area:\n - area-id: 0.0.0.0\n interface:\n - interface-name: ethernet-1/1.0\n interface-type: \"point-to-point\"\n failure-detection:\n enable-bfd: False\n\n\n- path: /routing-policy/policy[name=accept_all]\n value:\n default-action:\n policy-result: accept\n\n- path: /routing-policy/community-set[name=ibgp-mark]\n value:\n member: [ \"65536:0:65536\" ]\n\n- path: /routing-policy/policy[name=ibgp-mark]\n value:\n default-action:\n policy-result: reject\n statement:\n - name: mark-ibgp-routes\n action:\n bgp:\n communities:\n add: ibgp-mark\n policy-result: accept\n\n\n- path: /routing-policy/policy[name=red_bgp_export]\n value:\n default-action:\n policy-result: reject\n statement:\n - name: bgp\n match:\n protocol: bgp\n action:\n policy-result: next-policy\n bgp:\n communities:\n remove:\n ibgp-mark\n - name: export_local\n match:\n protocol: local\n action:\n policy-result: next-policy\n - name: export_ospfv2\n match:\n protocol: ospfv2\n action:\n policy-result: next-policy\n - name: export_ospfv3\n match:\n protocol: ospfv3\n action:\n policy-result: next-policy\n\n\n- path: /network-instance[name=red]/protocols/bgp\n value:\n admin-state: enable\n autonomous-system: 65000\n router-id: 10.0.0.1\n ebgp-default-policy:\n export-reject-all: False\n import-reject-all: False\n\n afi-safi:\n - afi-safi-name: ipv4-unicast\n admin-state: enable\n\n\n\n- path: /network-instance[name=red]/protocols/bgp/group[group-name=ebgp]\n value:\n admin-state: enable\n# neighbor: {'ifindex': 2, 'name': 'r2', 'as': 65100, 'type': 'ebgp', 'ipv4': '10.1.0.6', 'activate': {'ipv4': True}, '_src_vrf': 'red'}\n# ipv4: True\n# ipv6: True\n afi-safi:\n - afi-safi-name: ipv4-unicast\n admin-state: enable\n send-community-type: ['standard', 'large']\n\n import-policy: ['accept_all']\n export-policy: ['red_bgp_export', 'accept_all']\n - afi-safi-name: ipv6-unicast\n admin-state: disable\n send-community-type: ['standard', 'large']\n\n import-policy: ['accept_all']\n export-policy: ['red_bgp_export', 'accept_all']\n\n timers:\n connect-retry: 10\n _annotate_connect-retry: \"Reduce default 120s to 10s\"\n minimum-advertisement-interval: 1\n\n\n- path: /network-instance[name=red]/protocols/bgp\n value:\n neighbor:\n - peer-address: \"10.1.0.6\"\n description: r2\n peer-group: ebgp\n # neighbor: {'ifindex': 2, 'name': 'r2', 'as': 65100, 'type': 'ebgp', 'ipv4': '10.1.0.6', 'activate': {'ipv4': True}, '_src_vrf': 'red'}\n # ipv4: True\n # ipv6: False\n afi-safi:\n - afi-safi-name: ipv4-unicast\n admin-state: enable\n send-community-type: ['standard', 'large']\n\n - afi-safi-name: ipv6-unicast\n admin-state: disable\n\n peer-as: 65100\n\n\n\n- path: /network-instance[name=red]/protocols/bgp-vpn\n value:\n bgp-instance:\n - id: 1\n route-distinguisher:\n rd: \"65000:1\"\n route-target:\n import-rt: \"target:65000:1\"\n export-rt: \"target:65000:1\"\n\n- path: /network-instance[name=red]/inter-instance-policies\n value:\n apply-policy:\n export-policy:\n - \"red_vpn_export\"\n import-policy:\n - \"red_vpn_import\"\n\n- path: /routing-policy/policy[name=red_vpn_export]\n value:\n default-action:\n policy-result: \"accept\"\n\n- path: /routing-policy/policy[name=red_vpn_import]\n value:\n default-action:\n policy-result: \"reject\"\n statement:\n - name: 110\n match:\n origin-network-instance: \"red\"\n action:\n policy-result: \"accept\"\n\n\n- path: /network-instance[name=blue]\n value:\n type: ip-vrf\n\n- path: /routing-policy/policy[name=blue_export_ospf]\n value:\n default-action:\n policy-result: reject\n statement:\n - name: export_bgp\n match:\n protocol: bgp\n action:\n policy-result: accept\n - name: export_leaked\n match:\n network-instance-leaked-route: true\n action:\n policy-result: accept\n - name: export_local\n match:\n protocol: local\n action:\n policy-result: accept\n\n\n- path: /network-instance[name=blue]\n value:\n router-id: 10.101.0.1\n protocols:\n ospf:\n instance:\n - name: \"0\"\n version: ospf-v2\n admin-state: enable\n max-ecmp-paths: 64\n asbr: {}\n export-policy: \"blue_export_ospf\"\n area:\n - area-id: 0.0.0.0\n interface:\n - interface-name: ethernet-1/3.0\n interface-type: \"point-to-point\"\n failure-detection:\n enable-bfd: False\n\n\n- path: /routing-policy/policy[name=accept_all]\n value:\n default-action:\n policy-result: accept\n\n- path: /routing-policy/community-set[name=ibgp-mark]\n value:\n member: [ \"65536:0:65536\" ]\n\n- path: /routing-policy/policy[name=ibgp-mark]\n value:\n default-action:\n policy-result: reject\n statement:\n - name: mark-ibgp-routes\n action:\n bgp:\n communities:\n add: ibgp-mark\n policy-result: accept\n\n\n- path: /routing-policy/policy[name=blue_bgp_export]\n value:\n default-action:\n policy-result: reject\n statement:\n - name: bgp\n match:\n protocol: bgp\n action:\n policy-result: next-policy\n bgp:\n communities:\n remove:\n ibgp-mark\n - name: export_local\n match:\n protocol: local\n action:\n policy-result: next-policy\n - name: export_ospfv2\n match:\n protocol: ospfv2\n action:\n policy-result: next-policy\n - name: export_ospfv3\n match:\n protocol: ospfv3\n action:\n policy-result: next-policy\n\n\n- path: /network-instance[name=blue]/protocols/bgp\n value:\n admin-state: enable\n autonomous-system: 65000\n router-id: 10.0.0.1\n ebgp-default-policy:\n export-reject-all: False\n import-reject-all: False\n\n afi-safi:\n - afi-safi-name: ipv4-unicast\n admin-state: enable\n\n\n\n- path: /network-instance[name=blue]/protocols/bgp/group[group-name=ebgp]\n value:\n admin-state: enable\n# neighbor: {'ifindex': 4, 'name': 'r4', 'as': 65101, 'type': 'ebgp', 'ipv4': '10.1.0.14', 'activate': {'ipv4': True}, '_src_vrf': 'blue'}\n# ipv4: True\n# ipv6: True\n afi-safi:\n - afi-safi-name: ipv4-unicast\n admin-state: enable\n send-community-type: ['standard', 'large']\n\n import-policy: ['accept_all']\n export-policy: ['blue_bgp_export', 'accept_all']\n - afi-safi-name: ipv6-unicast\n admin-state: disable\n send-community-type: ['standard', 'large']\n\n import-policy: ['accept_all']\n export-policy: ['blue_bgp_export', 'accept_all']\n\n timers:\n connect-retry: 10\n _annotate_connect-retry: \"Reduce default 120s to 10s\"\n minimum-advertisement-interval: 1\n\n\n- path: /network-instance[name=blue]/protocols/bgp\n value:\n neighbor:\n - peer-address: \"10.1.0.14\"\n description: r4\n peer-group: ebgp\n # neighbor: {'ifindex': 4, 'name': 'r4', 'as': 65101, 'type': 'ebgp', 'ipv4': '10.1.0.14', 'activate': {'ipv4': True}, '_src_vrf': 'blue'}\n # ipv4: True\n # ipv6: False\n afi-safi:\n - afi-safi-name: ipv4-unicast\n admin-state: enable\n send-community-type: ['standard', 'large']\n\n - afi-safi-name: ipv6-unicast\n admin-state: disable\n\n peer-as: 65101\n\n\n\n- path: /network-instance[name=blue]/protocols/bgp-vpn\n value:\n bgp-instance:\n - id: 1\n route-distinguisher:\n rd: \"65000:2\"\n route-target:\n import-rt: \"target:65000:2\"\n export-rt: \"target:65000:2\"\n\n- path: /network-instance[name=blue]/inter-instance-policies\n value:\n apply-policy:\n export-policy:\n - \"blue_vpn_export\"\n import-policy:\n - \"blue_vpn_import\"\n\n- path: /routing-policy/policy[name=blue_vpn_export]\n value:\n default-action:\n policy-result: \"accept\"\n\n- path: /routing-policy/policy[name=blue_vpn_import]\n value:\n default-action:\n policy-result: \"reject\"\n statement:\n - name: 111\n match:\n origin-network-instance: \"blue\"\n action:\n policy-result: \"accept\"\n\n" } TASK [Deploy vrf configuration] ************************************************ included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/srlinux.yml for dut TASK [Generate JSON-RPC YAML configuration] ************************************ ok: [dut] TASK [Update SRL vrf node configuration (template=/work/netlab_cicd/node_files/dut/vrf)] *** changed: [dut] TASK [debug] ******************************************************************* skipping: [dut] PLAY [Deploy custom deployment templates] ************************************** skipping: no hosts matched PLAY RECAP ********************************************************************* dut : ok=33 changed=3 unreachable=0 failed=0 skipped=9 rescued=0 ignored=0 Results of configuration script deployments ================================================================================ r1 Script: initial,ospf r2 Script: initial,bgp r3 Script: initial,ospf r4 Script: initial,bgp The device under test has two VRFs with two interfaces in each VRF. Routers are attached to those interfaces and run OSPF and BGP with device under test. Assuming the OSPF and BGP multi-vrf test cases succeeded, this one tests OSPF-to-BGP two-way redistribution. * 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