diff --git a/geant/gap_ansible/roles/promote_p_to_pe/tasks/check_routing_instances.yaml b/geant/gap_ansible/roles/promote_p_to_pe/tasks/check_routing_instances.yaml new file mode 100644 index 0000000000000000000000000000000000000000..653d21d0c0d4c3be22f85b6746bd3397e8417afa --- /dev/null +++ b/geant/gap_ansible/roles/promote_p_to_pe/tasks/check_routing_instances.yaml @@ -0,0 +1,22 @@ +- name: Set variable to connect to nokia + ansible.builtin.set_fact: + ansible_network_os: nokia.sros.md + ansible_connection: netconf + +- name: Check VPRN BGP summary + block: + - name: Get BGP summary + ansible.netcommon.netconf_rpc: + rpc: action + xmlns: "urn:ietf:params:xml:ns:yang:1" + content: | + <global-operations xmlns="urn:nokia.com:sros:ns:yang:sr:oper-global"> + <md-cli-raw-command> + <md-cli-input-line>show router service-name "{{ vprn.name | quote }}" bgp summary</md-cli-input-line> + </md-cli-raw-command> + </global-operations> + display: json + register: out + - name: Show BGP summary for VPRN "{{ vprn.name | quote }}" + ansible.builtin.debug: + msg: "{{out.output['rpc-reply']['nokiaoper:results']['nokiaoper:md-cli-output-block'].split('\n')}}" diff --git a/geant/gap_ansible/roles/promote_p_to_pe/tasks/compile_pe_base_config.yaml b/geant/gap_ansible/roles/promote_p_to_pe/tasks/compile.yaml similarity index 81% rename from geant/gap_ansible/roles/promote_p_to_pe/tasks/compile_pe_base_config.yaml rename to geant/gap_ansible/roles/promote_p_to_pe/tasks/compile.yaml index d374f30c4ffc2a74ba15d8ef862f98e446ca2f30..6208e177c9238a753ba6dd6c08b0d2b5075ec7dd 100644 --- a/geant/gap_ansible/roles/promote_p_to_pe/tasks/compile_pe_base_config.yaml +++ b/geant/gap_ansible/roles/promote_p_to_pe/tasks/compile.yaml @@ -44,6 +44,16 @@ mode: '0755' delegate_to: localhost +- name: Print the template in "/var/tmp/ansible_run_{{ opid }}/delete_default_static_routes.conf" + when: verb == "delete_default_routes" + ansible.builtin.template: + src: "routers/{{ subscription.router.vendor }}/router/delete_default_static_routes.j2" + dest: "/var/tmp/ansible_run_{{ opid }}/delete_default_static_routes.conf" + lstrip_blocks: true + trim_blocks: true + mode: '0755' + delegate_to: localhost + - name: Set back ansible_host to target terminal server if needed when: subscription.router.router_access_via_ts | ansible.builtin.bool diff --git a/geant/gap_ansible/roles/promote_p_to_pe/tasks/deploy_pe_base_config.yaml b/geant/gap_ansible/roles/promote_p_to_pe/tasks/deploy.yaml similarity index 75% rename from geant/gap_ansible/roles/promote_p_to_pe/tasks/deploy_pe_base_config.yaml rename to geant/gap_ansible/roles/promote_p_to_pe/tasks/deploy.yaml index 5e2f1fe028f5085d65c026fb648bcef16901c18e..dbae83ee229ad12d4e0d68f717ccaa92aa391079 100644 --- a/geant/gap_ansible/roles/promote_p_to_pe/tasks/deploy_pe_base_config.yaml +++ b/geant/gap_ansible/roles/promote_p_to_pe/tasks/deploy.yaml @@ -39,6 +39,21 @@ diff: true register: output check_mode: true + +- name: Delete default routes on "{{ inventory_hostname }}" [CHECK ONLY][NOKIA] + when: >- + dry_run | ansible.builtin.bool + and verb == "delete_default_routes" + geant.gap_ansible.nokia_netconf_config: + format: xml + default_operation: merge + content: "{{ lookup('ansible.builtin.template', 'routers/{{ subscription.router.vendor }}/router/delete_default_static_routes.j2') }}" + commit: true + validate: true + diff: true + register: output + check_mode: true + # - name: Fail if there is any diff # ansible.builtin.fail: # msg: Base config drift detected!!! @@ -85,3 +100,16 @@ commit_comment: "{{ commit_comment }}" diff: true check_mode: false + +- name: Delete default routes on "{{ inventory_hostname }}" [AND COMMIT][NOKIA] + when: >- + not (dry_run | ansible.builtin.bool) + and verb == "delete_default_routes" + geant.gap_ansible.nokia_netconf_config: + format: xml + default_operation: merge + content: "{{ lookup('ansible.builtin.template', 'routers/{{ subscription.router.vendor }}/router/delete_default_static_routes.j2') }}" + commit: true + commit_comment: "{{ commit_comment }}" + diff: true + check_mode: false diff --git a/geant/gap_ansible/roles/promote_p_to_pe/tasks/main.yml b/geant/gap_ansible/roles/promote_p_to_pe/tasks/main.yml index 02a469925821be24be6457708ace1c0898d0fc0c..9c352c0ed74581f881cc4ae8a0b7fcf481680485 100644 --- a/geant/gap_ansible/roles/promote_p_to_pe/tasks/main.yml +++ b/geant/gap_ansible/roles/promote_p_to_pe/tasks/main.yml @@ -49,13 +49,20 @@ ansible.builtin.include_tasks: configure_isis_overload.yaml - name: Include templates compilation - when: verb in [ 'deploy_pe_base_config', 'update_sdp_mesh' , 'deploy_routing_instances' ] - ansible.builtin.include_tasks: compile_pe_base_config.yaml + when: verb in [ 'deploy_pe_base_config', 'update_sdp_mesh' , 'deploy_routing_instances', 'delete_default_routes' ] + ansible.builtin.include_tasks: compile.yaml - name: Include deploy if selected - when: verb in [ 'deploy_pe_base_config', 'update_sdp_mesh', 'deploy_routing_instances' ] - ansible.builtin.include_tasks: deploy_pe_base_config.yaml + when: verb in [ 'deploy_pe_base_config', 'update_sdp_mesh', 'deploy_routing_instances', 'delete_default_routes' ] + ansible.builtin.include_tasks: deploy.yaml -- name: Include deletion of default static routes - when: verb == "delete_default_routes" - ansible.builtin.include_tasks: delete_default_routes.yaml +# - name: Include deletion of default static routes +# when: verb == "delete_default_routes" +# ansible.builtin.include_tasks: delete_default_routes.yaml +# +- name: Check VPRNs + when: verb == "check_base_ris" + loop: "{{ pe_vprns }}" + loop_control: + loop_var: vprn + ansible.builtin.include_tasks: check_routing_instances.yaml diff --git a/geant/gap_ansible/roles/promote_p_to_pe/tasks/merge_variables.yaml b/geant/gap_ansible/roles/promote_p_to_pe/tasks/merge_variables.yaml index 30bb080f3926225a360c06dceb050a218e6c7d41..7ad3d7a9af5d8676b2415826f1b8d97e025ea9e2 100644 --- a/geant/gap_ansible/roles/promote_p_to_pe/tasks/merge_variables.yaml +++ b/geant/gap_ansible/roles/promote_p_to_pe/tasks/merge_variables.yaml @@ -24,3 +24,16 @@ - name: Select SDP params for l2ciruit-type ansible.builtin.set_fact: sdp_type: "{{ (sdp_types | selectattr('id', 'equalto', '1'))[0] }}" + +- name: Prepare PE-specific base config vars + when: verb == "deploy_routing_instances" + block: + - name: Combine P and PE prefix-lists + ansible.builtin.set_fact: + nokia_prefix_lists: "{{ [nokia_prefix_lists, nokia_pe_prefix_lists, nokia_pe_ias_prefix_lists] | community.general.lists_mergeby('name', + list_merge='append') }}" + +- name: Select SDP params for l2ciruit (epipe) type + when: verb == "update_sdp_mesh" + ansible.builtin.set_fact: + sdp_type: "{{ (sdp_types | selectattr('id', 'equalto', '1'))[0] }}" diff --git a/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/filter_log.j2 b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/filter_log.j2 new file mode 100644 index 0000000000000000000000000000000000000000..7ab3675a89a19a00aa2ff97342c90e8969fa8e11 --- /dev/null +++ b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/filter_log.j2 @@ -0,0 +1,18 @@ + +<filter xmlns="urn:nokia.com:sros:ns:yang:sr:conf" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nokia-attr="urn:nokia.com:sros:ns:yang:sr:attributes"> + {% if pe_filter_logs is defined %} + {% for log in pe_filter_logs %} + <log alu:operation="replace"> + <log-id>{{ log.id }}</log-id> + <description>{{ log.description }}</description> + <destination> + {% if log.destination == 'syslog' %} + <syslog> + <name>1</name> + </syslog> + {% endif %} + </destination> + </log> + {% endfor %} + {% endif %} +</filter> diff --git a/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/pe_base_config.j2 b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/pe_base_config.j2 index feebe23ad624d87162e10ad57d69afd888c1e9a7..c3c587bbd0008dcb27c8486f2220b49c9f79f87e 100644 --- a/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/pe_base_config.j2 +++ b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/pe_base_config.j2 @@ -1,5 +1,6 @@ <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:alu="urn:ietf:params:xml:ns:netconf:base:1.0"> <configure xmlns="urn:nokia.com:sros:ns:yang:sr:conf"> + {% include 'filter_log.j2' %} {% include 'ip_prefix_list.j2' %} {% include 'filters/cpm_filters.j2' %} {% include 'policy_options/policy_options.j2' %} diff --git a/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/pe_base_vprn.j2 b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/pe_base_vprn.j2 index 1ab52618a1460aac983574d6029ff7ab2acc65b6..f8467b331828c1df32a19da5ba3d008a6a4126a1 100644 --- a/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/pe_base_vprn.j2 +++ b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/pe_base_vprn.j2 @@ -1,5 +1,5 @@ <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:alu="urn:ietf:params:xml:ns:netconf:base:1.0"> <configure xmlns="urn:nokia.com:sros:ns:yang:sr:conf"> - {% include 'router/vprn.j2' %} + {% include 'service_vprn.j2' %} </configure> </config> diff --git a/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/router/delete_default_static_routes.j2 b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/router/delete_default_static_routes.j2 index 31db5e033c5f6f3f628b808108fb783e96e74dec..f3d8d46b24117664afda6c35adc295394dcab927 100644 --- a/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/router/delete_default_static_routes.j2 +++ b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/router/delete_default_static_routes.j2 @@ -6,6 +6,7 @@ {% for route in nokia_static_routes %} <route alu:operation="delete"> <ip-prefix>{{ route.ip_prefix }}</ip-prefix> + <route-type>{{ route.route_type }}</route-type> </route> {% endfor %} </static-routes> diff --git a/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/router/vprn.j2 b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/router/vprn.j2 index fa0ebb640e58520e9d0de5c29b58e3e7d7dd536a..c6c049644f15d58cb914a40b34030c847ad0402c 100644 --- a/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/router/vprn.j2 +++ b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/router/vprn.j2 @@ -1,4 +1,3 @@ -<service xmlns="urn:nokia.com:sros:ns:yang:sr:conf" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nokia-attr="urn:nokia.com:sros:ns:yang:sr:attributes"> {% for vprn in pe_vprns %} <vprn alu:operation="replace"> <service-name>{{ vprn.name }}</service-name> @@ -56,5 +55,4 @@ {% endif %} </vprn> {% endfor %} -</service> diff --git a/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/sdp_mesh.j2 b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/sdp_mesh.j2 index 45be0ab7b9d11257d8d5abefef606003af5e645e..df67f22d70e11a8c7d89687b0837fa2049d00e8b 100644 --- a/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/sdp_mesh.j2 +++ b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/sdp_mesh.j2 @@ -1,7 +1,7 @@ <service xmlns="urn:nokia.com:sros:ns:yang:sr:conf" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nokia-attr="urn:nokia.com:sros:ns:yang:sr:attributes"> - <sdp> {% for pe_fqdn, pe_addr in pe_router_list.items() %} {% set sdp_id = pe_addr.lo4 | replace(sdp_prefix_regex, '') | replace('.', '') + sdp_type.id %} + <sdp> <sdp-id>{{ sdp_id }}</sdp-id> <admin-state>enable</admin-state> <description>SDP_{{ sdp_id }}</description> @@ -14,7 +14,7 @@ <far-end> <ip-address>{{ pe_addr.lo4 }}</ip-address> </far-end> - {% endfor %} </sdp> + {% endfor %} </service> diff --git a/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/service_vprn.j2 b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/service_vprn.j2 new file mode 100644 index 0000000000000000000000000000000000000000..d14800d4014fa130678e26489f8bf03b1ae08afe --- /dev/null +++ b/geant/gap_ansible/roles/promote_p_to_pe/templates/routers/nokia/service_vprn.j2 @@ -0,0 +1,12 @@ + +<service xmlns="urn:nokia.com:sros:ns:yang:sr:conf" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nokia-attr="urn:nokia.com:sros:ns:yang:sr:attributes"> + <md-auto-id> + <service-id-range alu:operation="replace"> + <start>{{ pe_service.md_auto_id.service_id_range.start | default('10001') }}</start> + <end>{{ pe_service.md_auto_id.service_id_range.end | default('19999') }}</end> + </service-id-range> + </md-auto-id> + {% include 'router/vprn.j2' %} +</service> + {% include 'ip_prefix_list.j2' %} + diff --git a/geant/gap_ansible/roles/promote_p_to_pe/vars/main.yml b/geant/gap_ansible/roles/promote_p_to_pe/vars/main.yml index dd26c7d39e2b69a5a9d88c29c8d8e76f82aceb35..33851df6536e31c0e07305d65540f3300be84706 100644 --- a/geant/gap_ansible/roles/promote_p_to_pe/vars/main.yml +++ b/geant/gap_ansible/roles/promote_p_to_pe/vars/main.yml @@ -8,6 +8,7 @@ verbs: - delete_default_routes # Delete default static routes configured as part P base-config - deploy_routing_instances # Deploy standard PE VPRNs - update_sdp_mesh # Upadate SDP mesh on other Nokia PE routers with this promoted router + - check_base_ris # Check BGP summary for base VPRNs lo_ipv4_address: "{{ subscription.router.router_lo_ipv4_address }}" lo_ipv6_address: "{{ subscription.router.router_lo_ipv6_address }}"