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 Optional
from typing import List
from orchestrator.domain.base import ProductBlockModel from orchestrator.domain.base import ProductBlockModel
from orchestrator.types import SubscriptionLifecycle, strEnum from orchestrator.types import SubscriptionLifecycle, strEnum
from gso.products.product_blocks.device \
import DeviceBlock, DeviceBlockInactive, DeviceBlockProvisioning
import ipaddress import ipaddress
# - id: GS-00012 # - id: GS-00012
...@@ -45,13 +48,13 @@ class IptrunkBlockInactive(ProductBlockModel, ...@@ -45,13 +48,13 @@ class IptrunkBlockInactive(ProductBlockModel,
iptrunk_ipv4_network: Optional[ipaddress.IPv4Network] = None iptrunk_ipv4_network: Optional[ipaddress.IPv4Network] = None
iptrunk_ipv6_network: Optional[ipaddress.IPv6Network] = 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_iface: Optional[str] = None
iptrunk_sideA_ae_geant_a_sid: Optional[str] = None iptrunk_sideA_ae_geant_a_sid: Optional[str] = None
iptrunk_sideA_ae_members: Optional[list] = None iptrunk_sideA_ae_members: Optional[list] = None
iptrunk_sideA_ae_members_description: 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_iface: Optional[str] = None
iptrunk_sideB_ae_geant_a_sid: Optional[str] = None iptrunk_sideB_ae_geant_a_sid: Optional[str] = None
iptrunk_sideB_ae_members: Optional[list] = None iptrunk_sideB_ae_members: Optional[list] = None
...@@ -68,13 +71,13 @@ class IptrunkBlockProvisioning(IptrunkBlockInactive, ...@@ -68,13 +71,13 @@ class IptrunkBlockProvisioning(IptrunkBlockInactive,
iptrunk_ipv4_network: Optional[ipaddress.IPv4Network] = None iptrunk_ipv4_network: Optional[ipaddress.IPv4Network] = None
iptrunk_ipv6_network: Optional[ipaddress.IPv6Network] = 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_iface: Optional[str] = None
iptrunk_sideA_ae_geant_a_sid: Optional[str] = None iptrunk_sideA_ae_geant_a_sid: Optional[str] = None
iptrunk_sideA_ae_members: Optional[list] = None iptrunk_sideA_ae_members: Optional[list] = None
iptrunk_sideA_ae_members_description: 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_iface: Optional[str] = None
iptrunk_sideB_ae_geant_a_sid: Optional[str] = None iptrunk_sideB_ae_geant_a_sid: Optional[str] = None
iptrunk_sideB_ae_members: Optional[list] = None iptrunk_sideB_ae_members: Optional[list] = None
...@@ -91,13 +94,13 @@ class IptrunkBlock(IptrunkBlockProvisioning, ...@@ -91,13 +94,13 @@ class IptrunkBlock(IptrunkBlockProvisioning,
iptrunk_ipv4_network: ipaddress.IPv4Network iptrunk_ipv4_network: ipaddress.IPv4Network
iptrunk_ipv6_network: ipaddress.IPv6Network iptrunk_ipv6_network: ipaddress.IPv6Network
# #
iptrunk_sideA_fqdn: str iptrunk_sideA_node: DeviceBlock
iptrunk_sideA_ae_iface: str iptrunk_sideA_ae_iface: str
iptrunk_sideA_ae_geant_a_sid: str iptrunk_sideA_ae_geant_a_sid: str
iptrunk_sideA_ae_members: list[str] iptrunk_sideA_ae_members: list[str]
iptrunk_sideA_ae_members_description: 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_iface: str
iptrunk_sideB_ae_geant_a_sid: str iptrunk_sideB_ae_geant_a_sid: str
iptrunk_sideB_ae_members: list[str] iptrunk_sideB_ae_members: list[str]
......
...@@ -5,11 +5,8 @@ from gso.products.product_blocks.iptrunk \ ...@@ -5,11 +5,8 @@ from gso.products.product_blocks.iptrunk \
import IptrunkBlock, IptrunkBlockInactive, IptrunkBlockProvisioning import IptrunkBlock, IptrunkBlockInactive, IptrunkBlockProvisioning
class IptrunkInactive(SubscriptionModel, is_base=True): class IptrunkInactive(SubscriptionModel, is_base=True):
iptrunk: IptrunkBlockInactive iptrunk: IptrunkBlockInactive
sideA: DeviceActive
sideB: DeviceActive
class IptrunkProvisioning(IptrunkInactive, class IptrunkProvisioning(IptrunkInactive,
......
...@@ -42,10 +42,12 @@ def create_subscription(product: UUIDstr) -> State: ...@@ -42,10 +42,12 @@ def create_subscription(product: UUIDstr) -> State:
@step("Get information from IPAM ") @step("Get information from IPAM ")
def get_info_from_ipam(subscription: device.DeviceInactive) -> State: def get_info_from_ipam(subscription: device.DeviceInactive) -> State:
lo = ipam.new_device_lo_address() #lo = ipam.new_device_lo_address()
subscription.device.lo_ipv4_address = lo.v4 #subscription.device.lo_ipv4_address = lo.v4
subscription.device.lo_ipv6_address = lo.v6 #subscription.device.lo_ipv6_address = lo.v6
# TODO: get info about how these should be generated # 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.lo_iso_address = "49.51e5.0001.0620.4009.6047.00"
subscription.device.si_ipv4_network = "192.168.0.0/31" subscription.device.si_ipv4_network = "192.168.0.0/31"
subscription.device.ias_lt_ipv4_network = "192.168.1.0/31" subscription.device.ias_lt_ipv4_network = "192.168.1.0/31"
...@@ -123,9 +125,9 @@ def provision_device_dry( ...@@ -123,9 +125,9 @@ def provision_device_dry(
# # if r.rc != 0: # # if r.rc != 0:
# # raise ValueError("Ansible has failed") # # raise ValueError("Ansible has failed")
# return {"dry_run_output": out_splitted, "return_code": r.rc} # return {"dry_run_output": out_splitted, "return_code": r.rc}
provisioning_proxy.provision_node( #provisioning_proxy.provision_node(
node_subscription_params=subscription, # node_subscription_params=subscription,
dry_run=True) # dry_run=True)
# TODO: figure out what to return when we are suspending & waiting # TODO: figure out what to return when we are suspending & waiting
# for the provisioning-proxy to call back # for the provisioning-proxy to call back
return {"return_code": 0} return {"return_code": 0}
...@@ -170,8 +172,8 @@ def provision_device_real( ...@@ -170,8 +172,8 @@ def provision_device_real(
# out_splitted = out.splitlines() # out_splitted = out.splitlines()
# #
# return {"real_run_output": out_splitted, "return_code": r.rc} # return {"real_run_output": out_splitted, "return_code": r.rc}
provisioning_proxy.provision_node( #provisioning_proxy.provision_node(
node_subscription_params=subscription) # node_subscription_params=subscription)
# TODO: figure out what to return when we are suspending & waiting # TODO: figure out what to return when we are suspending & waiting
# for the provisioning-proxy to call back # for the provisioning-proxy to call back
return {"return_code": 0} return {"return_code": 0}
......
...@@ -13,7 +13,7 @@ from orchestrator.workflows.steps import store_process_subscription ...@@ -13,7 +13,7 @@ from orchestrator.workflows.steps import store_process_subscription
from orchestrator.workflows.utils import wrap_create_initial_input_form from orchestrator.workflows.utils import wrap_create_initial_input_form
from gso.products.product_types import iptrunk from gso.products.product_types import iptrunk
from gso.products.product_blocks import iptrunk as iptrunk_pb 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.services import ipam, provisioning_proxy
from gso.products.product_types import device from gso.products.product_types import device
...@@ -53,13 +53,13 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -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_speed: str # This should be an enum: 1/10/100/400
iptrunk_minimum_links: int 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_iface: str
iptrunk_sideA_ae_geant_a_sid: str iptrunk_sideA_ae_geant_a_sid: str
iptrunk_sideA_ae_members: list[str] iptrunk_sideA_ae_members: list[str]
iptrunk_sideA_ae_members_descriptions: 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_iface: str
iptrunk_sideB_ae_geant_a_sid: str iptrunk_sideB_ae_geant_a_sid: str
iptrunk_sideB_ae_members: list[str] iptrunk_sideB_ae_members: list[str]
...@@ -102,12 +102,12 @@ def initialize_subscription( ...@@ -102,12 +102,12 @@ def initialize_subscription(
iptrunk_description: str, iptrunk_description: str,
iptrunk_speed: str, iptrunk_speed: str,
iptrunk_minimum_links: int, iptrunk_minimum_links: int,
iptrunk_sideA_fqdn: str, iptrunk_sideA_node_id: str,
iptrunk_sideA_ae_iface: str, iptrunk_sideA_ae_iface: str,
iptrunk_sideA_ae_geant_a_sid: str, iptrunk_sideA_ae_geant_a_sid: str,
iptrunk_sideA_ae_members: list[str], iptrunk_sideA_ae_members: list[str],
iptrunk_sideA_ae_members_descriptions: 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_iface: str,
iptrunk_sideB_ae_geant_a_sid: str, iptrunk_sideB_ae_geant_a_sid: str,
iptrunk_sideB_ae_members: list[str], iptrunk_sideB_ae_members: list[str],
...@@ -119,13 +119,13 @@ def initialize_subscription( ...@@ -119,13 +119,13 @@ def initialize_subscription(
subscription.iptrunk.iptrunk_speed = iptrunk_speed subscription.iptrunk.iptrunk_speed = iptrunk_speed
subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links 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_iface = iptrunk_sideA_ae_iface
subscription.iptrunk.iptrunk_sideA_ae_geant_a_sid = iptrunk_sideA_ae_geant_a_sid 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 = iptrunk_sideA_ae_members
subscription.iptrunk.iptrunk_sideA_ae_members_description = iptrunk_sideA_ae_members_descriptions 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_iface = iptrunk_sideB_ae_iface
subscription.iptrunk.iptrunk_sideB_ae_geant_a_sid = iptrunk_sideB_ae_geant_a_sid subscription.iptrunk.iptrunk_sideB_ae_geant_a_sid = iptrunk_sideB_ae_geant_a_sid
subscription.iptrunk.iptrunk_sideB_ae_members = iptrunk_sideB_ae_members 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.
Please register or to comment