From d323e78d48ace1eed632a5c95bc09e32fd8a444d Mon Sep 17 00:00:00 2001 From: Mohammad Torkashvand <mohammad.torkashvand@geant.org> Date: Tue, 5 Nov 2024 13:44:15 +0100 Subject: [PATCH] added moodi telemetry to create EdgePort wf --- gso/settings.py | 1 + gso/utils/workflow_steps.py | 46 +++++++++++++-------- gso/workflows/edge_port/create_edge_port.py | 3 ++ 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/gso/settings.py b/gso/settings.py index 3596eb1c..eaeeada9 100644 --- a/gso/settings.py +++ b/gso/settings.py @@ -209,6 +209,7 @@ class MoodiParams(BaseSettings): """Settings for Moodi.""" host: str + moodi_enabled: bool = False class OSSParams(BaseSettings): diff --git a/gso/utils/workflow_steps.py b/gso/utils/workflow_steps.py index 6c53f2fc..3ce208a8 100644 --- a/gso/utils/workflow_steps.py +++ b/gso/utils/workflow_steps.py @@ -7,6 +7,7 @@ from orchestrator import inputstep, step from orchestrator.config.assignee import Assignee from orchestrator.types import State, UUIDstr from orchestrator.utils.json import json_dumps +from orchestrator.workflow import StepList, begin, conditional from pydantic import ConfigDict from pydantic_forms.core import FormPage from pydantic_forms.types import FormGenerator @@ -14,7 +15,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.lso_client import LSOState +from gso.services.lso_client import LSOState, lso_interaction from gso.settings import load_oss_params from gso.utils.helpers import generate_inventory_for_active_routers from gso.utils.shared_enums import Vendor @@ -391,25 +392,34 @@ def prompt_sharepoint_checklist_url(checklist_url: str) -> FormGenerator: return {} -@step("Start Moodi") -def start_moodi(subscription: dict[str, Any]) -> LSOState: +_is_moodi_enabled = conditional(lambda _: load_oss_params().MOODI.moodi_enabled) + + +def start_moodi() -> StepList: """Start monitoring on demand using Moodi Telemetry stack.""" - params = load_oss_params() + host = load_oss_params().MOODI.host - return { - "playbook_name": "moodi_telemetry/playbooks/start_moodi.yaml", - "inventory": {"all": {"hosts": {params.MOODI.host: None}}}, - "extra_vars": {"subscription": subscription}, - } + @step("Start Moodi") + def _start_moodi(subscription: dict[str, Any]) -> LSOState: + return { + "playbook_name": "moodi_telemetry/playbooks/start_moodi.yaml", + "inventory": {"all": {"hosts": {host: None}}}, + "extra_vars": {"subscription": subscription}, + } + return begin >> _is_moodi_enabled(begin >> lso_interaction(_start_moodi)) -@step("Stop Moodi") -def stop_moodi() -> LSOState: - """Stop monitoring on demand.""" - params = load_oss_params() - return { - "playbook_name": "moodi_telemetry/playbooks/stop_moodi.yaml", - "inventory": {"all": {"hosts": {params.MOODI.host: None}}}, - "extra_vars": None, - } +def stop_moodi() -> StepList: + """Stop Moodi Telemetry monitoring on demand.""" + host = load_oss_params().MOODI.host + + @step("Stop Moodi") + def _stop_moodi() -> LSOState: + return { + "playbook_name": "moodi_telemetry/playbooks/stop_moodi.yaml", + "inventory": {"all": {"hosts": {host: None}}}, + "extra_vars": None, + } + + return begin >> _is_moodi_enabled(begin >> lso_interaction(_stop_moodi)) diff --git a/gso/workflows/edge_port/create_edge_port.py b/gso/workflows/edge_port/create_edge_port.py index 5977206d..3782800b 100644 --- a/gso/workflows/edge_port/create_edge_port.py +++ b/gso/workflows/edge_port/create_edge_port.py @@ -31,6 +31,7 @@ from gso.utils.helpers import ( ) from gso.utils.types.interfaces import LAGMember, PhysicalPortCapacity from gso.utils.types.tt_number import TTNumber +from gso.utils.workflow_steps import start_moodi, stop_moodi from gso.workflows.shared import create_summary_form @@ -267,11 +268,13 @@ def create_edge_port() -> StepList: >> create_subscription >> store_process_subscription(Target.CREATE) >> initialize_subscription + >> start_moodi() >> reserve_interfaces_in_netbox >> lso_interaction(create_edge_port_dry) >> lso_interaction(create_edge_port_real) >> allocate_interfaces_in_netbox >> set_status(SubscriptionLifecycle.ACTIVE) >> resync + >> stop_moodi() >> done ) -- GitLab