From ba99996eab4425395a6ba3baa45905e390af64f5 Mon Sep 17 00:00:00 2001 From: Karel van Klink <karel.vanklink@geant.org> Date: Tue, 12 Mar 2024 15:37:37 +0100 Subject: [PATCH] add input step that prompts for Sharepoint checklist creation Adds new entry to oss-params for sharepoint checklist site url --- gso/oss-params-example.json | 3 +++ gso/settings.py | 8 +++++++ gso/workflows/router/create_router.py | 24 ++++++++++++++++++++- test/workflows/router/test_create_router.py | 3 +++ 4 files changed, 37 insertions(+), 1 deletion(-) diff --git a/gso/oss-params-example.json b/gso/oss-params-example.json index 51702b59..ff6eb33d 100644 --- a/gso/oss-params-example.json +++ b/gso/oss-params-example.json @@ -91,5 +91,8 @@ "starttls_enabled": true, "smtp_username": "username", "smtp_password": "password" + }, + "SHAREPOINT": { + "checklist_site_url": "https://example.sharepoint.com/sites/example-site" } } diff --git a/gso/settings.py b/gso/settings.py index 2c86b723..a49b3645 100644 --- a/gso/settings.py +++ b/gso/settings.py @@ -166,6 +166,13 @@ class EmailParams(BaseSettings): smtp_password: str | None +class SharepointParams(BaseSettings): + """Settings for different Sharepoint sites.""" + + # TODO: Stricter typing after pydantic 2.x upgrade + checklist_site_url: str + + class OSSParams(BaseSettings): """The set of parameters required for running :term:`GSO`.""" @@ -177,6 +184,7 @@ class OSSParams(BaseSettings): CELERY: CeleryParams THIRD_PARTY_API_KEYS: dict[str, str] EMAIL: EmailParams + SHAREPOINT: SharepointParams def load_oss_params() -> OSSParams: diff --git a/gso/workflows/router/create_router.py b/gso/workflows/router/create_router.py index 30e7175e..978e33ba 100644 --- a/gso/workflows/router/create_router.py +++ b/gso/workflows/router/create_router.py @@ -14,12 +14,13 @@ from pydantic import validator from pydantic_forms.core import ReadOnlyField from gso.products.product_blocks.router import RouterRole -from gso.products.product_types.router import RouterInactive +from gso.products.product_types.router import RouterInactive, RouterProvisioning from gso.products.product_types.site import Site from gso.services import infoblox, subscriptions from gso.services.crm import get_customer_by_name from gso.services.netbox_client import NetboxClient from gso.services.provisioning_proxy import pp_interaction +from gso.settings import load_oss_params from gso.utils.helpers import generate_fqdn, iso_from_ipv4 from gso.utils.shared_enums import PortNumber, Vendor from gso.utils.workflow_steps import deploy_base_config_dry, deploy_base_config_real, run_checks_after_base_config @@ -222,6 +223,26 @@ def prompt_insert_in_radius(subscription: RouterInactive) -> FormGenerator: return {} +@inputstep("Prompt for new Sharepoint checklist", assignee=Assignee.SYSTEM) +def prompt_start_new_checklist(subscription: RouterProvisioning) -> FormGenerator: + """Prompt the operator to start a new checklist in Sharepoint for approving this new router.""" + oss_params = load_oss_params() + + class SharepointPrompt(FormPage): + class Config: + title = "Start new checklist" + + info_label_1: Label = ( + f"Visit {oss_params.SHAREPOINT.checklist_site_url} and start a new Sharepoint checklist for " + f"{subscription.router.router_fqdn}." # type: ignore[assignment] + ) + info_label_2: Label = "Once this is done, click proceed to finish the workflow." # type: ignore[assignment] + + yield SharepointPrompt + + return {} + + @workflow( "Create router", initial_input_form=wrap_create_initial_input_form(initial_input_form_generator), @@ -254,6 +275,7 @@ def create_router() -> StepList: >> router_is_nokia(create_netbox_device) >> pp_interaction(run_checks_after_base_config) >> set_status(SubscriptionLifecycle.PROVISIONING) + >> prompt_start_new_checklist >> resync >> done ) diff --git a/test/workflows/router/test_create_router.py b/test/workflows/router/test_create_router.py index fbfd09e4..62808258 100644 --- a/test/workflows/router/test_create_router.py +++ b/test/workflows/router/test_create_router.py @@ -94,6 +94,9 @@ def test_create_nokia_router_success( result, step_log = assert_pp_interaction_success(result, process_stat, step_log) + assert_suspended(result) + result, step_log = resume_workflow(process_stat, step_log, input_data=USER_CONFIRM_EMPTY_FORM) + assert_complete(result) state = extract_state(result) -- GitLab