From 8bdd2e6054c46e6a891a7dd8173c64fb777a4394 Mon Sep 17 00:00:00 2001
From: root <jorge.sasiain@ehu.eus>
Date: Mon, 16 Jan 2023 10:07:30 +0000
Subject: [PATCH] Begin with create workflows

---
 workflows/node/create_line_card.py | 41 ++++++++++++++++++++++++++++
 workflows/node/create_node.py      | 43 ++++++++++++++++++++++++++++++
 workflows/node/create_port.py      | 40 +++++++++++++++++++++++++++
 3 files changed, 124 insertions(+)
 create mode 100644 workflows/node/create_line_card.py
 create mode 100644 workflows/node/create_node.py
 create mode 100644 workflows/node/create_port.py

diff --git a/workflows/node/create_line_card.py b/workflows/node/create_line_card.py
new file mode 100644
index 000000000..3ff42c8be
--- /dev/null
+++ b/workflows/node/create_line_card.py
@@ -0,0 +1,41 @@
+from uuid import uuid4
+
+from orchestrator.targets import Target
+from orchestrator.types import State, SubscriptionLifecycle, UUIDstr
+from orchestrator.workflow import done, init, step, workflow
+from orchestrator.workflows.steps import resync, set_status, store_process_subscription
+
+from products.product_types.line_card import LineCardInactive, LineCardProvisioning
+from products.product_types.node import Node
+
+@step("Create subscription")
+def create_subscription(product: UUIDstr) -> State:
+    subscription = LineCardInactive.from_product_id(product, uuid4())
+
+    return {"subscription": subscription, "subscription_id": subscription.subscription_id}
+
+@step("Initialize subscription")
+def initialize_subscription(subscription: LineCardInactive) -> State:
+    #subscription.line_card.
+    pass
+
+@step("Provision line card")
+def provision_line_card(subscription: LineCardProvisioning) -> State:
+    pass
+
+@workflow(
+    "Create line card",
+    target=Target.CREATE,
+)
+def create_line_card():
+
+    return (
+        init
+        >> create_subscription
+        >> store_process_subscription(Target.CREATE)
+        >> initialize_subscription
+        >> provision_line_card
+        >> set_status(SubscriptionLifecycle.ACTIVE)
+        >> resync
+        >> done
+    )
diff --git a/workflows/node/create_node.py b/workflows/node/create_node.py
new file mode 100644
index 000000000..01c9b581e
--- /dev/null
+++ b/workflows/node/create_node.py
@@ -0,0 +1,43 @@
+from uuid import uuid4
+
+from orchestrator.targets import Target
+from orchestrator.types import State, SubscriptionLifecycle, UUIDstr
+from orchestrator.workflow import done, init, step, workflow
+from orchestrator.workflows.steps import resync, set_status, store_process_subscription
+
+from products.product_types.node import NodeInactive, NodeProvisioning
+
+@step("Create subscription")
+def create_subscription(product: UUIDstr) -> State:
+    subscription = NodeInactive.from_product_id(product, uuid4())
+
+    return {"subscription": subscription, "subscription_id": subscription.subscription_id}
+
+@step("Initialize subscription")
+def initialize_subscription(subscription: NodeInactive) -> State:
+    subscription.description = f"Node"
+    subscription = NodeProvisioning.from_other_lifecycle(subscription, SubscriptionLifecycle.PROVISIONING)
+
+    return {"subscription": subscription}
+
+@step("Provision node")
+def provision_node(subscription: NodeProvisioning) -> State:
+    node_id = uuid.uuid4()
+    subscription.node.node_id = node_id
+
+@workflow(
+    "Create node",
+    target=Target.CREATE,
+)
+def create_node():
+
+    return (
+        init
+        >> create_subscription
+        >> store_process_subscription(Target.CREATE)
+        >> initialize_subscription
+        >> provision_node
+        >> set_status(SubscriptionLifecycle.ACTIVE)
+        >> resync
+        >> done
+    )
diff --git a/workflows/node/create_port.py b/workflows/node/create_port.py
new file mode 100644
index 000000000..529d2cf81
--- /dev/null
+++ b/workflows/node/create_port.py
@@ -0,0 +1,40 @@
+from uuid import uuid4
+
+from orchestrator.targets import Target
+from orchestrator.types import State, SubscriptionLifecycle, UUIDstr
+from orchestrator.workflow import done, init, step, workflow
+from orchestrator.workflows.steps import resync, set_status, store_process_subscription
+
+from products.product_types.port import PortInactive, PortProvisioning
+from products.product_types.line_card import LineCard
+
+@step("Create subscription")
+def create_subscription(product: UUIDstr) -> State:
+    subscription = PortInactive.from_product_id(product, uuid4())
+
+    return {"subscription": subscription, "subscription_id": subscription.subscription_id}
+
+@step("Initialize subscription")
+def initialize_subscription(subscription: PortInactive) -> State:
+    pass
+
+@step("Provision port")
+def provision_port(subscription: PortProvisioning) -> State:
+    pass
+
+@workflow(
+    "Create port",
+    target=Target.CREATE,
+)
+def create_port():
+
+    return (
+        init
+        >> create_subscription
+        >> store_process_subscription(Target.CREATE)
+        >> initialize_subscription
+        >> provision_port
+        >> set_status(SubscriptionLifecycle.ACTIVE)
+        >> resync
+        >> done
+    )
-- 
GitLab