diff --git a/geant_service_orchestrator/workflows/device/create_device.py b/geant_service_orchestrator/workflows/device/create_device.py index cd65fefb12198f43c25398f57f28022891c7b348..1a745762dd216eb4c870eb2db9e1901b3a509c50 100644 --- a/geant_service_orchestrator/workflows/device/create_device.py +++ b/geant_service_orchestrator/workflows/device/create_device.py @@ -5,6 +5,8 @@ from uuid import uuid4 # from orchestrator.forms.validators import Choice, choice_list from orchestrator.forms import FormPage from orchestrator.targets import Target +from orchestrator.workflow import inputstep +from orchestrator.forms.validators import Accept from orchestrator.types import FormGenerator, State from orchestrator.types import SubscriptionLifecycle, UUIDstr from orchestrator.workflow import done, init, step, workflow @@ -30,16 +32,6 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: return user_input.dict() -def confirmation_form() -> FormGenerator: - class ConfirmActionForm(FormPage): - class Config: - title = "Confirm your action" - - choice: bool - - user_input = yield ConfirmActionForm - - return user_input.dict() @step("Create subscription") def create_subscription(product: UUIDstr) -> State: @@ -126,11 +118,45 @@ def provision_device_dry( return {"output": out_splitted} -@step("Confirm provisioning") -def confirm_provisioning_step() -> State: - user_input = confirmation_form() - if not user_input.choice: - exit +@inputstep("Confirm step", assignee ="CHANGES") +def confirm_step() -> FormGenerator: + class ConfirmForm(FormPage): + class Config: + title = "confirm" + + + confirm: "Accept" + + user_input = yield ConfirmForm + + return {"confirm": user_input.confirm} + +@step("Provision device [FOR REAL]") +def provision_device_real( + subscription: DeviceProvisioning, fqdn: str, ts_address: str, ts_port: str +) -> State: + import ansible_runner + + r = ansible_runner.run( + private_data_dir="/opt/geant-gap-ansible", + playbook="base_config.yaml", + inventory=subscription.device.fqdn, + extravars={ + "lo_ipv4_address": str(subscription.device.lo_ipv4_address), + "lo_ipv6_address": str(subscription.device.lo_ipv6_address), + "lo_iso_address": subscription.device.lo_iso_address, + "snmp_location": subscription.device.snmp_location, + "si_ipv4_network": str(subscription.device.si_ipv4_network), + "lt_ipv4_network": str(subscription.device.ias_lt_ipv4_network), + "lt_ipv6_network": str(subscription.device.ias_lt_ipv6_network), + "site_country_code": subscription.device.site_country_code, + "verb": "deploy", + }, + ) + out = r.stdout.read() + out_splitted = out.splitlines() + + return {"output": out_splitted} @workflow( "Create Device", @@ -147,7 +173,8 @@ def create_device(): >> get_snmp_info >> initialize_subscription >> provision_device_dry - >> confirm_provisioning_step + >> confirm_step + >> provision_device_real >> set_status(SubscriptionLifecycle.ACTIVE) >> resync >> done