From d3ce0f4780eecd327d45994667686fa64276ca11 Mon Sep 17 00:00:00 2001 From: Karel van Klink <karel.vanklink@geant.org> Date: Thu, 4 May 2023 10:26:56 +0200 Subject: [PATCH] update workflow and provisioning proxy --- gso/services/provisioning_proxy.py | 11 +++++---- gso/workflows/device/create_device.py | 34 ++++++++++++++++++++------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/gso/services/provisioning_proxy.py b/gso/services/provisioning_proxy.py index d1dd1864..5bdf205d 100644 --- a/gso/services/provisioning_proxy.py +++ b/gso/services/provisioning_proxy.py @@ -1,6 +1,6 @@ import logging -from gso.products.product_types.device import DeviceBlock +from gso.products.product_blocks.device import DeviceBlockProvisioning from gso import settings import requests @@ -8,7 +8,8 @@ logger = logging.getLogger(__name__) def provision_node( - node_subscription_params: DeviceBlock, + node_subscription_params: DeviceBlockProvisioning, + callback_url: str, dry_run: bool = True): oss = settings.load_oss_params() pp_params = oss.PROVISIONING_PROXY @@ -17,12 +18,14 @@ def provision_node( logger.debug(f'[disabled] provisioning node {node_subscription_params}') parameters = { - 'callback': oss.GENERAL.public_hostname, # TODO: implement + 'callback': callback_url, + 'dry_run': dry_run, 'device': node_subscription_params.dict() } r = requests.post( f'https://{pp_params.api_base}' f'/api/device', - params=parameters) + json=parameters) r.raise_for_status() + requests.post() \ No newline at end of file diff --git a/gso/workflows/device/create_device.py b/gso/workflows/device/create_device.py index d3e0bfd0..2a492c39 100644 --- a/gso/workflows/device/create_device.py +++ b/gso/workflows/device/create_device.py @@ -11,8 +11,10 @@ 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 gso import settings +from gso.services import provisioning_proxy from gso.products.product_types import device -# from gso.services import ipam, provisioning_proxy def initial_input_form_generator(product_name: str) -> FormGenerator: @@ -96,12 +98,16 @@ def initialize_subscription( @step("Provision device [DRY RUN]") -def provision_device_dry( - subscription: device.DeviceProvisioning, - fqdn: str, - ts_address: str, - ts_port: str -) -> State: +def provision_device_dry(subscription: device.DeviceProvisioning) -> State: + # TODO: verify this URL + callback_url = f'{settings.load_oss_params().GENERAL.public_hostname}' \ + f'/api/process/{subscription.product.product_id}/resume' + + proxy_result = provisioning_proxy.provision_node( + subscription.device, + callback_url + ) + # import ansible_runner # # r = ansible_runner.run( @@ -130,7 +136,7 @@ def provision_device_dry( # dry_run=True) # TODO: figure out what to return when we are suspending & waiting # for the provisioning-proxy to call back - return {"return_code": 0} + return {"subscription": proxy_result} @inputstep("Confirm step", assignee="CHANGES") @@ -150,6 +156,16 @@ def provision_device_real( ts_address: str, ts_port: str ) -> State: + + # TODO: generate actual callback URL + callback_url = settings.load_oss_params().GENERAL.public_hostname + + provisioning_proxy.provision_node( + subscription.device, + callback_url, + False + ) + # import ansible_runner # # r = ansible_runner.run( @@ -176,7 +192,7 @@ def provision_device_real( # node_subscription_params=subscription) # TODO: figure out what to return when we are suspending & waiting # for the provisioning-proxy to call back - return {"return_code": 0} + return {"subscription": subscription} @workflow( -- GitLab