From 773ce650f1c4cb465e0814e451b6f989b61ec6d1 Mon Sep 17 00:00:00 2001 From: Aleksandr Kurbatov <ak@geant.org> Date: Tue, 15 Apr 2025 11:11:15 +0100 Subject: [PATCH 1/5] Update to Juniper edgeport template --- .../templates/juniper/edge_port_create.j2 | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_create.j2 diff --git a/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_create.j2 b/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_create.j2 new file mode 100644 index 00000000..5b71496d --- /dev/null +++ b/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_create.j2 @@ -0,0 +1,23 @@ +{% set gaid_prefix = '$' %} +{% set csn_prefix = '#' %} + + +{% for member in ep.edge_port_ae_members %} +set interfaces {{ member.interface_name }} description "PHY CUSTOMER {{ partner_name }} P_{{ ep.edge_port_name }}{{ ' | '+member.interface_description if member.interface_description is string }} +set interfaces {{ member.interface_name }} gigether-options 802.3ad {{ ep.edge_port_name }} +{% endfor %} +{% if removed_ae_members is defined and removed_ae_members|length > 0 %} + {% for member in removed_ae_members %} +deactivate {{ member.interface_name }} + {% endfor %} +{% endif %} + +set interfaces {{ ep.edge_port_name }} description LAG {{ ep.edge_port_type }} {{ partner_name }}{{ ' | '+gaid_prefix+ep.ga_id if ep.ga_id is string }}{{ ' | '+csn_prefix+(ep.custom_service_name | replace("#","")) if ep.custom_service_name is string }}{{ ' | '+ep.edge_port_description if ep.edge_port_description is string }} +set interfaces {{ ep.edge_port_name }} {% 'flexible-vlan-tagging' if ep.encapsulation == 'qinq' else 'vlan-tagging' %} +set interfaces {{ ep.edge_port_name }} mtu 9192 +set interfaces {{ ep.edge_port_name }} encapsulation flexible-ethernet-services +set interfaces {{ ep.edge_port_name }} aggregated-ether-options minimum-links {{ ep.minimum-links }} +set interfaces {{ ep.edge_port_name }} aggregated-ether-options link-speed {{ ep.edge_port_ae_members[0].memeber_speed }} +{% if enable_lacp %} +set interfaces {{ ep.edge_port_name }} aggregated-ether-options lacp active +{% endif %} -- GitLab From d3a87cad9174de28f3f6fb2ff2ef9edd9d89a57d Mon Sep 17 00:00:00 2001 From: Aleksandr Kurbatov <ak@geant.org> Date: Tue, 15 Apr 2025 13:21:42 +0100 Subject: [PATCH 2/5] Add Juniper edge-port-terminate template --- .../roles/edge_port/templates/juniper/edge_port_terminate.j2 | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_terminate.j2 diff --git a/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_terminate.j2 b/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_terminate.j2 new file mode 100644 index 00000000..68f1293d --- /dev/null +++ b/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_terminate.j2 @@ -0,0 +1,5 @@ +{% for member in ep.edge_port_ae_members %} +delete interfaces {{ member.interface_name }} +{% endfor %} + +delete interfaces {{ ep.edge_port_name }} -- GitLab From 09dabc6c1aa5e1469d3abc288139ba80b62bbead Mon Sep 17 00:00:00 2001 From: Aleksandr Kurbatov <ak@geant.org> Date: Wed, 30 Apr 2025 21:32:48 +0100 Subject: [PATCH 3/5] Changes to the Juniper-related edge_port creation --- .../roles/edge_port/tasks/deploy.yaml | 29 +++++++++++++++++++ .../roles/edge_port/tasks/main.yml | 12 ++++---- .../templates/juniper/edge_port_create.j2 | 12 ++++---- 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/geant/gap_ansible/roles/edge_port/tasks/deploy.yaml b/geant/gap_ansible/roles/edge_port/tasks/deploy.yaml index f6e3ee63..57cc6aa2 100644 --- a/geant/gap_ansible/roles/edge_port/tasks/deploy.yaml +++ b/geant/gap_ansible/roles/edge_port/tasks/deploy.yaml @@ -2,6 +2,8 @@ - name: Perform "{{ verb }}" Edge port on "{{ inventory_hostname }}" [CHECK ONLY][NOKIA] when: >- dry_run | ansible.builtin.bool + and + router.vendor == "nokia" geant.gap_ansible.nokia_netconf_config: format: xml default_operation: merge @@ -13,6 +15,18 @@ register: output check_mode: true +- name: Config deploy [CHECK ONLY][JUNIPER] + when: > + dry_run | ansible.builtin.bool + and + router.vendor == "juniper" + junipernetworks.junos.junos_config: + update: 'replace' + src: "{{ play_storage_path }}/edge_port_{{ verb }}.conf" + src_format: set + check_commit: true + diff: true + register: output - name: Fail if there is any diff ansible.builtin.fail: @@ -26,6 +40,8 @@ - name: Perform "{{ verb }}" Edge port on "{{ inventory_hostname }}" [FOR REAL][NOKIA] when: >- not (dry_run | ansible.builtin.bool) + and + router.vendor == "nokia" geant.gap_ansible.nokia_netconf_config: format: xml default_operation: merge @@ -36,3 +52,16 @@ diff: true register: output check_mode: false + + +- name: Config deploy [AND COMMIT][JUNIPER] + when: > + not dry_run | ansible.builtin.bool + and + router.vendor == "juniper" + junipernetworks.junos.junos_config: + update: 'replace' + src: "{{ play_storage_path }}/edge_port_{{ verb }}.conf" + src_format: set + comment: "{{ commit_comment }}" + diff: true diff --git a/geant/gap_ansible/roles/edge_port/tasks/main.yml b/geant/gap_ansible/roles/edge_port/tasks/main.yml index 2381bf69..3e69831a 100644 --- a/geant/gap_ansible/roles/edge_port/tasks/main.yml +++ b/geant/gap_ansible/roles/edge_port/tasks/main.yml @@ -16,12 +16,10 @@ - name: Include deploy tasks when: > verb in verbs - and - router.vendor == 'nokia' ansible.builtin.include_tasks: deploy.yaml -- name: Skip all for Juniper - when: > - router.vendor == 'juniper' - ansible.builtin.debug: - msg: "Juniper tasks skipped" +# - name: Skip all for Juniper +# when: > +# router.vendor == 'juniper' +# ansible.builtin.debug: +# msg: "Juniper tasks skipped" diff --git a/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_create.j2 b/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_create.j2 index 5b71496d..b5f6bb6d 100644 --- a/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_create.j2 +++ b/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_create.j2 @@ -3,7 +3,7 @@ {% for member in ep.edge_port_ae_members %} -set interfaces {{ member.interface_name }} description "PHY CUSTOMER {{ partner_name }} P_{{ ep.edge_port_name }}{{ ' | '+member.interface_description if member.interface_description is string }} +set interfaces {{ member.interface_name }} description "PHY CUSTOMER {{ partner_name }} P_{{ ep.edge_port_name }}{{ ' | '+member.interface_description if member.interface_description is string }}" set interfaces {{ member.interface_name }} gigether-options 802.3ad {{ ep.edge_port_name }} {% endfor %} {% if removed_ae_members is defined and removed_ae_members|length > 0 %} @@ -12,12 +12,12 @@ deactivate {{ member.interface_name }} {% endfor %} {% endif %} -set interfaces {{ ep.edge_port_name }} description LAG {{ ep.edge_port_type }} {{ partner_name }}{{ ' | '+gaid_prefix+ep.ga_id if ep.ga_id is string }}{{ ' | '+csn_prefix+(ep.custom_service_name | replace("#","")) if ep.custom_service_name is string }}{{ ' | '+ep.edge_port_description if ep.edge_port_description is string }} -set interfaces {{ ep.edge_port_name }} {% 'flexible-vlan-tagging' if ep.encapsulation == 'qinq' else 'vlan-tagging' %} +set interfaces {{ ep.edge_port_name }} description "LAG {{ ep.edge_port_type }} {{ partner_name }}{{ ' | '+gaid_prefix+ep.ga_id if ep.ga_id is string }}{{ ' | '+csn_prefix+(ep.custom_service_name | replace("#","")) if ep.custom_service_name is string }}{{ ' | '+ep.edge_port_description if ep.edge_port_description is string }}" +set interfaces {{ ep.edge_port_name }} {{ 'flexible-vlan-tagging' if ep.encapsulation == 'qinq' else 'vlan-tagging' }} set interfaces {{ ep.edge_port_name }} mtu 9192 set interfaces {{ ep.edge_port_name }} encapsulation flexible-ethernet-services -set interfaces {{ ep.edge_port_name }} aggregated-ether-options minimum-links {{ ep.minimum-links }} -set interfaces {{ ep.edge_port_name }} aggregated-ether-options link-speed {{ ep.edge_port_ae_members[0].memeber_speed }} -{% if enable_lacp %} +set interfaces {{ ep.edge_port_name }} aggregated-ether-options minimum-links {{ ep.minimum_links }} +set interfaces {{ ep.edge_port_name }} aggregated-ether-options link-speed {{ ep.member_speed | lower }} +{% if ep.enable_lacp %} set interfaces {{ ep.edge_port_name }} aggregated-ether-options lacp active {% endif %} -- GitLab From 521043ddd13b2aacda7f670da7bf40f5d1b9efad Mon Sep 17 00:00:00 2001 From: Aleksandr Kurbatov <ak@geant.org> Date: Thu, 1 May 2025 13:06:04 +0100 Subject: [PATCH 4/5] always compile the template --- geant/gap_ansible/roles/edge_port/tasks/compile.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geant/gap_ansible/roles/edge_port/tasks/compile.yaml b/geant/gap_ansible/roles/edge_port/tasks/compile.yaml index 0cdaff1a..3b47ff32 100644 --- a/geant/gap_ansible/roles/edge_port/tasks/compile.yaml +++ b/geant/gap_ansible/roles/edge_port/tasks/compile.yaml @@ -7,7 +7,7 @@ ansible_connection: local - name: Print the template in "{{ play_storage_path }}/edge_port_{{ verb }}.conf" - when: verb == "create" + when: verb in verbs ansible.builtin.template: src: "{{ router.vendor }}/edge_port_{{ verb }}.j2" dest: "{{ play_storage_path }}/edge_port_{{ verb }}.conf" -- GitLab From 9b64216bc28600fa75a92e022446db20caeefa43 Mon Sep 17 00:00:00 2001 From: Aleksandr Kurbatov <ak@geant.org> Date: Thu, 1 May 2025 13:06:29 +0100 Subject: [PATCH 5/5] Add Juniper templates for `create` and `update` --- .../templates/juniper/edge_port_create.j2 | 5 ---- .../templates/juniper/edge_port_update.j2 | 23 +++++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_update.j2 diff --git a/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_create.j2 b/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_create.j2 index b5f6bb6d..e9be6984 100644 --- a/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_create.j2 +++ b/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_create.j2 @@ -6,11 +6,6 @@ set interfaces {{ member.interface_name }} description "PHY CUSTOMER {{ partner_name }} P_{{ ep.edge_port_name }}{{ ' | '+member.interface_description if member.interface_description is string }}" set interfaces {{ member.interface_name }} gigether-options 802.3ad {{ ep.edge_port_name }} {% endfor %} -{% if removed_ae_members is defined and removed_ae_members|length > 0 %} - {% for member in removed_ae_members %} -deactivate {{ member.interface_name }} - {% endfor %} -{% endif %} set interfaces {{ ep.edge_port_name }} description "LAG {{ ep.edge_port_type }} {{ partner_name }}{{ ' | '+gaid_prefix+ep.ga_id if ep.ga_id is string }}{{ ' | '+csn_prefix+(ep.custom_service_name | replace("#","")) if ep.custom_service_name is string }}{{ ' | '+ep.edge_port_description if ep.edge_port_description is string }}" set interfaces {{ ep.edge_port_name }} {{ 'flexible-vlan-tagging' if ep.encapsulation == 'qinq' else 'vlan-tagging' }} diff --git a/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_update.j2 b/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_update.j2 new file mode 100644 index 00000000..da7dcd30 --- /dev/null +++ b/geant/gap_ansible/roles/edge_port/templates/juniper/edge_port_update.j2 @@ -0,0 +1,23 @@ +{% set gaid_prefix = '$' %} +{% set csn_prefix = '#' %} + + +{% for member in ep.edge_port_ae_members %} +set interfaces {{ member.interface_name }} description "PHY CUSTOMER {{ partner_name }} P_{{ ep.edge_port_name }}{{ ' | '+member.interface_description if member.interface_description is string }}" +set interfaces {{ member.interface_name }} gigether-options 802.3ad {{ ep.edge_port_name }} +{% endfor %} +{% if removed_ae_members is defined and removed_ae_members|length > 0 %} + {% for member in removed_ae_members %} +delete interfaces {{ member.interface_name }} + {% endfor %} +{% endif %} + +set interfaces {{ ep.edge_port_name }} description "LAG {{ ep.edge_port_type }} {{ partner_name }}{{ ' | '+gaid_prefix+ep.ga_id if ep.ga_id is string }}{{ ' | '+csn_prefix+(ep.custom_service_name | replace("#","")) if ep.custom_service_name is string }}{{ ' | '+ep.edge_port_description if ep.edge_port_description is string }}" +set interfaces {{ ep.edge_port_name }} {{ 'flexible-vlan-tagging' if ep.encapsulation == 'qinq' else 'vlan-tagging' }} +set interfaces {{ ep.edge_port_name }} mtu 9192 +set interfaces {{ ep.edge_port_name }} encapsulation flexible-ethernet-services +set interfaces {{ ep.edge_port_name }} aggregated-ether-options minimum-links {{ ep.minimum_links }} +set interfaces {{ ep.edge_port_name }} aggregated-ether-options link-speed {{ ep.member_speed | lower }} +{% if ep.enable_lacp %} +set interfaces {{ ep.edge_port_name }} aggregated-ether-options lacp active +{% endif %} -- GitLab