From 5c65de216447e2a83fc27bead6c285f565774d05 Mon Sep 17 00:00:00 2001
From: Ubuntu <jorge.sasiain@ehu.eus>
Date: Mon, 13 Mar 2023 11:20:14 +0000
Subject: [PATCH] Register CREATE workflows and create db migration for them

---
 main.py                                       |  1 +
 ...03-13_aa49bed10737_add_create_workflows.py | 57 +++++++++++++++++++
 workflows/__init__.py                         |  6 +-
 .../create_trunk_config.py                    |  6 +-
 .../create_trunk_config_common.py             |  6 +-
 .../create_trunk_config_side.py               |  6 +-
 6 files changed, 70 insertions(+), 12 deletions(-)
 create mode 100644 migrations/versions/schema/2023-03-13_aa49bed10737_add_create_workflows.py
 rename workflows/{trunk => trunk_config}/create_trunk_config.py (93%)
 rename workflows/{trunk => trunk_config_common}/create_trunk_config_common.py (93%)
 rename workflows/{trunk => trunk_config_side}/create_trunk_config_side.py (93%)

diff --git a/main.py b/main.py
index 26a26e55..66357c21 100644
--- a/main.py
+++ b/main.py
@@ -3,6 +3,7 @@ from orchestrator.cli.main import app as core_cli
 from orchestrator.settings import AppSettings
 
 import products
+import workflows
 
 app = OrchestratorCore(base_settings=AppSettings())
 
diff --git a/migrations/versions/schema/2023-03-13_aa49bed10737_add_create_workflows.py b/migrations/versions/schema/2023-03-13_aa49bed10737_add_create_workflows.py
new file mode 100644
index 00000000..99f0af74
--- /dev/null
+++ b/migrations/versions/schema/2023-03-13_aa49bed10737_add_create_workflows.py
@@ -0,0 +1,57 @@
+"""add CREATE workflows.
+
+Revision ID: aa49bed10737
+Revises: 431ca061b2ad
+Create Date: 2023-03-13 11:18:36.787981
+
+"""
+import sqlalchemy as sa
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = 'aa49bed10737'
+down_revision = '431ca061b2ad'
+branch_labels = None
+depends_on = None
+
+
+from orchestrator.migrations.helpers import create_workflow, delete_workflow
+
+new_workflows = [
+    {
+        "name": "create_trunk",
+        "target": "CREATE",
+        "description": "Create trunk",
+        "product_type": "Trunk"
+    },
+    {
+        "name": "create_trunk_config",
+        "target": "CREATE",
+        "description": "Create trunk config",
+        "product_type": "TrunkConfig"
+    },
+    {
+        "name": "create_trunk_config_common",
+        "target": "CREATE",
+        "description": "Create trunk config common",
+        "product_type": "TrunkConfigCommon"
+    },
+    {
+        "name": "create_trunk_config_side",
+        "target": "CREATE",
+        "description": "Create trunk config side",
+        "product_type": "TrunkConfigSide"
+    }
+]
+
+
+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/workflows/__init__.py b/workflows/__init__.py
index 9dc5e5f1..6eeccd6d 100644
--- a/workflows/__init__.py
+++ b/workflows/__init__.py
@@ -1,6 +1,6 @@
 from orchestrator.workflows import LazyWorkflowInstance
 
 LazyWorkflowInstance("workflows.trunk.create_trunk", "create_trunk")
-LazyWorkflowInstance("workflows.trunk.create_trunk_config", "create_trunk_config")
-LazyWorkflowInstance("workflows.trunk.create_trunk_config_common", "create_trunk_config_common")
-LazyWorkflowInstance("workflows.trunk.create_trunk_config_side", "create_trunk_config_side")
+LazyWorkflowInstance("workflows.trunk_config.create_trunk_config", "create_trunk_config")
+LazyWorkflowInstance("workflows.trunk_config_common.create_trunk_config_common", "create_trunk_config_common")
+LazyWorkflowInstance("workflows.trunk_config_side.create_trunk_config_side", "create_trunk_config_side")
diff --git a/workflows/trunk/create_trunk_config.py b/workflows/trunk_config/create_trunk_config.py
similarity index 93%
rename from workflows/trunk/create_trunk_config.py
rename to workflows/trunk_config/create_trunk_config.py
index 44464dd0..f2c5c117 100644
--- a/workflows/trunk/create_trunk_config.py
+++ b/workflows/trunk_config/create_trunk_config.py
@@ -29,7 +29,7 @@ def trunk_selector() -> list:
         trunk_subscriptions[str(trunk_id)] = trunk_description
 
     return choice_list(
-        Choice("TrunkEnum", zip(trunk_subscriptions.keys(), trunk_subscriptions.items())),
+        Choice("TrunkEnum", zip(trunk_subscriptions.keys(), trunk_subscriptions.items())),  # type:ignore
         min_items=1,
         max_items=1,
     )
