diff --git a/gso/workflows/device/terminate_device.py b/gso/workflows/device/terminate_device.py index 30da64eb0dab8abc251b48d056c325b51abd9d6a..7659e78d8d5c05582f7964757203825a88c8ec6b 100644 --- a/gso/workflows/device/terminate_device.py +++ b/gso/workflows/device/terminate_device.py @@ -1,8 +1,10 @@ +import ipaddress from orchestrator.forms import FormPage from orchestrator.forms.validators import Label from orchestrator.targets import Target from orchestrator.types import InputForm, SubscriptionLifecycle, UUIDstr from orchestrator.workflow import done, init, step, workflow +from gso.services import ipam from orchestrator.workflows.steps import ( resync, set_status, @@ -29,11 +31,42 @@ def _deprovision_in_user_management_system(fqdn: str) -> str: pass -@step("Deprovision device") -def deprovision_user(subscription: Device) -> None: - # _deprovision_in_user_management_system(subscription.user.user_id) - pass +@step("Deprovision loopback IPs from IPAM/DNS") +def deprovision_loopback_ips(subscription: Device) -> None: + input_host_addresses = ipam.HostAddresses( + v4=ipaddress.ip_address(subscription.device.device_lo_ipv4_address), + v6=ipaddress.ip_address(subscription.device.device_lo_ipv6_address) + ) + fqdn_as_list=subscription.device.device_fqdn.split(".") + hostname=str(fqdn_as_list[0])+"."+str(fqdn_as_list[1])+"."+str(fqdn_as_list[2]) + lo0_name="lo0."+hostname + host_addresses=ipam.delete_service_host( + hostname=lo0_name, + host_addresses=input_host_addresses, + cname_aliases=[hostname], + service_type='LO' + ) + return {'cleanup_for': hostname } + + +@step("Deprovision SI- interface IPs from IPAM/DNS") +def deprovision_si_ips(subscription: Device) -> None: + service_network=ipam.delete_service_network( + network=ipaddress.ip_network(subscription.device.device_si_ipv4_network) + ,service_type='SI') + return {'service_network': service_network} + +@step("Deprovision LT- (IAS) interface IPs from IPAM/DNS") +def deprovision_lt_ips(subscription: Device) -> None: + service_network_v4=ipam.delete_service_network( + network=ipaddress.ip_network(subscription.device.device_ias_lt_ipv4_network), + service_type='LT_IAS') + service_network_v6=ipam.delete_service_network( + network=ipaddress.ip_network(subscription.device.device_ias_lt_ipv6_network), + service_type='LT_IAS') + return {'service_network_v4': service_network_v4, + 'service_network_v6': service_network_v6} @workflow( "Terminate device", @@ -46,7 +79,9 @@ def terminate_device(): init >> store_process_subscription(Target.TERMINATE) >> unsync - >> deprovision_user + >> deprovision_loopback_ips + >> deprovision_si_ips + >> deprovision_lt_ips >> set_status(SubscriptionLifecycle.TERMINATED) >> resync >> done