Skip to content
Snippets Groups Projects
Commit 5f5870c1 authored by Simone Spinelli's avatar Simone Spinelli
Browse files

IPtrunk remodeled to include device subscription - error on list

parent 5503c2b6
No related branches found
No related tags found
1 merge request!8Feature/iptrunks prototype
"""add Iptrunk create workflow.
Revision ID: 60d340427471
Revises: 80b0a70d4faf
Create Date: 2023-04-29 06:25:49.525661
"""
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = '60d340427471'
down_revision = '80b0a70d4faf'
branch_labels = None
depends_on = None
from orchestrator.migrations.helpers import create_workflow, delete_workflow
new_workflows = [
{
"name": "create_iptrunk",
"target": "CREATE",
"description": "Create Iptrunk",
"product_type": "Iptrunk"
}
]
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"])
This diff is collapsed.
from typing import Optional
from typing import List
from orchestrator.domain.base import ProductBlockModel
from orchestrator.types import SubscriptionLifecycle, strEnum
from gso.products.product_blocks.device \
import DeviceBlock, DeviceBlockInactive, DeviceBlockProvisioning
import ipaddress
# - id: GS-00012
......@@ -45,13 +48,13 @@ class IptrunkBlockInactive(ProductBlockModel,
iptrunk_ipv4_network: Optional[ipaddress.IPv4Network] = None
iptrunk_ipv6_network: Optional[ipaddress.IPv6Network] = None
#
iptrunk_sideA_fqdn: Optional[str] = None
iptrunk_sideA_node: DeviceBlockInactive
iptrunk_sideA_ae_iface: Optional[str] = None
iptrunk_sideA_ae_geant_a_sid: Optional[str] = None
iptrunk_sideA_ae_members: Optional[list] = None
iptrunk_sideA_ae_members_description: Optional[list] = None
#
iptrunk_sideB_fqdn: Optional[str] = None
iptrunk_sideB_node: DeviceBlockInactive
iptrunk_sideB_ae_iface: Optional[str] = None
iptrunk_sideB_ae_geant_a_sid: Optional[str] = None
iptrunk_sideB_ae_members: Optional[list] = None
......@@ -68,13 +71,13 @@ class IptrunkBlockProvisioning(IptrunkBlockInactive,
iptrunk_ipv4_network: Optional[ipaddress.IPv4Network] = None
iptrunk_ipv6_network: Optional[ipaddress.IPv6Network] = None
#
iptrunk_sideA_fqdn: Optional[str] = None
iptrunk_sideA_node: DeviceBlockProvisioning
iptrunk_sideA_ae_iface: Optional[str] = None
iptrunk_sideA_ae_geant_a_sid: Optional[str] = None
iptrunk_sideA_ae_members: Optional[list] = None
iptrunk_sideA_ae_members_description: Optional[list] = None
#
iptrunk_sideB_fqdn: Optional[str] = None
iptrunk_sideB_node: DeviceBlockProvisioning
iptrunk_sideB_ae_iface: Optional[str] = None
iptrunk_sideB_ae_geant_a_sid: Optional[str] = None
iptrunk_sideB_ae_members: Optional[list] = None
......@@ -91,13 +94,13 @@ class IptrunkBlock(IptrunkBlockProvisioning,
iptrunk_ipv4_network: ipaddress.IPv4Network
iptrunk_ipv6_network: ipaddress.IPv6Network
#
iptrunk_sideA_fqdn: str
iptrunk_sideA_node: DeviceBlock
iptrunk_sideA_ae_iface: str
iptrunk_sideA_ae_geant_a_sid: str
iptrunk_sideA_ae_members: list[str]
iptrunk_sideA_ae_members_description: list[str]
#
iptrunk_sideB_fqdn: str
iptrunk_sideB_node: DeviceBlock
iptrunk_sideB_ae_iface: str
iptrunk_sideB_ae_geant_a_sid: str
iptrunk_sideB_ae_members: list[str]
......
......@@ -5,11 +5,8 @@ from gso.products.product_blocks.iptrunk \
import IptrunkBlock, IptrunkBlockInactive, IptrunkBlockProvisioning
class IptrunkInactive(SubscriptionModel, is_base=True):
iptrunk: IptrunkBlockInactive
sideA: DeviceActive
sideB: DeviceActive
class IptrunkProvisioning(IptrunkInactive,
......
......@@ -42,10 +42,12 @@ def create_subscription(product: UUIDstr) -> State:
@step("Get information from IPAM ")
def get_info_from_ipam(subscription: device.DeviceInactive) -> State:
lo = ipam.new_device_lo_address()
subscription.device.lo_ipv4_address = lo.v4
subscription.device.lo_ipv6_address = lo.v6
#lo = ipam.new_device_lo_address()
#subscription.device.lo_ipv4_address = lo.v4
#subscription.device.lo_ipv6_address = lo.v6
# TODO: get info about how these should be generated
subscription.device.lo_ipv4_address = "10.10.10.10"
subscription.device.lo_ipv6_address = "fc00:798:10::10"
subscription.device.lo_iso_address = "49.51e5.0001.0620.4009.6047.00"
subscription.device.si_ipv4_network = "192.168.0.0/31"
subscription.device.ias_lt_ipv4_network = "192.168.1.0/31"
......@@ -123,9 +125,9 @@ def provision_device_dry(
# # if r.rc != 0:
# # raise ValueError("Ansible has failed")
# return {"dry_run_output": out_splitted, "return_code": r.rc}
provisioning_proxy.provision_node(
node_subscription_params=subscription,
dry_run=True)
#provisioning_proxy.provision_node(
# node_subscription_params=subscription,
# dry_run=True)
# TODO: figure out what to return when we are suspending & waiting
# for the provisioning-proxy to call back
return {"return_code": 0}
......@@ -170,8 +172,8 @@ def provision_device_real(
# out_splitted = out.splitlines()
#
# return {"real_run_output": out_splitted, "return_code": r.rc}
provisioning_proxy.provision_node(
node_subscription_params=subscription)
#provisioning_proxy.provision_node(
# node_subscription_params=subscription)
# TODO: figure out what to return when we are suspending & waiting
# for the provisioning-proxy to call back
return {"return_code": 0}
......
......@@ -13,7 +13,7 @@ from orchestrator.workflows.steps import store_process_subscription
from orchestrator.workflows.utils import wrap_create_initial_input_form
from gso.products.product_types import iptrunk
from gso.products.product_blocks import iptrunk as iptrunk_pb
from gso.products.product_types import device
from gso.products.product_types.device import Device
from gso.services import ipam, provisioning_proxy
from gso.products.product_types import device
......@@ -53,13 +53,13 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
iptrunk_speed: str # This should be an enum: 1/10/100/400
iptrunk_minimum_links: int
iptrunk_sideA_fqdn: device_selector(choice_value='DeviceEnumA')
iptrunk_sideA_node_id: device_selector(choice_value='DeviceEnumA')
iptrunk_sideA_ae_iface: str
iptrunk_sideA_ae_geant_a_sid: str
iptrunk_sideA_ae_members: list[str]
iptrunk_sideA_ae_members_descriptions: list[str]
iptrunk_sideB_fqdn: device_selector(choice_value='DeviceEnumB')
iptrunk_sideB_node_id: device_selector(choice_value='DeviceEnumB')
iptrunk_sideB_ae_iface: str
iptrunk_sideB_ae_geant_a_sid: str
iptrunk_sideB_ae_members: list[str]
......@@ -102,12 +102,12 @@ def initialize_subscription(
iptrunk_description: str,
iptrunk_speed: str,
iptrunk_minimum_links: int,
iptrunk_sideA_fqdn: str,
iptrunk_sideA_node_id: str,
iptrunk_sideA_ae_iface: str,
iptrunk_sideA_ae_geant_a_sid: str,
iptrunk_sideA_ae_members: list[str],
iptrunk_sideA_ae_members_descriptions: list[str],
iptrunk_sideB_fqdn: str,
iptrunk_sideB_node_id: str,
iptrunk_sideB_ae_iface: str,
iptrunk_sideB_ae_geant_a_sid: str,
iptrunk_sideB_ae_members: list[str],
......@@ -119,13 +119,13 @@ def initialize_subscription(
subscription.iptrunk.iptrunk_speed = iptrunk_speed
subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links
subscription.iptrunk.iptrunk_sideA_fqdn = device.from_subscription(iptrunk_sideA_fqdn[0]).fqdn
subscription.iptrunk.iptrunk_sideA_node = Device.from_subscription(iptrunk_sideA_node_id[0]).device
subscription.iptrunk.iptrunk_sideA_ae_iface = iptrunk_sideA_ae_iface
subscription.iptrunk.iptrunk_sideA_ae_geant_a_sid = iptrunk_sideA_ae_geant_a_sid
subscription.iptrunk.iptrunk_sideA_ae_members = iptrunk_sideA_ae_members
subscription.iptrunk.iptrunk_sideA_ae_members_description = iptrunk_sideA_ae_members_descriptions
subscription.iptrunk.iptrunk_sideB_fqdn = iptrunk_sideB_fqdn[0]
subscription.iptrunk.iptrunk_sideB_node = Device.from_subscription(iptrunk_sideB_node_id[0]).device
subscription.iptrunk.iptrunk_sideB_ae_iface = iptrunk_sideB_ae_iface
subscription.iptrunk.iptrunk_sideB_ae_geant_a_sid = iptrunk_sideB_ae_geant_a_sid
subscription.iptrunk.iptrunk_sideB_ae_members = iptrunk_sideB_ae_members
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment