Creating Device configuration snippets [CREATED] dut: initial,routing,bgp,bgp.policy [CREATED] x1: initial,routing,bgp [CREATED] x2: initial,routing,bgp Checking Are lab devices ready to be configured? [INFO] Checking SSH server(s) on dut Config Deploying device configurations [INFO] Executing initial configuration for node x1 [INFO] Executing initial configuration for node x2 [INFO] Executing routing configuration for node x1 [INFO] Executing routing configuration for node x2 [INFO] Executing bgp configuration for node x1 [INFO] Executing bgp configuration for node x2 [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 [Normalize config on bridge-like devices] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut TASK [Figure out whether to deploy the module normalize on current device] ***** ok: [dut] TASK [Find configuration template for normalize] ******************************* ok: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for normalize] *************** ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** skipping: [dut] TASK [Deploy normalize configuration] ****************************************** skipping: [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=========================================\ninterfaces {\n lo0 {\n unit 0 {\n family inet {\n address 10.0.0.1/32;\n }\n }\n }\n eth1 {\n description \"dut -> x1 [external]\";\n unit 0 {\n family inet {\n address 10.1.0.1/30;\n }\n }\n }\n eth2 {\n description \"dut -> x2 [external]\";\n unit 0 {\n family inet {\n address 10.1.0.5/30;\n }\n }\n }\n}\nprotocols {\n lldp {\n interface eth0 {\n disable;\n }\n interface all;\n }\n}\n" } TASK [Deploy initial configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/junos.yml for dut TASK [junos_config: deploying initial from /work/netlab_cicd/node_files/dut/initial] *** changed: [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=routing) included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-module.yml for dut => (item=bgp) TASK [Figure out whether to deploy the module routing on current device] ******* ok: [dut] TASK [Find configuration template for routing] ********************************* ok: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Find configuration deployment deploy_script for routing] ***************** ok: [dut] TASK [Print deployed configuration when running in verbose mode] *************** ok: [dut] => { "msg": "routing configuration for dut\n=========================================\npolicy-options community x-route-permit-mark members large:65535:0:65536;\n\n\n\n\npolicy-options {\n delete: policy-statement p_count;\n}\n\npolicy-options {\n policy-statement p_count {\n term seq10 {\n then as-path-prepend \"65000\";\n\n\n then {\n community add x-route-permit-mark;\n next policy;\n }\n }\n\n\n term default-reject {\n then {\n reject;\n }\n }\n\n }\n}\npolicy-options {\n delete: policy-statement p_path;\n}\n\npolicy-options {\n policy-statement p_path {\n term seq10 {\n then as-path-prepend \"65000 64999\";\n\n\n then {\n community add x-route-permit-mark;\n next policy;\n }\n }\n\n\n term default-reject {\n then {\n reject;\n }\n }\n\n }\n}\n\n\n\n" } TASK [Deploy routing configuration] ******************************************** included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/junos.yml for dut TASK [junos_config: deploying routing from /work/netlab_cicd/node_files/dut/routing] *** [WARNING]: statement not found changed: [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=========================================\n\nrouting-options {\n autonomous-system 65000;\n router-id 10.0.0.1\n}\n\n\npolicy-options community x-route-permit-mark members large:65535:0:65536;\n\npolicy-options {\n delete: policy-statement bgp-advertise;\n delete: policy-statement bgp-redistribute;\n delete: policy-statement next-hop-ebgp-ipv4;\n delete: policy-statement next-hop-all-ipv4;\n delete: policy-statement next-hop-ebgp-ipv6;\n delete: policy-statement next-hop-all-ipv6;\n delete: route-filter-list bgp-announce;\n}\n\npolicy-options {\n\n route-filter-list bgp-announce {\n }\n\n policy-statement next-hop-ebgp-ipv4 {\n term next-hop-self-ipv4 {\n from {\n family inet;\n route-type external;\n }\n then {\n next-hop self;\n }\n }\n }\n\n policy-statement next-hop-all-ipv4 {\n term next-hop-self-ipv4 {\n from {\n family inet;\n }\n then {\n next-hop self;\n }\n }\n }\n\n policy-statement next-hop-ebgp-ipv6 {\n term next-hop-self-ipv6 {\n from {\n family inet6;\n route-type external;\n }\n then {\n next-hop self;\n }\n }\n }\n\n policy-statement next-hop-all-ipv6 {\n term next-hop-self-ipv6 {\n from {\n family inet6;\n }\n then {\n next-hop self;\n }\n }\n }\n\n\n policy-statement bgp-advertise {\n term advertise {\n from {\n protocol direct;\n interface [ \n lo0.0 ];\n }\n then {\n community add x-route-permit-mark;\n next policy;\n }\n }\n\n term originate {\n from {\n protocol static;\n route-filter-list bgp-announce;\n }\n then {\n community add x-route-permit-mark;\n next policy;\n }\n }\n\n }\n\n policy-statement bgp-redistribute {\n term redis_bgp {\n from protocol bgp;\n then {\n community add x-route-permit-mark;\n next policy;\n }\n }\n }\n\n policy-statement bgp-final {\n term final-option {\n from community x-route-permit-mark;\n then {\n community delete x-route-permit-mark;\n accept;\n }\n }\n term default-reject {\n then reject;\n }\n }\n\n policy-statement bgp-initial {\n term initial-cleanup {\n from community x-route-permit-mark;\n then {\n community delete x-route-permit-mark;\n next policy;\n }\n }\n }\n\n}\nprotocols {\n delete: bgp;\n}\nprotocols {\n bgp {\n group ibgp-peers-ipv4 {\n type internal;\n export [ \n next-hop-ebgp-ipv4 bgp-advertise bgp-redistribute bgp-final\n ];\n advertise-inactive;\n }\n group ebgp-peers {\n export [ \n bgp-advertise bgp-redistribute bgp-final\n ];\n advertise-inactive;\n neighbor 10.1.0.2 {\n export [ bgp-advertise bgp-redistribute p_count bgp-final ];\n\n peer-as 65100;\n description x1;\n family inet {\n unicast;\n }\n }\n neighbor 10.1.0.6 {\n export [ bgp-advertise bgp-redistribute p_path bgp-final ];\n\n peer-as 65101;\n description x2;\n family inet {\n unicast;\n }\n }\n }\n }\n}\n" } TASK [Deploy bgp configuration] ************************************************ included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/junos.yml for dut TASK [junos_config: deploying bgp from /work/netlab_cicd/node_files/dut/bgp] *** 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 dut => (item=bgp.policy) TASK [Find configuration template] ********************************************* ok: [dut] TASK [fail] ******************************************************************** skipping: [dut] TASK [Check is the configuration template is a file] *************************** ok: [dut -> localhost] TASK [fail] ******************************************************************** skipping: [dut] TASK [Process template /work/netlab_cicd/node_files/dut/bgp.policy for dut] **** skipping: [dut] TASK [Find custom configuration deployment script] ***************************** ok: [dut] TASK [Run the configuration deployment script] ********************************* included: /home/pipi/netlab_gh/netsim/ansible/tasks/deploy-config/junos.yml for dut TASK [junos_config: deploying bgp.policy from /work/netlab_cicd/node_files/dut/bgp.policy] *** ok: [dut] PLAY RECAP ********************************************************************* dut : ok=33 changed=3 unreachable=0 failed=0 skipped=9 rescued=0 ignored=0 Results of configuration script deployments ================================================================================ x1 Script: initial,routing,bgp x2 Script: initial,routing,bgp Use this topology to test the AS path prepending. The DUT has prepend its AS once on updates sent to X1 and prepend AS 64999 to updates sent to X2.