From 6c3d5c1a7caf0da98c9366b2f1a2b148d4104b0c Mon Sep 17 00:00:00 2001
From: Aleksandr Kurbatov <ak@geant.org>
Date: Tue, 14 Jan 2025 19:39:46 +0000
Subject: [PATCH] Update `bgp_config` role for LHCONE access

---
 .../roles/bgp_config/tasks/main.yml           | 12 ++++++++
 .../roles/bgp_config/tasks/merge_vars.yaml    | 30 ++++++++++++++++++-
 .../roles/bgp_config/templates/bgp.j2         | 14 +++++++--
 3 files changed, 52 insertions(+), 4 deletions(-)

diff --git a/geant/gap_ansible/roles/bgp_config/tasks/main.yml b/geant/gap_ansible/roles/bgp_config/tasks/main.yml
index 13eca9ef..7bf1d663 100644
--- a/geant/gap_ansible/roles/bgp_config/tasks/main.yml
+++ b/geant/gap_ansible/roles/bgp_config/tasks/main.yml
@@ -1,5 +1,17 @@
 ---
 # tasks file for bgp_config
+- name: Set BGP V4 session object to check for custom policies
+  ansible.builtin.set_fact:
+    bgp_session_v4: "{{ ap.sbp | json_query(query) }}"
+  vars:
+    query: "bgp_session_list[?ip_type == 'ipv4'] | [0]"
+
+- name: Set BGP V6 session object to check for custom policies
+  ansible.builtin.set_fact:
+    bgp_session_v6: "{{ ap.sbp | json_query(query) }}"
+  vars:
+    query: "bgp_session_list[?ip_type == 'ipv6'] | [0]"
+
 - name: Load Standard Policy Statements vars
   ansible.builtin.include_tasks: merge_vars.yaml
 
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 77676232..a29606a9 100644
--- a/geant/gap_ansible/roles/bgp_config/tasks/merge_vars.yaml
+++ b/geant/gap_ansible/roles/bgp_config/tasks/merge_vars.yaml
@@ -1,7 +1,35 @@
 ---
-- name: Set Standard Import and export policies names
+- name: Set Standard BGP import and export policy names for GEANT_IP
+  when: >
+    subscription.l3_core_service_type in ["GEANT_IP", "GEANT IP"]
   ansible.builtin.set_fact:
     import_policies_v4: "{{ bgp.policies.import.v4 }}"
     import_policies_v6: "{{ bgp.policies.import.v6 }}"
     export_policies_v4: "{{ bgp.policies.export.v4 }}"
     export_policies_v6: "{{ bgp.policies.export.v6 }}"
+
+- name: Set standard BGP import and export policy names for LHCONE
+  when: >
+    subscription.l3_core_service_type in ["LHCONE"]
+    and
+    not bgp_session_v4.has_custom_policies | ansible.builtin.bool
+    or
+    not bgp_session_v4.has_custom_policies | ansible.builtin.bool
+  ansible.builtin.set_fact:
+    import_policies_v4: "{{ bgp.policies.import.v4 }}"
+    import_policies_v6: "{{ bgp.policies.import.v6 }}"
+    export_policies_v4: "{{ bgp.policies.export.v4 }}"
+    export_policies_v6: "{{ bgp.policies.export.v6 }}"
+
+- name: Set custom BGP import and export policy names for LHCONE
+  when: >
+    subscription.l3_core_service_type in ["LHCONE"]
+    and
+    bgp_session_v4.has_custom_policies | ansible.builtin.bool
+    or
+    bgp_session_v4.has_custom_policies | ansible.builtin.bool
+  ansible.builtin.set_fact:
+    import_policies_v4: "{{ bgp_custom.policies.import.v4 }}"
+    import_policies_v6: "{{ bgp_custom.policies.import.v6 }}"
+    export_policies_v4: "{{ bgp_custom.policies.export.v4 }}"
+    export_policies_v6: "{{ bgp_custom.policies.export.v6 }}"
diff --git a/geant/gap_ansible/roles/bgp_config/templates/bgp.j2 b/geant/gap_ansible/roles/bgp_config/templates/bgp.j2
index 47b82cfb..1ff02609 100644
--- a/geant/gap_ansible/roles/bgp_config/templates/bgp.j2
+++ b/geant/gap_ansible/roles/bgp_config/templates/bgp.j2
@@ -1,9 +1,17 @@
-
+  {% if subscription.l3_core_service_type in ['GEANT_IP', 'GEANT IP'] %}
         <router 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">
             <router-name>Base</router-name>
             <bgp 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">
             {% include 'bgp_neighbor.j2' %}
             </bgp>
-
        </router>
-
+  {% elif subscription.l3_core_service_type in ['LHCONE'] %}
+        <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">
+            <vprn 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">
+            <service-name>{{ vprn_name }}</service-name>
+                <bgp 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">
+                {% include 'bgp_neighbor.j2' %}
+                </bgp>
+            </vprn>
+        </service>
+  {% endif %}
-- 
GitLab