From b248b3a12729e0bbf30226202e7cd31f4ecbadb6 Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Wed, 10 Jan 2024 11:39:20 +0100
Subject: [PATCH] convert scheduled router validation to celery task

---
 gso/schedules/__init__.py                     |  8 -------
 gso/schedules/validate_routers_nightly.py     | 21 -------------------
 gso/workflows/__init__.py                     |  1 +
 .../{tasks => router}/validate_router.py      |  2 +-
 4 files changed, 2 insertions(+), 30 deletions(-)
 delete mode 100644 gso/schedules/validate_routers_nightly.py
 rename gso/workflows/{tasks => router}/validate_router.py (94%)

diff --git a/gso/schedules/__init__.py b/gso/schedules/__init__.py
index f3100cf8..8257a874 100644
--- a/gso/schedules/__init__.py
+++ b/gso/schedules/__init__.py
@@ -1,9 +1 @@
 """Tasks that are scheduled to run periodically in :term:`GSO`."""
-
-from orchestrator.schedules import SchedulingFunction  # type:ignore[attr-defined]
-
-from gso.schedules.validate_routers_nightly import run_validate_routers
-
-#  TODO: This list overwrites the default, and therefore leaves all default schedules unused.
-#  TODO: Consider using the default schedules.
-ALL_SCHEDULERS: list[SchedulingFunction] = [run_validate_routers]
diff --git a/gso/schedules/validate_routers_nightly.py b/gso/schedules/validate_routers_nightly.py
deleted file mode 100644
index 9b60df42..00000000
--- a/gso/schedules/validate_routers_nightly.py
+++ /dev/null
@@ -1,21 +0,0 @@
-"""Nightly schedule for validating all active Routers' configuration."""
-
-import logging
-
-from orchestrator.schedules.scheduling import scheduler
-from orchestrator.services.processes import start_process
-
-from gso.services.subscriptions import get_active_router_subscriptions
-
-logger = logging.getLogger(__name__)
-
-
-@scheduler(name="Validate routers", time_unit="day", at="03:00")
-def run_validate_routers() -> None:
-    """Validate configuration on all active Routers, every night at 3AM."""
-    routers = get_active_router_subscriptions(includes=["subscription_id"])
-
-    for router in routers:
-        msg = f"Validating configuration of router subscription {router['subscription_id']}"
-        logger.info(msg)
-        start_process("validate_router", [{"subscription_id": router["subscription_id"]}])
diff --git a/gso/workflows/__init__.py b/gso/workflows/__init__.py
index 54d6a8a1..7e81eafc 100644
--- a/gso/workflows/__init__.py
+++ b/gso/workflows/__init__.py
@@ -42,6 +42,7 @@ LazyWorkflowInstance("gso.workflows.router.update_ibgp_mesh", "update_ibgp_mesh"
 LazyWorkflowInstance("gso.workflows.router.modify_connection_strategy", "modify_connection_strategy")
 LazyWorkflowInstance("gso.workflows.router.import_router", "import_router")
 LazyWorkflowInstance("gso.workflows.router.create_imported_router", "create_imported_router")
+LazyWorkflowInstance("gso.workflows.router.validate_router", "validate_router")
 
 #  Site workflows
 LazyWorkflowInstance("gso.workflows.site.create_site", "create_site")
diff --git a/gso/workflows/tasks/validate_router.py b/gso/workflows/router/validate_router.py
similarity index 94%
rename from gso/workflows/tasks/validate_router.py
rename to gso/workflows/router/validate_router.py
index 465e4c33..6a1390d2 100644
--- a/gso/workflows/tasks/validate_router.py
+++ b/gso/workflows/router/validate_router.py
@@ -16,7 +16,7 @@ from gso.workflows.router.create_router import verify_ipam_loopback
 @step("Validate router configuration")
 def validate_router_config(subscription: Router, callback_route: str) -> None:
     """Run an Ansible playbook that validates the configuration that is present on an active Router."""
-    extra_vars = {"wfo_router_json": json.loads(json_dumps(subscription)), "verb": "validate"}
+    extra_vars = {"wfo_router": json.loads(json_dumps(subscription)), "verb": "validate"}
 
     execute_playbook(
         playbook_name="base_config.yaml",
-- 
GitLab