From fb824ba794d4d755fb92179da68e43d18589e71f Mon Sep 17 00:00:00 2001 From: Karel van Klink <karel.vanklink@geant.org> Date: Tue, 18 Jul 2023 14:29:26 +0200 Subject: [PATCH] update intake form of device termination workflow added two checkboxes that take care of removing config, and cleaning up IPAM made the corresponding steps in the workflow conditional, so they are skipped if unchecked --- gso/translations/en-GB.json | 4 ++- gso/workflows/device/terminate_device.py | 32 ++++++++++++++++-------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/gso/translations/en-GB.json b/gso/translations/en-GB.json index 845ad7320..a4ee0dfca 100644 --- a/gso/translations/en-GB.json +++ b/gso/translations/en-GB.json @@ -29,7 +29,9 @@ "iptrunk_sideB_ae_iface": "Aggregated Ethernet interface name", "iptrunk_sideB_ae_geant_a_sid": "GÉANT A-SID", "iptrunk_sideB_ae_members": "Aggregated Ethernet member interface names", - "iptrunk_sideB_ae_members_descriptions": "Aggregated Ethernet member interface descriptions" + "iptrunk_sideB_ae_members_descriptions": "Aggregated Ethernet member interface descriptions", + "remove_configuration": "Remove configuration from the device", + "clean_up_ipam": "Clean up related entries in IPAM" } }, "workflow": { diff --git a/gso/workflows/device/terminate_device.py b/gso/workflows/device/terminate_device.py index b7564d2a1..1ad4a487d 100644 --- a/gso/workflows/device/terminate_device.py +++ b/gso/workflows/device/terminate_device.py @@ -5,7 +5,7 @@ from orchestrator.forms import FormPage from orchestrator.forms.validators import Label from orchestrator.targets import Target from orchestrator.types import FormGenerator, SubscriptionLifecycle, UUIDstr -from orchestrator.workflow import StepList, done, init, step, workflow +from orchestrator.workflow import StepList, conditional, done, init, step, workflow from orchestrator.workflows.steps import resync, set_status, store_process_subscription, unsync from orchestrator.workflows.utils import wrap_modify_initial_input_form @@ -21,14 +21,15 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator: subscription = Device.from_subscription(subscription_id) class TerminateForm(FormPage): - are_you_sure: Label = f"Are you sure you want to remove {subscription.description}?" # type: ignore + termination_label: Label = ( + f"Please confirm whether configuration should get removed from the {subscription.device_type}, and " + "whether IPAM resources should be released." # type: ignore + ) + remove_configuration: bool = True + clean_up_ipam: bool = True - return TerminateForm # type: ignore - - -def _deprovision_in_user_management_system(fqdn: str) -> None: - logger.debug(fqdn) - pass + user_input = yield TerminateForm + return user_input.dict() @step("Deprovision loopback IPs from IPAM/DNS") @@ -74,19 +75,28 @@ def deprovision_lt_ips(subscription: Device) -> dict[str, V4ServiceNetwork | V6S } +@step("Remove configuration from device") +def remove_config_from_device() -> None: + pass + + @workflow( "Terminate device", initial_input_form=wrap_modify_initial_input_form(initial_input_form_generator), target=Target.TERMINATE, ) def terminate_device() -> StepList: + run_ipam_steps = conditional(lambda state: state.get("clean_up_ipam", True)) + run_config_steps = conditional(lambda state: state.get("remove_configuration", True)) + + ipam_steps = StepList([deprovision_loopback_ips, deprovision_si_ips, deprovision_lt_ips]) + return ( init >> store_process_subscription(Target.TERMINATE) >> unsync - >> deprovision_loopback_ips - >> deprovision_si_ips - >> deprovision_lt_ips + >> run_ipam_steps(ipam_steps) + >> run_config_steps(remove_config_from_device) >> set_status(SubscriptionLifecycle.TERMINATED) >> resync >> done -- GitLab