diff --git a/gso/oss-params-example.json b/gso/oss-params-example.json index 4f4bca6c8c29ea38ef67272251fe21409685296b..5f533ef63b3ef1e319a8a49cbc294077a5614733 100644 --- a/gso/oss-params-example.json +++ b/gso/oss-params-example.json @@ -12,18 +12,86 @@ "password": "robot-user-password" }, "LO": { - "V4": {"containers": ["1.1.0.0/24"], "networks": [], "mask": 32}, - "V6": {"containers": ["dead:beef::/64"], "networks": [], "mask": 128}, + "V4": { + "containers": [ + "1.1.0.0/24" + ], + "networks": [], + "mask": 32 + }, + "V6": { + "containers": [ + "dead:beef::/64" + ], + "networks": [], + "mask": 128 + }, "domain_name": ".lo" }, "TRUNK": { - "V4": {"containers": ["1.1.1.0/24"], "networks": [], "mask": 31}, - "V6": {"containers": ["dead:beef::/64"], "networks": [], "mask": 126}, + "V4": { + "containers": [ + "1.1.1.0/24" + ], + "networks": [], + "mask": 31 + }, + "V6": { + "containers": [ + "dead:beef::/64" + ], + "networks": [], + "mask": 126 + }, "domain_name": ".trunk" }, "GEANT_IP": { - "V4": {"containers": ["1.1.2.0/24"], "networks": [], "mask": 31}, - "V6": {"containers": ["dead:beef::/64"], "networks": [], "mask": 126}, + "V4": { + "containers": [ + "1.1.2.0/24" + ], + "networks": [], + "mask": 31 + }, + "V6": { + "containers": [ + "dead:beef::/64" + ], + "networks": [], + "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" } }, diff --git a/gso/settings.py b/gso/settings.py index 8e8ad08f44ec1efdd8c3860e4e602e9e4d23e7cd..016b571b95218218cad8039445042d967965e85d 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 d7646e5da5b0ff2f484372266abf905d5302206e..8168f0cf285646084ceebac9b67ccd6b403286e7 100644 --- a/gso/workflows/device/create_device.py +++ b/gso/workflows/device/create_device.py @@ -19,6 +19,7 @@ from gso.products.product_types import device from gso.products.product_types.device import DeviceInactive, \ DeviceProvisioning from gso.products.product_types.site import Site +# noinspection PyProtectedMember from gso.services import _ipam from gso.services import provisioning_proxy from gso.services.provisioning_proxy import await_pp_results, \ @@ -95,9 +96,15 @@ 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 1c096575bb674c9e879c22c147fbc664fac8f352..bf7934bbcb54479e9272bb0d2733ad5897eee00a 100644 --- a/gso/workflows/iptrunk/create_iptrunk.py +++ b/gso/workflows/iptrunk/create_iptrunk.py @@ -17,7 +17,8 @@ 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 +# noinspection PyProtectedMember +from gso.services import provisioning_proxy, _ipam from gso.services.provisioning_proxy import confirm_pp_results, \ await_pp_results @@ -91,12 +92,17 @@ def create_subscription(product: UUIDstr) -> State: @step('Get information from IPAM') -def get_info_from_ipam(subscription: IptrunkInactive) -> State: - # TODO: get info about how these should be generated +def get_info_from_ipam(subscription: IptrunkProvisioning) -> State: 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 +241,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 e714bf98ee8be66741b220731ba07ae1693ab16b..0edc5f13f9a40f199fe3e2d696b16d4d17b0c603 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": {