@@ -40,7 +40,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
         class Config:
             title = product_name
 
-        trunk_ids: trunk_selector()
+        trunk_ids: trunk_selector()  # type:ignore
 
     user_input = yield CreateTrunkConfigForm
 
@@ -81,7 +81,7 @@ def provision_trunk_config(subscription: TrunkConfigProvisioning) -> State:
     initial_input_form=wrap_create_initial_input_form(initial_input_form_generator),
     target=Target.CREATE,
 )
-def create_trunk():
+def create_trunk_config():
 
     return (
         init
diff --git a/workflows/trunk/create_trunk_config_common.py b/workflows/trunk_config_common/create_trunk_config_common.py
similarity index 93%
rename from workflows/trunk/create_trunk_config_common.py
rename to workflows/trunk_config_common/create_trunk_config_common.py
index 875a9f39..3d609ed6 100644
--- a/workflows/trunk/create_trunk_config_common.py
+++ b/workflows/trunk_config_common/create_trunk_config_common.py
@@ -28,7 +28,7 @@ def trunk_config_selector() -> list:
         trunk_config_subscriptions[str(trunk_config_id)] = trunk_config_description
 
     return choice_list(
-        Choice("TrunkConfigEnum", zip(trunk_config_subscriptions.keys(), trunk_config_subscriptions.items())),
+        Choice("TrunkConfigEnum", zip(trunk_config_subscriptions.keys(), trunk_config_subscriptions.items())),  # type:ignore
         min_items=1,
         max_items=1,
     )
@@ -43,7 +43,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
         is_leased_line: Optional[bool]
         isis_metric: int
         minimum_links: int
-        trunk_config_ids: trunk_config_selector()
+        trunk_config_ids: trunk_config_selector()  # type:ignore
 
     user_input = yield CreateTrunkConfigCommonForm
 
@@ -88,7 +88,7 @@ def provision_trunk_config_common(subscription: TrunkConfigCommonProvisioning) -
     initial_input_form=wrap_create_initial_input_form(initial_input_form_generator),
     target=Target.CREATE,
 )
-def create_trunk():
+def create_trunk_config_common():
 
     return (
         init
diff --git a/workflows/trunk/create_trunk_config_side.py b/workflows/trunk_config_side/create_trunk_config_side.py
similarity index 93%
rename from workflows/trunk/create_trunk_config_side.py
rename to workflows/trunk_config_side/create_trunk_config_side.py
index 5b67836f..67897ea2 100644
--- a/workflows/trunk/create_trunk_config_side.py
+++ b/workflows/trunk_config_side/create_trunk_config_side.py
@@ -28,7 +28,7 @@ def trunk_config_selector() -> list:
         trunk_config_subscriptions[str(trunk_config_id)] = trunk_config_description
 
     return choice_list(
-        Choice("TrunkConfigEnum", zip(trunk_config_subscriptions.keys(), trunk_config_subscriptions.items())),
+        Choice("TrunkConfigEnum", zip(trunk_config_subscriptions.keys(), trunk_config_subscriptions.items())),  # type:ignore
         min_items=1,
         max_items=1,
     )
@@ -45,7 +45,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
         ipv4_address: Optional[str]
         ipv6_address: Optional[str]
         members: Optional[list]
-        trunk_config_ids: trunk_config_selector()
+        trunk_config_ids: trunk_config_selector()  # type:ignore
 
     user_input = yield CreateTrunkConfigSideForm
 
@@ -92,7 +92,7 @@ def provision_trunk_config_side(subscription: TrunkConfigSideProvisioning, fqdn:
     initial_input_form=wrap_create_initial_input_form(initial_input_form_generator),
     target=Target.CREATE,
 )
-def create_trunk():
+def create_trunk_config_side():
 
     return (
         init
-- 
GitLab