From 7585cee5eae0d54d2b382dfeeee4af72165f942a Mon Sep 17 00:00:00 2001 From: Aleksandr Kurbatov <ak@geant.org> Date: Tue, 29 Apr 2025 19:45:13 +0100 Subject: [PATCH 1/2] Use custom ASN if defined in inventory Should be defined in partner's general.yaml file, e.g. partner: LHCONE: asn: 22442 --- geant/gap_ansible/roles/bgp_config/tasks/merge_vars.yaml | 8 ++++++++ .../bgp_config/templates/nokia/deploy/bgp_neighbor.j2 | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/geant/gap_ansible/roles/bgp_config/tasks/merge_vars.yaml b/geant/gap_ansible/roles/bgp_config/tasks/merge_vars.yaml index 58cab6fd..b3620aa2 100644 --- a/geant/gap_ansible/roles/bgp_config/tasks/merge_vars.yaml +++ b/geant/gap_ansible/roles/bgp_config/tasks/merge_vars.yaml @@ -33,3 +33,11 @@ import_policies_v6: "{{ bgp_custom.policies.import.v6 }}" export_policies_v4: "{{ bgp_custom.policies.export.v4 }}" export_policies_v6: "{{ bgp_custom.policies.export.v6 }}" + +- name: Set ASN override if defined in Partners inventory file + when: > + subscription.product.product_type | upper in l3_service_types.vprn + and + partner[subscription.product.product_type | upper].asn is defined + ansible.builtin.set_fact: + partner_custom_asn: "{{ partner[subscription.product.product_type | upper].asn }}" diff --git a/geant/gap_ansible/roles/bgp_config/templates/nokia/deploy/bgp_neighbor.j2 b/geant/gap_ansible/roles/bgp_config/templates/nokia/deploy/bgp_neighbor.j2 index 6d9f712c..86df0593 100644 --- a/geant/gap_ansible/roles/bgp_config/templates/nokia/deploy/bgp_neighbor.j2 +++ b/geant/gap_ansible/roles/bgp_config/templates/nokia/deploy/bgp_neighbor.j2 @@ -17,7 +17,11 @@ <description>-- IPv6 Peering with {{ partner_name | upper }} --</description> <group>{{ bgp.group.ipv6 }}</group> {% endif %} + {% if partner_custom_asn is defined %} + <peer-as>{{ partner_custom_asn }}</peer-as> + {% else %} <peer-as>{{ partner.asn }}</peer-as> + {% endif %} {% if neighbor.send_default_route %} <send-default> <{{ neighbor.ip_type }}>true</{{ neighbor.ip_type }}> -- GitLab From 6d2140ef3f01c5914e7ace674a177c8b715c0db6 Mon Sep 17 00:00:00 2001 From: Aleksandr Kurbatov <ak@geant.org> Date: Wed, 30 Apr 2025 16:06:00 +0100 Subject: [PATCH 2/2] `policy_options`: changes to the nren communities calculation If NREN custom ASN is defined for LHCONE, use it for the _BLOCK community; skip the NREN community. --- .../tasks/calc_nren_communities.yaml | 48 +++++++++++++++---- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/geant/gap_ansible/roles/policy_options/tasks/calc_nren_communities.yaml b/geant/gap_ansible/roles/policy_options/tasks/calc_nren_communities.yaml index 5ab21b1c..e8f80c06 100644 --- a/geant/gap_ansible/roles/policy_options/tasks/calc_nren_communities.yaml +++ b/geant/gap_ansible/roles/policy_options/tasks/calc_nren_communities.yaml @@ -1,4 +1,8 @@ --- +# When custom ASN is defined in partner general.yaml inventory for LHCONE, +# this is used for only _BLOCK community to configure, the GEANT_<NREN> +# community will stay standard with the standard partner's ASN. +# - name: Set NREN community names when: not subscription.product.product_type | upper in ['LHCONE'] ansible.builtin.set_fact: @@ -6,18 +10,42 @@ - name: Set NREN community names when: subscription.product.product_type | upper in ['LHCONE'] - ansible.builtin.set_fact: - nren_community_names: ["GEANT_{{ partner_name | upper }}", "LHCONE_{{ partner_name | upper }}_BLOCK"] + block: + - name: Set standard NREN community names + when: not partner[subscription.product.product_type | upper].asn is defined + ansible.builtin.set_fact: + nren_community_names: ["GEANT_{{ partner_name | upper }}", "LHCONE_{{ partner_name | upper }}_BLOCK"] -- name: Set NREN community values (2-byte ASN) - when: (partner.asn | int) < 65536 - ansible.builtin.set_fact: - nren_community_values: ["{{ geant_re_as_number }}:{{ partner.asn }}", "{{ bgp.block_community_prefix }}:{{ partner.asn }}"] + - name: Set custom NREN community names + when: partner[subscription.product.product_type | upper].asn is defined + ansible.builtin.set_fact: + nren_community_names: ["LHCONE_{{ partner_name | upper }}_BLOCK"] -- name: Set NREN community values (4-byte ASN) - when: (partner.asn | int) > 65535 - ansible.builtin.set_fact: - nren_community_values: ["origin:{{ partner.asn }}:{{ geant_re_as_number }}", "origin:{{ partner.asn }}:{{ bgp.block_community_prefix }}"] +- name: Set NREN communities values using "partner.asn" + when: not partner[subscription.product.product_type | upper].asn is defined + block: + - name: Set NREN community values (2-byte ASN) + when: (partner.asn | int) < 65536 + ansible.builtin.set_fact: + nren_community_values: ["{{ geant_re_as_number }}:{{ partner.asn }}", "{{ bgp.block_community_prefix }}:{{ partner.asn }}"] + + - name: Set NREN community values (4-byte ASN) + when: (partner.asn | int) > 65535 + ansible.builtin.set_fact: + nren_community_values: ["origin:{{ partner.asn }}:{{ geant_re_as_number }}", "origin:{{ partner.asn }}:{{ bgp.block_community_prefix }}"] + +- name: Set NREN communities values using {{partner[subscription.product.product_type | upper]}}.asn + when: partner[subscription.product.product_type | upper].asn is defined + block: + - name: Set NREN community values (2-byte ASN) + when: (partner[subscription.product.product_type | upper].asn | int) < 65536 + ansible.builtin.set_fact: + nren_community_values: ["{{ bgp.block_community_prefix }}:{{ partner[subscription.product.product_type | upper].asn }}"] + + - name: Set NREN community values (4-byte ASN) + when: (partner[subscription.product.product_type | upper].asn | int) > 65535 + ansible.builtin.set_fact: + nren_community_values: ["origin:{{ partner[subscription.product.product_type | upper].asn }}:{{ bgp.block_community_prefix }}"] - name: Create a list of NREN communities ansible.builtin.set_fact: -- GitLab