From 4c2f7b7bf0b36e35c71ddd79cd56e3e8c87ddd63 Mon Sep 17 00:00:00 2001 From: Mohammad Torkashvand <mohammad.torkashvand@geant.org> Date: Tue, 3 Dec 2024 16:14:36 +0100 Subject: [PATCH] add anonymous_indifferent_lso_interaction step --- gso/services/lso_client.py | 22 ++++++++++++++++++++++ gso/utils/workflow_steps.py | 17 +++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/gso/services/lso_client.py b/gso/services/lso_client.py index 6bd8e41d..29be36d9 100644 --- a/gso/services/lso_client.py +++ b/gso/services/lso_client.py @@ -267,3 +267,25 @@ def anonymous_lso_interaction(provisioning_step: Step, validation_step: Step = _ ) >> _clean_state ) + + +def anonymous_indifferent_lso_interaction(provisioning_step: Step) -> StepList: + """Interact with the provisioning proxy :term:`LSO` without any user input. + + Similar to the anonymous LSO interaction, but indifferent about the outcome of the Ansible playbook that is executed + + Args: + provisioning_step: A workflow step to remotely provision a subscription. + """ + return ( + begin + >> provisioning_step + >> _inventory_is_not_empty( + callback_step( + name="Running Ansible playbook", + action_step=_execute_playbook, + validate_step=_ignore_results, + ) + ) + >> _clean_state + ) diff --git a/gso/utils/workflow_steps.py b/gso/utils/workflow_steps.py index aee52b51..721e1845 100644 --- a/gso/utils/workflow_steps.py +++ b/gso/utils/workflow_steps.py @@ -17,7 +17,7 @@ from pydantic_forms.validators import Label from gso.products.product_blocks.router import RouterRole from gso.products.product_types.iptrunk import Iptrunk from gso.services.kentik_client import KentikClient, NewKentikDevice -from gso.services.lso_client import LSOState, indifferent_lso_interaction +from gso.services.lso_client import LSOState, anonymous_indifferent_lso_interaction, indifferent_lso_interaction from gso.settings import load_oss_params from gso.utils.helpers import generate_inventory_for_routers from gso.utils.shared_enums import Vendor @@ -416,6 +416,17 @@ def stop_moodi() -> StepList: """Stop Moodi Telemetry monitoring on demand.""" host = load_oss_params().MOODI.host + @inputstep("Confirm stopping on-demand monitoring.", assignee=Assignee("SYSTEM")) + def _confirm_stopping_moodi(state: State) -> FormGenerator: + class ConfirmStoppingPage(FormPage): + model_config = ConfigDict() + + run_results: Label = "Please confirm that you want to stop Moodi." + + yield ConfirmStoppingPage + + return state + @step("Stop Moodi") def _stop_moodi(subscription: dict[str, Any]) -> LSOState: return { @@ -424,7 +435,9 @@ def stop_moodi() -> StepList: "extra_vars": {"subscription": subscription}, } - return _is_moodi_enabled(indifferent_lso_interaction(_stop_moodi)) + return _is_moodi_enabled(_confirm_stopping_moodi) >> _is_moodi_enabled( + anonymous_indifferent_lso_interaction(_stop_moodi) + ) @step("Create Kentik device") -- GitLab