diff --git a/geant_service_orchestrator/services/ipam.py b/geant_service_orchestrator/services/ipam.py index 30d2a07b5edbeb4b5fb8ef9b7c45b7954b0737b8..7c02a4488d66500e0062e224c27a4da7fae636fb 100644 --- a/geant_service_orchestrator/services/ipam.py +++ b/geant_service_orchestrator/services/ipam.py @@ -23,8 +23,8 @@ def new_service_networks( v6=ipaddress.IPv6Network('dead:beef::/120')) -def new_host_address(fqdn: str, networks: ServiceNetworks) -> HostAddresses: +def new_device_lo_address(fqdn: str, networks: ServiceNetworks) -> HostAddresses: # TODO: load from ipam return HostAddresses( - v4=ipaddress.IPv4Address('10.0.0.1'), - v6=ipaddress.IPv6Address('dead:beef::1')) + v4=ipaddress.IPv4Address('10.10.10.10'), + v6=ipaddress.IPv6Address('fc00:798:aa:1::10')) diff --git a/geant_service_orchestrator/workflows/device/create_device.py b/geant_service_orchestrator/workflows/device/create_device.py index 5d333103e1e08dfd9eabb89717fb5734e10125e6..d3fe7af8c214f158c978345cf575bbd66a2b1abd 100644 --- a/geant_service_orchestrator/workflows/device/create_device.py +++ b/geant_service_orchestrator/workflows/device/create_device.py @@ -1,8 +1,6 @@ -# from typing import List, Optional +import ipaddress from uuid import uuid4 -# from orchestrator.db.models import ProductTable, SubscriptionTable -# from orchestrator.forms.validators import Choice, choice_list from orchestrator.forms import FormPage from orchestrator.targets import Target from orchestrator.workflow import inputstep @@ -13,9 +11,8 @@ from orchestrator.workflow import done, init, step, workflow from orchestrator.workflows.steps import resync, set_status from orchestrator.workflows.steps import store_process_subscription from orchestrator.workflows.utils import wrap_create_initial_input_form -from products.product_types.device import DeviceInactive, DeviceProvisioning -from products.product_types.device import DeviceVendor -import ipaddress +from geant_service_orchestrator.products.product_types import device +from geant_service_orchestrator.services import ipam def initial_input_form_generator(product_name: str) -> FormGenerator: @@ -26,7 +23,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: fqdn: str ts_address: ipaddress.IPv4Address ts_port: int - device_vendor: DeviceVendor + device_vendor: device.DeviceVendor user_input = yield CreateDeviceForm @@ -35,7 +32,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: @step("Create subscription") def create_subscription(product: UUIDstr) -> State: - subscription = DeviceInactive.from_product_id(product, uuid4()) + subscription = device.DeviceInactive.from_product_id(product, uuid4()) return { "subscription": subscription, @@ -44,26 +41,32 @@ def create_subscription(product: UUIDstr) -> State: @step("Get information from IPAM ") -def get_info_from_ipam(subscription: DeviceInactive) -> State: - subscription.device.lo_ipv4_address = "10.10.10.10" - subscription.device.lo_ipv6_address = "fc00:798:aa:1::10" +def get_info_from_ipam(subscription: device.DeviceInactive) -> State: + lo = ipam.new_device_lo_address() + subscription.device.lo_ipv4_address = lo.v4 + subscription.device.lo_ipv6_address = lo.v6 + # TODO: get info about how these are to be generated subscription.device.lo_iso_address = "49.51e5.0001.0620.4009.6047.00" subscription.device.si_ipv4_network = "192.168.0.0/31" subscription.device.ias_lt_ipv4_network = "192.168.1.0/31" subscription.device.ias_lt_ipv6_network = "fc00:798:1::150/126" - return {"subscription": subscription} @step("get information about SNMP") -def get_snmp_info(subscription: DeviceInactive) -> State: - subscription.device.site_country = "Spain" - subscription.device.site_city = "Barcelona" - subscription.device.site_country_code = "ES" - subscription.device.site_latitude = "41.3743" - subscription.device.site_longitude = "2.1328" +def get_snmp_info(subscription: device.DeviceInactive) -> State: + country = 'Spain' + city = 'Barcelona' + country_code = 'ES' + latitude = '41.3743' + longitude = '2.1328' + subscription.device.site_country = country + subscription.device.site_city = city + subscription.device.site_country_code = country_code + subscription.device.site_latitude = latitude + subscription.device.site_longitude = longitude subscription.device.snmp_location = ( - "BARCELONA,SPAIN,[41.3743,2.1328]" # TODO: Duplicated data? + f'{city.upper()},{country.upper()}[{latitude},{longitude}]' ) return {"subscription": subscription} @@ -71,11 +74,11 @@ def get_snmp_info(subscription: DeviceInactive) -> State: @step("Initialize subscription") def initialize_subscription( - subscription: DeviceInactive, + subscription: device.DeviceInactive, fqdn: str, ts_address: ipaddress.IPv4Address, ts_port: str, - device_vendor: DeviceVendor + device_vendor: device.DeviceVendor ) -> State: subscription.device.fqdn = fqdn subscription.device.ts_address = str(ts_address) @@ -83,7 +86,7 @@ def initialize_subscription( subscription.device_vendor = device_vendor subscription.description = f"Device {fqdn} type \ ({subscription.device_type})" - subscription = DeviceProvisioning.from_other_lifecycle( + subscription = device.DeviceProvisioning.from_other_lifecycle( subscription, SubscriptionLifecycle.PROVISIONING ) @@ -92,7 +95,7 @@ def initialize_subscription( @step("Provision device [DRY RUN]") def provision_device_dry( - subscription: DeviceProvisioning, fqdn: str, ts_address: str, ts_port: str + subscription: device.DeviceProvisioning, fqdn: str, ts_address: str, ts_port: str ) -> State: import ansible_runner @@ -131,7 +134,7 @@ def confirm_step() -> FormGenerator: @step("Provision device [FOR REAL]") def provision_device_real( - subscription: DeviceProvisioning, fqdn: str, ts_address: str, ts_port: str + subscription: device.DeviceProvisioning, fqdn: str, ts_address: str, ts_port: str ) -> State: import ansible_runner