Skip to content
Snippets Groups Projects
Commit 3d489184 authored by JORGE SASIAIN's avatar JORGE SASIAIN
Browse files

Attempt at create workflows for node, line card and port

parent f7d09cf5
No related branches found
No related tags found
No related merge requests found
File added
from typing import List
from uuid import uuid4
from orchestrator.db.models import ProductTable, SubscriptionTable
from orchestrator.forms import FormPage
from orchestrator.forms.validators import Choice, choice_list
from orchestrator.targets import Target
from orchestrator.types import State, SubscriptionLifecycle, UUIDstr
from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUIDstr
from orchestrator.workflow import done, init, step, workflow
from orchestrator.workflows.steps import resync, set_status, store_process_subscription
from orchestrator.workflows.utils import wrap_create_initial_input_form
from products.product_types.line_card import LineCardInactive, LineCardProvisioning
from products.product_types.node import Node
def node_selector() -> list:
node_subscriptions = {}
for node_id in (
SubscriptionTable.query.join(ProductTable)
.filter(
ProductTable.product_type == "Node",
SubscriptionTable.status == "active",
)
.with_entities(SubscriptionTable.subscription_id, SubscriptionTable.description)
.all()
):
node_subscriptions[str(node_id)] = node_id
return choice_list(
Choice("NodeEnum", zip(node_subscriptions.keys(), node_subscriptions.items())), # type:ignore
min_items=1,
max_items=1,
)
def initial_input_form_generator(product_name: str) -> FormGenerator:
class CreateLineCardForm(FormPage):
class Config:
title = product_name
node_ids: node_selector() # type:ignore
line_card_input = yield CreateLineCardForm
return line_card_input.dict()
@step("Create subscription")
def create_subscription(product: UUIDstr) -> State:
subscription = LineCardInactive.from_product_id(product, uuid4())
......@@ -15,16 +54,23 @@ def create_subscription(product: UUIDstr) -> State:
return {"subscription": subscription, "subscription_id": subscription.subscription_id}
@step("Initialize subscription")
def initialize_subscription(subscription: LineCardInactive) -> State:
#subscription.line_card.
pass
def initialize_subscription(subscription: LineCardInactive, node_ids: List[int]) -> State:
subscription.line_card.node_ref = Node.from_subscription(node_ids[0]).node
subscription.description = f"Line card"
subscription = LineCardProvisioning.from_other_lifecycle(subscription, SubscriptionLifecycle.PROVISIONING)
return {"subscription": subscription}
@step("Provision line card")
def provision_line_card(subscription: LineCardProvisioning) -> State:
pass
line_card_id = abs(hash(uuid4()))
subscription.line_card.line_card_id = line_card_id
@workflow(
"Create line card",
initial_input_form=wrap_create_initial_input_form(initial_input_form_generator),
target=Target.CREATE,
)
def create_line_card():
......
......@@ -22,7 +22,7 @@ def initialize_subscription(subscription: NodeInactive) -> State:
@step("Provision node")
def provision_node(subscription: NodeProvisioning) -> State:
node_id = uuid.uuid4()
node_id = abs(hash(uuid4()))
subscription.node.node_id = node_id
@workflow(
......
from typing import List, Optional
from uuid import uuid4
from orchestrator.db.models import ProductTable, SubscriptionTable
from orchestrator.forms import FormPage
from orchestrator.forms.validators import Choice, choice_list
from orchestrator.targets import Target
from orchestrator.types import State, SubscriptionLifecycle, UUIDstr
from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUIDstr
from orchestrator.workflow import done, init, step, workflow
from orchestrator.workflows.steps import resync, set_status, store_process_subscription
from orchestrator.workflows.utils import wrap_create_initial_input_form
from products.product_types.port import PortInactive, PortProvisioning
from products.product_types.line_card import LineCard
def line_card_selector() -> list:
line_card_subscriptions = {}
for line_card_id in (
SubscriptionTable.query.join(ProductTable)
.filter(
ProductTable.product_type == "LineCard",
SubscriptionTable.status == "active",
)
.with_entities(SubscriptionTable.subscription_id, SubscriptionTable.description)
.all()
):
line_card_subscriptions[str(line_card_id)] = line_card_id
return choice_list(
Choice("NodeEnum", zip(line_card_subscriptions.keys(), line_card_subscriptions.items())), # type:ignore
min_items=1,
max_items=1,
)
def initial_input_form_generator(product_name: str) -> FormGenerator:
class CreatePortForm(FormPage):
class Config:
title = product_name
pic: int
position: int
interface: str
line_card_ids: line_card_selector() # type:ignore
port_input = yield CreatePortForm
return port.dict()
@step("Create subscription")
def create_subscription(product: UUIDstr) -> State:
subscription = PortInactive.from_product_id(product, uuid4())
......@@ -15,15 +57,24 @@ def create_subscription(product: UUIDstr) -> State:
return {"subscription": subscription, "subscription_id": subscription.subscription_id}
@step("Initialize subscription")
def initialize_subscription(subscription: PortInactive) -> State:
pass
def initialize_subscription(subscription: PortInactive, pic: int, position: int, interface: str, line_card_ids: List[int]) -> State:
subscription.port.pic = pic
subscription.port.position = position
subscription.port.interface = interface
subscription.port.line_card_ref = LineCard.from_subscription(line_card_ids[0]).line_card
subscription.description = f"Port"
subscription = LineCardProvisioning.from_other_lifecycle(subscription, SubscriptionLifecycle.PROVISIONING)
return {"subscription": subscription}
@step("Provision port")
def provision_port(subscription: PortProvisioning) -> State:
pass
port_id = abs(hash(uuid4()))
subscription.port.port_id = port_id
@workflow(
"Create port",
initial_input_form=wrap_create_initial_input_form(initial_input_form_generator),
target=Target.CREATE,
)
def create_port():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment