From df0cd9c9072f9d6555ed14ffeba10585b97da617 Mon Sep 17 00:00:00 2001
From: Aleksandr Kurbatov <aleks@aleks01.dev.gap.geant.org>
Date: Tue, 30 May 2023 14:09:43 +0000
Subject: [PATCH] IPAM: create_device: LO, SI and LT_IAS; create_trunk: trunk
 networks.

---
 gso/settings.py                         |  2 ++
 gso/workflows/device/create_device.py   |  9 ++++++---
 gso/workflows/iptrunk/create_iptrunk.py | 10 +++++-----
 test/conftest.py                        | 26 +++++++++++++++++++++++++
 4 files changed, 39 insertions(+), 8 deletions(-)

diff --git a/gso/settings.py b/gso/settings.py
index 8e8ad08f..016b571b 100644
--- a/gso/settings.py
+++ b/gso/settings.py
@@ -63,6 +63,8 @@ class IPAMParams(BaseSettings):
     LO: ServiceNetworkParams
     TRUNK: ServiceNetworkParams
     GEANT_IP: ServiceNetworkParams
+    SI: ServiceNetworkParams
+    LT_IAS: ServiceNetworkParams
 
 
 class ProvisioningProxyParams(BaseSettings):
diff --git a/gso/workflows/device/create_device.py b/gso/workflows/device/create_device.py
index d7646e5d..73459908 100644
--- a/gso/workflows/device/create_device.py
+++ b/gso/workflows/device/create_device.py
@@ -95,9 +95,12 @@ def get_info_from_ipam(subscription: DeviceProvisioning) -> State:
     subscription.device.device_lo_ipv6_address = lo0_addr.v6
     subscription.device.device_lo_iso_address \
         = iso_from_ipv4(str(subscription.device.device_lo_ipv4_address))
-    subscription.device.device_si_ipv4_network = '192.168.0.0/31'
-    subscription.device.device_ias_lt_ipv4_network = '192.168.1.0/31'
-    subscription.device.device_ias_lt_ipv6_network = 'fc00:798:1::150/126'
+    subscription.device.device_si_ipv4_network \
+        = _ipam.allocate_service_ipv4_network(service_type='SI', comment=f"SI for {lo0_name}").v4
+    subscription.device.device_ias_lt_ipv4_network \
+        = _ipam.allocate_service_ipv4_network(service_type='LT_IAS', comment=f"LT for {lo0_name}").v4
+    subscription.device.device_ias_lt_ipv6_network \
+        = _ipam.allocate_service_ipv6_network(service_type='LT_IAS', comment=f"LT for {lo0_name}").v6
     return {'subscription': subscription}
 
 
diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py
index 1c096575..48e15393 100644
--- a/gso/workflows/iptrunk/create_iptrunk.py
+++ b/gso/workflows/iptrunk/create_iptrunk.py
@@ -17,7 +17,7 @@ from gso.products.product_blocks.iptrunk import IptrunkType
 from gso.products.product_types.device import Device
 from gso.products.product_types.iptrunk import IptrunkInactive, \
     IptrunkProvisioning
-from gso.services import provisioning_proxy
+from gso.services import provisioning_proxy, _ipam
 from gso.services.provisioning_proxy import confirm_pp_results, \
     await_pp_results
 
@@ -91,12 +91,12 @@ def create_subscription(product: UUIDstr) -> State:
 
 
 @step('Get information from IPAM')
-def get_info_from_ipam(subscription: IptrunkInactive) -> State:
+def get_info_from_ipam(subscription: IptrunkProvisioning) -> State:
     # TODO: get info about how these should be generated
     subscription.iptrunk.iptrunk_ipv4_network \
-        = ipaddress.ip_network('192.168.255.0/31')
+        = _ipam.allocate_service_ipv4_network(service_type="TRUNK", comment=subscription.iptrunk.iptrunk_description).v4
     subscription.iptrunk.iptrunk_ipv6_network \
-        = ipaddress.ip_network('fc00:798:255::150/126')
+        = _ipam.allocate_service_ipv6_network(service_type="TRUNK", comment=subscription.iptrunk.iptrunk_description).v6
     return {'subscription': subscription}
 
 
@@ -235,8 +235,8 @@ def create_iptrunk():
             init
             >> create_subscription
             >> store_process_subscription(Target.CREATE)
-            >> get_info_from_ipam
             >> initialize_subscription
+            >> get_info_from_ipam
             >> provision_ip_trunk_iface_dry
             >> await_pp_results
             >> confirm_pp_results
diff --git a/test/conftest.py b/test/conftest.py
index e714bf98..0edc5f13 100644
--- a/test/conftest.py
+++ b/test/conftest.py
@@ -58,6 +58,32 @@ def configuration_data():
                         "mask": 126
                     },
                     "domain_name": ".geantip"
+                },
+                "SI": {
+                    "V4": {
+                        "containers": ["10.255.253.128/25"],
+                        "networks": [],
+                        "mask": 31
+                        },
+                    "V6": {
+                        "containers": [],
+                        "networks": [],
+                        "mask": 126
+                        },
+                    "domain_name": ".geantip"
+                },
+                "LT_IAS": {
+                    "V4": {
+                        "containers": ["10.255.255.0/24"],
+                        "networks": [],
+                        "mask": 31
+                        },
+                    "V6": {
+                        "containers": ["dead:beef:cc::/48"],
+                        "networks": [],
+                        "mask": 126
+                        },
+                    "domain_name": ".geantip"
                 }
             },
             "PROVISIONING_PROXY": {
-- 
GitLab