Skip to content
Snippets Groups Projects
Commit b8b6762c authored by Karel van Klink's avatar Karel van Klink :smiley_cat:
Browse files

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
parent 4594d1ed
Branches
Tags
1 merge request!50update intake form of device termination workflow
......@@ -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": {
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment