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