diff --git a/gso/services/provisioning_proxy.py b/gso/services/provisioning_proxy.py index d1dd1864e3b935d0fc5e688ce50aae751891ed52..5bdf205d461287b74ed21fc572c0d5b723de7da0 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 d3e0bfd0055f56688cfc01a32b0697e852dee0d8..2a492c392fd1988411b8ea79383914cf56ecb18f 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(