From ab9ed2c161294bf1967e3de71939d9ba5cdaeefa Mon Sep 17 00:00:00 2001 From: Mohammad Torkashvand <mohammad.torkashvand@geant.org> Date: Tue, 29 Apr 2025 17:48:07 +0200 Subject: [PATCH 1/2] add start and terminate workflow tasks for routers --- ...b_add_moodi_run_and_terminate_workflow_.py | 45 +++++++++++++++++++ gso/workflows/__init__.py | 2 + gso/workflows/router/run_moodi.py | 34 ++++++++++++++ gso/workflows/router/terminate_moodi.py | 34 ++++++++++++++ 4 files changed, 115 insertions(+) create mode 100644 gso/migrations/versions/2025-04-29_e86c16d809ab_add_moodi_run_and_terminate_workflow_.py create mode 100644 gso/workflows/router/run_moodi.py create mode 100644 gso/workflows/router/terminate_moodi.py diff --git a/gso/migrations/versions/2025-04-29_e86c16d809ab_add_moodi_run_and_terminate_workflow_.py b/gso/migrations/versions/2025-04-29_e86c16d809ab_add_moodi_run_and_terminate_workflow_.py new file mode 100644 index 000000000..6bbdc287d --- /dev/null +++ b/gso/migrations/versions/2025-04-29_e86c16d809ab_add_moodi_run_and_terminate_workflow_.py @@ -0,0 +1,45 @@ +"""add moodi run and terminate workflow tasks for routers. + +Revision ID: e86c16d809ab +Revises: a3177c5f9641 +Create Date: 2025-04-29 17:14:51.627317 + +""" +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = 'e86c16d809ab' +down_revision = 'a3177c5f9641' +branch_labels = None +depends_on = None + + +from orchestrator.migrations.helpers import create_workflow, delete_workflow + +new_workflows = [ + { + "name": "run_moodi", + "target": "SYSTEM", + "description": "Run Moodi Service", + "product_type": "Router" + }, + { + "name": "terminate_moodi", + "target": "SYSTEM", + "description": "Terminate Moodi Service", + "product_type": "Router" + } +] + + +def upgrade() -> None: + conn = op.get_bind() + for workflow in new_workflows: + create_workflow(conn, workflow) + + +def downgrade() -> None: + conn = op.get_bind() + for workflow in new_workflows: + delete_workflow(conn, workflow["name"]) diff --git a/gso/workflows/__init__.py b/gso/workflows/__init__.py index 8b1f4065d..bc4fe9bcd 100644 --- a/gso/workflows/__init__.py +++ b/gso/workflows/__init__.py @@ -54,6 +54,8 @@ LazyWorkflowInstance("gso.workflows.router.create_imported_router", "create_impo LazyWorkflowInstance("gso.workflows.router.validate_router", "validate_router") LazyWorkflowInstance("gso.workflows.router.promote_p_to_pe", "promote_p_to_pe") LazyWorkflowInstance("gso.workflows.router.modify_kentik_license", "modify_router_kentik_license") +LazyWorkflowInstance("gso.workflows.router.run_moodi", "run_moodi") +LazyWorkflowInstance("gso.workflows.router.terminate_moodi", "terminate_moodi") # Switch workflows LazyWorkflowInstance("gso.workflows.switch.create_switch", "create_switch") diff --git a/gso/workflows/router/run_moodi.py b/gso/workflows/router/run_moodi.py new file mode 100644 index 000000000..96f82988a --- /dev/null +++ b/gso/workflows/router/run_moodi.py @@ -0,0 +1,34 @@ +"""Run Moodi monitoring service.""" + +from orchestrator.targets import Target +from orchestrator.workflow import StepList, begin, conditional, done, step, workflow +from orchestrator.workflows.steps import store_process_subscription +from orchestrator.workflows.utils import wrap_modify_initial_input_form +from pydantic_forms.types import State, UUIDstr + +from gso.products.product_types.router import Router +from gso.utils.shared_enums import Vendor +from gso.utils.workflow_steps import start_moodi + + +@step("Prepare required keys in state") +def prepare_state(subscription_id: UUIDstr) -> State: + """Add required keys to the state for the workflow to run successfully.""" + router = Router.from_subscription(subscription_id) + + return {"subscription": router} + + +@workflow("Run Moodi Service", target=Target.SYSTEM, initial_input_form=wrap_modify_initial_input_form(None)) +def run_moodi() -> StepList: + """Run Moodi monitoring service.""" + is_juniper_router = conditional(lambda state: state["subscription"]["router"]["vendor"] == Vendor.JUNIPER) + + return ( + begin + >> store_process_subscription(Target.SYSTEM) + >> prepare_state + >> is_juniper_router(done) + >> start_moodi() + >> done + ) diff --git a/gso/workflows/router/terminate_moodi.py b/gso/workflows/router/terminate_moodi.py new file mode 100644 index 000000000..dc21510bd --- /dev/null +++ b/gso/workflows/router/terminate_moodi.py @@ -0,0 +1,34 @@ +"""Terminate Moodi monitoring service.""" + +from orchestrator.targets import Target +from orchestrator.workflow import StepList, begin, conditional, done, step, workflow +from orchestrator.workflows.steps import store_process_subscription +from orchestrator.workflows.utils import wrap_modify_initial_input_form +from pydantic_forms.types import State, UUIDstr + +from gso.products.product_types.router import Router +from gso.utils.shared_enums import Vendor +from gso.utils.workflow_steps import stop_moodi + + +@step("Prepare required keys in state") +def prepare_state(subscription_id: UUIDstr) -> State: + """Add required keys to the state for the workflow to run successfully.""" + router = Router.from_subscription(subscription_id) + + return {"subscription": router} + + +@workflow("Terminate Moodi Service", target=Target.SYSTEM, initial_input_form=wrap_modify_initial_input_form(None)) +def terminate_moodi() -> StepList: + """Terminate Moodi monitoring service.""" + is_juniper_router = conditional(lambda state: state["subscription"]["router"]["vendor"] == Vendor.JUNIPER) + + return ( + begin + >> store_process_subscription(Target.SYSTEM) + >> prepare_state + >> is_juniper_router(done) + >> stop_moodi() + >> done + ) -- GitLab From 2ce178063619978ec640fb7d500368d50dd47174 Mon Sep 17 00:00:00 2001 From: Mohammad Torkashvand <mohammad.torkashvand@geant.org> Date: Tue, 29 Apr 2025 17:55:47 +0200 Subject: [PATCH 2/2] add translation for start/terminate moodi wfs --- gso/translations/en-GB.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gso/translations/en-GB.json b/gso/translations/en-GB.json index b1d6a36a4..6944d9de2 100644 --- a/gso/translations/en-GB.json +++ b/gso/translations/en-GB.json @@ -145,6 +145,8 @@ "promote_p_to_pe": "Promote P to PE", "redeploy_base_config": "Redeploy base config", "redeploy_vrf": "Redeploy VRF router list", + "start_moodi": "Start Moodi", + "terminate_moodi": "Terminate Moodi", "task_check_site_connectivity": "Check NETCONF connectivity of a Site", "task_clean_old_tasks": "Remove old cleanup tasks", "task_create_partners": "Create partner task", -- GitLab