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

Formatting and cleanup to pass TOX

parent bfa951b0
No related branches found
No related tags found
1 merge request!28Feature/nat178 trunks isis metric modify
...@@ -4,7 +4,8 @@ GSO settings, ensuring that the required parameters are set correctly. ...@@ -4,7 +4,8 @@ GSO settings, ensuring that the required parameters are set correctly.
import ipaddress import ipaddress
import json import json
import os import os
from pydantic import BaseSettings, Field # from pydantic import BaseSettings, Field
from pydantic import BaseSettings
class GeneralParams(BaseSettings): class GeneralParams(BaseSettings):
... ...
......
...@@ -3,6 +3,7 @@ import re ...@@ -3,6 +3,7 @@ import re
from uuid import uuid4 from uuid import uuid4
from orchestrator.db.models import ProductTable, SubscriptionTable from orchestrator.db.models import ProductTable, SubscriptionTable
# noinspection PyProtectedMember # noinspection PyProtectedMember
from orchestrator.forms import FormPage from orchestrator.forms import FormPage
from orchestrator.forms.validators import Choice, choice_list from orchestrator.forms.validators import Choice, choice_list
...@@ -16,34 +17,40 @@ from orchestrator.workflows.utils import wrap_create_initial_input_form ...@@ -16,34 +17,40 @@ from orchestrator.workflows.utils import wrap_create_initial_input_form
from gso.products.product_blocks import device as device_pb from gso.products.product_blocks import device as device_pb
from gso.products.product_types import device from gso.products.product_types import device
from gso.products.product_types.device import DeviceInactive, \ from gso.products.product_types.device import (
DeviceProvisioning DeviceInactive,
DeviceProvisioning,
)
from gso.products.product_types.site import Site from gso.products.product_types.site import Site
from gso.services import _ipam from gso.services import _ipam
from gso.services import provisioning_proxy from gso.services import provisioning_proxy
from gso.services.provisioning_proxy import await_pp_results, \ from gso.services.provisioning_proxy import (
confirm_pp_results await_pp_results,
confirm_pp_results,
)
def site_selector() -> list: def site_selector() -> list:
site_subscriptions = {} site_subscriptions = {}
for site_id, site_description in ( for site_id, site_description in (
SubscriptionTable.query SubscriptionTable.query.join(ProductTable)
.join(ProductTable)
.filter( .filter(
ProductTable.product_type == 'Site', ProductTable.product_type == "Site",
SubscriptionTable.status == 'active') SubscriptionTable.status == "active",
.with_entities(SubscriptionTable.subscription_id, )
SubscriptionTable.description) .with_entities(
SubscriptionTable.subscription_id, SubscriptionTable.description
)
.all() .all()
): ):
site_subscriptions[str(site_id)] = site_description site_subscriptions[str(site_id)] = site_description
# noinspection PyTypeChecker # noinspection PyTypeChecker
return choice_list( return choice_list(
Choice('site_selection', Choice(
zip(site_subscriptions.keys(), "site_selection",
site_subscriptions.items())), # type:ignore zip(site_subscriptions.keys(), site_subscriptions.items()),
), # type:ignore
min_items=1, min_items=1,
max_items=1, max_items=1,
) )
...@@ -66,45 +73,55 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -66,45 +73,55 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
return user_input.dict() return user_input.dict()
@step('Create subscription') @step("Create subscription")
def create_subscription(product: UUIDstr) -> State: def create_subscription(product: UUIDstr) -> State:
subscription = DeviceInactive.from_product_id(product, uuid4()) subscription = DeviceInactive.from_product_id(product, uuid4())
return { return {
'subscription': subscription, "subscription": subscription,
'subscription_id': subscription.subscription_id, "subscription_id": subscription.subscription_id,
} }
def iso_from_ipv4(ipv4_address): def iso_from_ipv4(ipv4_address):
padded_octets = [f'{x:>03}' for x in ipv4_address.split('.')] padded_octets = [f"{x:>03}" for x in ipv4_address.split(".")]
joined_octets = ''.join(padded_octets) joined_octets = "".join(padded_octets)
re_split = '.'.join(re.findall('....', joined_octets)) re_split = ".".join(re.findall("....", joined_octets))
result = '.'.join(['49.51e5.0001', re_split, '00']) result = ".".join(["49.51e5.0001", re_split, "00"])
return result return result
@step('Get information from IPAM') @step("Get information from IPAM")
def get_info_from_ipam(subscription: DeviceProvisioning) -> State: def get_info_from_ipam(subscription: DeviceProvisioning) -> State:
lo0_alias = re.sub('.geant.net', '', subscription.device.device_fqdn) lo0_alias = re.sub(".geant.net", "", subscription.device.device_fqdn)
lo0_name = f'lo0.{lo0_alias}' lo0_name = f"lo0.{lo0_alias}"
lo0_addr = _ipam.allocate_service_host(hostname=lo0_name, lo0_addr = _ipam.allocate_service_host(
service_type='LO', hostname=lo0_name, service_type="LO", cname_aliases=[lo0_alias]
cname_aliases=[lo0_alias]) )
subscription.device.device_lo_ipv4_address = lo0_addr.v4 subscription.device.device_lo_ipv4_address = lo0_addr.v4
subscription.device.device_lo_ipv6_address = lo0_addr.v6 subscription.device.device_lo_ipv6_address = lo0_addr.v6
subscription.device.device_lo_iso_address \ subscription.device.device_lo_iso_address = iso_from_ipv4(
= iso_from_ipv4(str(subscription.device.device_lo_ipv4_address)) str(subscription.device.device_lo_ipv4_address)
subscription.device.device_si_ipv4_network \ )
= _ipam.allocate_service_ipv4_network(service_type='SI', comment=f"SI for {lo0_name}").v4 subscription.device.device_si_ipv4_network = (
subscription.device.device_ias_lt_ipv4_network \ _ipam.allocate_service_ipv4_network(
= _ipam.allocate_service_ipv4_network(service_type='LT_IAS', comment=f"LT for {lo0_name}").v4 service_type="SI", comment=f"SI for {lo0_name}"
subscription.device.device_ias_lt_ipv6_network \ ).v4
= _ipam.allocate_service_ipv6_network(service_type='LT_IAS', comment=f"LT for {lo0_name}").v6 )
return {'subscription': subscription} subscription.device.device_ias_lt_ipv4_network = (
_ipam.allocate_service_ipv4_network(
service_type="LT_IAS", comment=f"LT for {lo0_name}"
@step('Initialize subscription') ).v4
)
subscription.device.device_ias_lt_ipv6_network = (
_ipam.allocate_service_ipv6_network(
service_type="LT_IAS", comment=f"LT for {lo0_name}"
).v6
)
return {"subscription": subscription}
@step("Initialize subscription")
def initialize_subscription( def initialize_subscription(
subscription: device.DeviceInactive, subscription: device.DeviceInactive,
hostname: str, hostname: str,
...@@ -112,61 +129,72 @@ def initialize_subscription( ...@@ -112,61 +129,72 @@ def initialize_subscription(
ts_port: str, ts_port: str,
device_vendor: device_pb.DeviceVendor, device_vendor: device_pb.DeviceVendor,
device_site: str, device_site: str,
device_role: device_pb.DeviceRole device_role: device_pb.DeviceRole,
) -> State: ) -> State:
subscription.device.device_ts_address = str(ts_address) subscription.device.device_ts_address = str(ts_address)
subscription.device.device_ts_port = str(ts_port) subscription.device.device_ts_port = str(ts_port)
subscription.device.device_vendor = device_vendor subscription.device.device_vendor = device_vendor
subscription.device.device_site \ subscription.device.device_site = Site.from_subscription(
= Site.from_subscription(device_site[0]).site device_site[0]
fqdn = f'{hostname}.{subscription.device.device_site.site_name.lower()}.' \ ).site
f'{subscription.device.device_site.site_country_code.lower()}' \ fqdn = (
f'.geant.net' f"{hostname}.{subscription.device.device_site.site_name.lower()}."
f"{subscription.device.device_site.site_country_code.lower()}"
".geant.net"
)
subscription.device.device_fqdn = fqdn subscription.device.device_fqdn = fqdn
subscription.device.device_role = device_role subscription.device.device_role = device_role
subscription.device.device_access_via_ts = True subscription.device.device_access_via_ts = True
subscription.description = f'Device {fqdn} ' \ subscription.description = f"Device {fqdn} ({subscription.device_type})"
f'({subscription.device_type})'
subscription = device.DeviceProvisioning.from_other_lifecycle( subscription = device.DeviceProvisioning.from_other_lifecycle(
subscription, SubscriptionLifecycle.PROVISIONING subscription, SubscriptionLifecycle.PROVISIONING
) )
return {'subscription': subscription} return {"subscription": subscription}
@step('Provision device [DRY RUN]') @step("Provision device [DRY RUN]")
def provision_device_dry(subscription: DeviceProvisioning, def provision_device_dry(
process_id: UUIDstr) -> State: subscription: DeviceProvisioning, process_id: UUIDstr
) -> State:
provisioning_proxy.provision_device(subscription, process_id) provisioning_proxy.provision_device(subscription, process_id)
return {'subscription': subscription, return {
'label_text': f'Dry run for the deployment of base config on a' "subscription": subscription,
f'new {subscription.device_type}. Deployment is ' "label_text": (
f'done by the provisioning proxy, please ' "Dry run for the deployment of base config on a"
f'wait for the results to come back before ' f"new {subscription.device_type}. Deployment is "
f'continuing.' "done by the provisioning proxy, please "
"wait for the results to come back before "
"continuing."
),
} }
@step('Provision device [FOR REAL]') @step("Provision device [FOR REAL]")
def provision_device_real(subscription: DeviceProvisioning, def provision_device_real(
process_id: UUIDstr) -> State: subscription: DeviceProvisioning, process_id: UUIDstr
) -> State:
provisioning_proxy.provision_device(subscription, process_id, False) provisioning_proxy.provision_device(subscription, process_id, False)
return {'subscription': subscription, return {
'label_text': f'Deployment of base config for a new ' "subscription": subscription,
f'{subscription.device_type}. Deployment is being ' "label_text": (
f'taken care of by the provisioning proxy, please ' "Deployment of base config for a new "
f'wait for the results to come back before ' f"{subscription.device_type}. Deployment is being "
f'continuing.' "taken care of by the provisioning proxy, please "
"wait for the results to come back before "
"continuing."
),
} }
@workflow( @workflow(
'Create device', "Create device",
initial_input_form=wrap_create_initial_input_form( initial_input_form=wrap_create_initial_input_form(
initial_input_form_generator), initial_input_form_generator
),
target=Target.CREATE, target=Target.CREATE,
) )
def create_device(): def create_device():
... ...
......
...@@ -21,7 +21,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> InputForm: ...@@ -21,7 +21,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> InputForm:
class TerminateForm(FormPage): class TerminateForm(FormPage):
are_you_sure: Label = ( are_you_sure: Label = (
f'Are you sure you want to remove {subscription.description}?' f"Are you sure you want to remove {subscription.description}?"
) )
return TerminateForm return TerminateForm
...@@ -35,43 +35,62 @@ def _deprovision_in_user_management_system(fqdn: str) -> str: ...@@ -35,43 +35,62 @@ def _deprovision_in_user_management_system(fqdn: str) -> str:
def deprovision_loopback_ips(subscription: Device) -> None: def deprovision_loopback_ips(subscription: Device) -> None:
input_host_addresses = ipam.HostAddresses( input_host_addresses = ipam.HostAddresses(
v4=ipaddress.ip_address(subscription.device.device_lo_ipv4_address), v4=ipaddress.ip_address(subscription.device.device_lo_ipv4_address),
v6=ipaddress.ip_address(subscription.device.device_lo_ipv6_address) v6=ipaddress.ip_address(subscription.device.device_lo_ipv6_address),
) )
fqdn_as_list = subscription.device.device_fqdn.split(".") fqdn_as_list = subscription.device.device_fqdn.split(".")
hostname=str(fqdn_as_list[0])+"."+str(fqdn_as_list[1])+"."+str(fqdn_as_list[2]) hostname = (
str(fqdn_as_list[0])
+ "."
+ str(fqdn_as_list[1])
+ "."
+ str(fqdn_as_list[2])
)
lo0_name = "lo0." + hostname lo0_name = "lo0." + hostname
host_addresses = ipam.delete_service_host( host_addresses = ipam.delete_service_host(
hostname=lo0_name, hostname=lo0_name,
host_addresses=input_host_addresses, host_addresses=input_host_addresses,
cname_aliases=[hostname], cname_aliases=[hostname],
service_type='LO' service_type="LO",
) )
return {'cleanup_for': hostname } return {"addresses": host_addresses}
@step("Deprovision SI- interface IPs from IPAM/DNS") @step("Deprovision SI- interface IPs from IPAM/DNS")
def deprovision_si_ips(subscription: Device) -> None: def deprovision_si_ips(subscription: Device) -> None:
service_network = ipam.delete_service_network( service_network = ipam.delete_service_network(
network=ipaddress.ip_network(subscription.device.device_si_ipv4_network) network=ipaddress.ip_network(
,service_type='SI') subscription.device.device_si_ipv4_network
return {'service_network': service_network} ),
service_type="SI",
)
return {"service_network": service_network}
@step("Deprovision LT- (IAS) interface IPs from IPAM/DNS") @step("Deprovision LT- interface (IAS) IPs from IPAM/DNS")
def deprovision_lt_ips(subscription: Device) -> None: def deprovision_lt_ips(subscription: Device) -> None:
service_network_v4 = ipam.delete_service_network( service_network_v4 = ipam.delete_service_network(
network=ipaddress.ip_network(subscription.device.device_ias_lt_ipv4_network), network=ipaddress.ip_network(
service_type='LT_IAS') subscription.device.device_ias_lt_ipv4_network
),
service_type="LT_IAS",
)
service_network_v6 = ipam.delete_service_network( service_network_v6 = ipam.delete_service_network(
network=ipaddress.ip_network(subscription.device.device_ias_lt_ipv6_network), network=ipaddress.ip_network(
service_type='LT_IAS') subscription.device.device_ias_lt_ipv6_network
return {'service_network_v4': service_network_v4, ),
'service_network_v6': service_network_v6} service_type="LT_IAS",
)
return {
"service_network_v4": service_network_v4,
"service_network_v6": service_network_v6,
}
@workflow( @workflow(
"Terminate device", "Terminate device",
initial_input_form=wrap_modify_initial_input_form( initial_input_form=wrap_modify_initial_input_form(
initial_input_form_generator), initial_input_form_generator
),
target=Target.TERMINATE, target=Target.TERMINATE,
) )
def terminate_device(): def terminate_device():
... ...
......
from uuid import uuid4 from uuid import uuid4
from orchestrator.db.models import ProductTable, SubscriptionTable from orchestrator.db.models import ProductTable, SubscriptionTable
# noinspection PyProtectedMember # noinspection PyProtectedMember
from orchestrator.forms import FormPage from orchestrator.forms import FormPage
from orchestrator.forms.validators import Choice, UniqueConstrainedList from orchestrator.forms.validators import Choice, UniqueConstrainedList
...@@ -15,11 +16,15 @@ from orchestrator.workflows.utils import wrap_create_initial_input_form ...@@ -15,11 +16,15 @@ from orchestrator.workflows.utils import wrap_create_initial_input_form
from gso.products.product_blocks import PhyPortCapacity from gso.products.product_blocks import PhyPortCapacity
from gso.products.product_blocks.iptrunk import IptrunkType from gso.products.product_blocks.iptrunk import IptrunkType
from gso.products.product_types.device import Device from gso.products.product_types.device import Device
from gso.products.product_types.iptrunk import IptrunkInactive, \ from gso.products.product_types.iptrunk import (
IptrunkProvisioning IptrunkInactive,
IptrunkProvisioning,
)
from gso.services import provisioning_proxy, _ipam from gso.services import provisioning_proxy, _ipam
from gso.services.provisioning_proxy import confirm_pp_results, \ from gso.services.provisioning_proxy import (
await_pp_results confirm_pp_results,
await_pp_results,
)
def initial_input_form_generator(product_name: str) -> FormGenerator: def initial_input_form_generator(product_name: str) -> FormGenerator:
...@@ -30,11 +35,12 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -30,11 +35,12 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
for device_id, device_description in ( for device_id, device_description in (
SubscriptionTable.query.join(ProductTable) SubscriptionTable.query.join(ProductTable)
.filter( .filter(
ProductTable.product_type == 'Device', ProductTable.product_type == "Device",
SubscriptionTable.status == 'active', SubscriptionTable.status == "active",
)
.with_entities(
SubscriptionTable.subscription_id, SubscriptionTable.description
) )
.with_entities(SubscriptionTable.subscription_id,
SubscriptionTable.description)
.all() .all()
): ):
devices[str(device_id)] = device_description devices[str(device_id)] = device_description
...@@ -54,11 +60,11 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -54,11 +60,11 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
class AeMembersListA(UniqueConstrainedList[str]): class AeMembersListA(UniqueConstrainedList[str]):
min_items = initial_user_input.iptrunk_minimum_links min_items = initial_user_input.iptrunk_minimum_links
DeviceEnumA = Choice('Device A', zip(devices.keys(), devices.items())) DeviceEnumA = Choice("Device A", zip(devices.keys(), devices.items()))
class CreateIptrunkSideAForm(FormPage): class CreateIptrunkSideAForm(FormPage):
class Config: class Config:
title = 'Provide subscription details for side A of the trunk.' title = "Provide subscription details for side A of the trunk."
iptrunk_sideA_node_id: DeviceEnumA iptrunk_sideA_node_id: DeviceEnumA
iptrunk_sideA_ae_iface: str iptrunk_sideA_ae_iface: str
...@@ -70,7 +76,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -70,7 +76,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
# We remove the selected device for side A, to prevent any loops # We remove the selected device for side A, to prevent any loops
devices.pop(str(user_input_side_a.iptrunk_sideA_node_id.name)) devices.pop(str(user_input_side_a.iptrunk_sideA_node_id.name))
DeviceEnumB = Choice('Device B', zip(devices.keys(), devices.items())) DeviceEnumB = Choice("Device B", zip(devices.keys(), devices.items()))
class AeMembersListB(UniqueConstrainedList[str]): class AeMembersListB(UniqueConstrainedList[str]):
min_items = len(user_input_side_a.iptrunk_sideA_ae_members) min_items = len(user_input_side_a.iptrunk_sideA_ae_members)
...@@ -78,7 +84,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -78,7 +84,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
class CreateIptrunkSideBForm(FormPage): class CreateIptrunkSideBForm(FormPage):
class Config: class Config:
title = 'Provide subscription details for side B of the trunk.' title = "Provide subscription details for side B of the trunk."
iptrunk_sideB_node_id: DeviceEnumB iptrunk_sideB_node_id: DeviceEnumB
iptrunk_sideB_ae_iface: str iptrunk_sideB_ae_iface: str
...@@ -88,32 +94,42 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -88,32 +94,42 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
user_input_side_b = yield CreateIptrunkSideBForm user_input_side_b = yield CreateIptrunkSideBForm
return initial_user_input.dict() | \ return (
user_input_side_a.dict() | \ initial_user_input.dict()
user_input_side_b.dict() | user_input_side_a.dict()
| user_input_side_b.dict()
)
@step('Create subscription') @step("Create subscription")
def create_subscription(product: UUIDstr) -> State: def create_subscription(product: UUIDstr) -> State:
subscription = IptrunkInactive.from_product_id(product, uuid4()) subscription = IptrunkInactive.from_product_id(product, uuid4())
return { return {
'subscription': subscription, "subscription": subscription,
'subscription_id': subscription.subscription_id, "subscription_id": subscription.subscription_id,
} }
@step('Get information from IPAM') @step("Get information from IPAM")
def get_info_from_ipam(subscription: IptrunkProvisioning) -> State: def get_info_from_ipam(subscription: IptrunkProvisioning) -> State:
# TODO: get info about how these should be generated # TODO: get info about how these should be generated
subscription.iptrunk.iptrunk_ipv4_network \ subscription.iptrunk.iptrunk_ipv4_network = (
= _ipam.allocate_service_ipv4_network(service_type="TRUNK", comment=subscription.iptrunk.iptrunk_description).v4 _ipam.allocate_service_ipv4_network(
subscription.iptrunk.iptrunk_ipv6_network \ service_type="TRUNK",
= _ipam.allocate_service_ipv6_network(service_type="TRUNK", comment=subscription.iptrunk.iptrunk_description).v6 comment=subscription.iptrunk.iptrunk_description,
return {'subscription': subscription} ).v4
)
subscription.iptrunk.iptrunk_ipv6_network = (
_ipam.allocate_service_ipv6_network(
service_type="TRUNK",
comment=subscription.iptrunk.iptrunk_description,
).v6
)
return {"subscription": subscription}
@step('Initialize subscription') @step("Initialize subscription")
def initialize_subscription( def initialize_subscription(
subscription: IptrunkInactive, subscription: IptrunkInactive,
geant_s_sid: str, geant_s_sid: str,
...@@ -130,7 +146,7 @@ def initialize_subscription( ...@@ -130,7 +146,7 @@ def initialize_subscription(
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],
iptrunk_sideB_ae_members_descriptions: list[str] iptrunk_sideB_ae_members_descriptions: list[str],
) -> State: ) -> State:
subscription.iptrunk.geant_s_sid = geant_s_sid subscription.iptrunk.geant_s_sid = geant_s_sid
subscription.iptrunk.iptrunk_description = iptrunk_description subscription.iptrunk.iptrunk_description = iptrunk_description
...@@ -139,155 +155,201 @@ def initialize_subscription( ...@@ -139,155 +155,201 @@ def initialize_subscription(
subscription.iptrunk.iptrunk_isis_metric = 9000 subscription.iptrunk.iptrunk_isis_metric = 9000
subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links
subscription.iptrunk.iptrunk_sideA_node = \ subscription.iptrunk.iptrunk_sideA_node = Device.from_subscription(
Device.from_subscription(iptrunk_sideA_node_id).device iptrunk_sideA_node_id
).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 \ subscription.iptrunk.iptrunk_sideA_ae_geant_a_sid = (
= 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 \ subscription.iptrunk.iptrunk_sideA_ae_members_description = (
= iptrunk_sideA_ae_members_descriptions iptrunk_sideA_ae_members_descriptions
)
subscription.iptrunk.iptrunk_sideB_node = \
Device.from_subscription(iptrunk_sideB_node_id).device subscription.iptrunk.iptrunk_sideB_node = Device.from_subscription(
subscription.iptrunk.iptrunk_sideB_ae_iface \ iptrunk_sideB_node_id
= iptrunk_sideB_ae_iface ).device
subscription.iptrunk.iptrunk_sideB_ae_geant_a_sid \ subscription.iptrunk.iptrunk_sideB_ae_iface = iptrunk_sideB_ae_iface
= 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
subscription.iptrunk.iptrunk_sideB_ae_members_description \ subscription.iptrunk.iptrunk_sideB_ae_members_description = (
= iptrunk_sideB_ae_members_descriptions iptrunk_sideB_ae_members_descriptions
)
subscription.description = f'IP trunk, geant_s_sid:{geant_s_sid}' subscription.description = f"IP trunk, geant_s_sid:{geant_s_sid}"
subscription = IptrunkProvisioning.from_other_lifecycle( subscription = IptrunkProvisioning.from_other_lifecycle(
subscription, SubscriptionLifecycle.PROVISIONING subscription, SubscriptionLifecycle.PROVISIONING
) )
return {'subscription': subscription} return {"subscription": subscription}
@step('Provision IP trunk interface [DRY RUN]') @step("Provision IP trunk interface [DRY RUN]")
def provision_ip_trunk_iface_dry(subscription: IptrunkProvisioning, def provision_ip_trunk_iface_dry(
process_id: UUIDstr) -> State: subscription: IptrunkProvisioning, process_id: UUIDstr
provisioning_proxy.provision_ip_trunk(subscription, process_id, ) -> State:
'trunk_interface') provisioning_proxy.provision_ip_trunk(
subscription, process_id, "trunk_interface"
)
return {'subscription': subscription, return {
'label_text': 'This is a dry run for the deployment of a new IP ' "subscription": subscription,
'trunk. Deployment is being taken care of by the ' "label_text": (
'provisioning proxy, please wait for the results to ' "This is a dry run for the deployment of a new IP "
'come back before continuing.' "trunk. Deployment is being taken care of by the "
"provisioning proxy, please wait for the results to "
"come back before continuing."
),
} }
@step('Provision IP trunk interface [FOR REAL]') @step("Provision IP trunk interface [FOR REAL]")
def provision_ip_trunk_iface_real(subscription: IptrunkProvisioning, def provision_ip_trunk_iface_real(
process_id: UUIDstr) -> State: subscription: IptrunkProvisioning, process_id: UUIDstr
provisioning_proxy.provision_ip_trunk(subscription, process_id, ) -> State:
'trunk_interface', False) provisioning_proxy.provision_ip_trunk(
subscription, process_id, "trunk_interface", False
)
return {'subscription': subscription, return {
'label_text': 'This is a live deployment of a new IP trunk. ' "subscription": subscription,
'Deployment is being taken care of by the ' "label_text": (
'provisioning proxy, please wait for the results to ' "This is a live deployment of a new IP trunk. "
'come back before continuing.' "Deployment is being taken care of by the "
"provisioning proxy, please wait for the results to "
"come back before continuing."
),
} }
@step('Provision IP trunk ISIS interface [DRY RUN]') @step("Provision IP trunk ISIS interface [DRY RUN]")
def provision_ip_trunk_isis_iface_dry(subscription: IptrunkProvisioning, def provision_ip_trunk_isis_iface_dry(
process_id: UUIDstr) -> State: subscription: IptrunkProvisioning, process_id: UUIDstr
provisioning_proxy.provision_ip_trunk(subscription, process_id, ) -> State:
'isis_interface') provisioning_proxy.provision_ip_trunk(
subscription, process_id, "isis_interface"
)
return {'subscription': subscription, return {
'label_text': 'This is a dry run for the deployment of a new IP ' "subscription": subscription,
'trunk ISIS interface. ' "label_text": (
'Deployment is being taken care of by the ' "This is a dry run for the deployment of a new IP "
'provisioning proxy, please wait for the results to ' "trunk ISIS interface. "
'come back before continuing.' "Deployment is being taken care of by the "
"provisioning proxy, please wait for the results to "
"come back before continuing."
),
} }
@step('Provision IP trunk ISIS interface [FOR REAL]') @step("Provision IP trunk ISIS interface [FOR REAL]")
def provision_ip_trunk_isis_iface_real(subscription: IptrunkProvisioning, def provision_ip_trunk_isis_iface_real(
process_id: UUIDstr) -> State: subscription: IptrunkProvisioning, process_id: UUIDstr
provisioning_proxy.provision_ip_trunk(subscription, process_id, ) -> State:
'isis_interface', False) provisioning_proxy.provision_ip_trunk(
subscription, process_id, "isis_interface", False
)
return {'subscription': subscription, return {
'label_text': 'This is a live deployment of a new IP trunk ' "subscription": subscription,
'ISIS interface. ' "label_text": (
'Deployment is being taken care of by the ' "This is a live deployment of a new IP trunk "
'provisioning proxy, please wait for the results to ' "ISIS interface. "
'come back before continuing.' "Deployment is being taken care of by the "
"provisioning proxy, please wait for the results to "
"come back before continuing."
),
} }
@step('Provision IP trunk LDP interface [DRY RUN]') @step("Provision IP trunk LDP interface [DRY RUN]")
def provision_ip_trunk_ldp_iface_dry(subscription: IptrunkProvisioning, def provision_ip_trunk_ldp_iface_dry(
process_id: UUIDstr) -> State: subscription: IptrunkProvisioning, process_id: UUIDstr
provisioning_proxy.provision_ip_trunk(subscription, process_id, ) -> State:
'ldp_interface') provisioning_proxy.provision_ip_trunk(
subscription, process_id, "ldp_interface"
)
return {'subscription': subscription, return {
'label_text': 'This is a dry run for the deployment of a new IP ' "subscription": subscription,
'trunk LDP interface. ' "label_text": (
'Deployment is being taken care of by the ' "This is a dry run for the deployment of a new IP "
'provisioning proxy, please wait for the results to ' "trunk LDP interface. "
'come back before continuing.' "Deployment is being taken care of by the "
"provisioning proxy, please wait for the results to "
"come back before continuing."
),
} }
@step('Provision IP trunk LDP interface [FOR REAL]') @step("Provision IP trunk LDP interface [FOR REAL]")
def provision_ip_trunk_ldp_iface_real(subscription: IptrunkProvisioning, def provision_ip_trunk_ldp_iface_real(
process_id: UUIDstr) -> State: subscription: IptrunkProvisioning, process_id: UUIDstr
provisioning_proxy.provision_ip_trunk(subscription, process_id, ) -> State:
'ldp_interface', False) provisioning_proxy.provision_ip_trunk(
subscription, process_id, "ldp_interface", False
)
return {'subscription': subscription, return {
'label_text': 'This is a live deployment of a new IP trunk ' "subscription": subscription,
'LDP interface. ' "label_text": (
'Deployment is being taken care of by the ' "This is a live deployment of a new IP trunk "
'provisioning proxy, please wait for the results to ' "LDP interface. "
'come back before continuing.' "Deployment is being taken care of by the "
"provisioning proxy, please wait for the results to "
"come back before continuing."
),
} }
@step('Provision IP trunk LLDP interface [DRY RUN]') @step("Provision IP trunk LLDP interface [DRY RUN]")
def provision_ip_trunk_lldp_iface_dry(subscription: IptrunkProvisioning, def provision_ip_trunk_lldp_iface_dry(
process_id: UUIDstr) -> State: subscription: IptrunkProvisioning, process_id: UUIDstr
provisioning_proxy.provision_ip_trunk(subscription, process_id, ) -> State:
'lldp_interface') provisioning_proxy.provision_ip_trunk(
subscription, process_id, "lldp_interface"
)
return {'subscription': subscription, return {
'label_text': 'This is a dry run for the deployment of a new IP ' "subscription": subscription,
'trunk LLDP interface. ' "label_text": (
'Deployment is being taken care of by the ' "This is a dry run for the deployment of a new IP "
'provisioning proxy, please wait for the results to ' "trunk LLDP interface. "
'come back before continuing.' "Deployment is being taken care of by the "
"provisioning proxy, please wait for the results to "
"come back before continuing."
),
} }
@step('Provision IP trunk LLDP interface [FOR REAL]') @step("Provision IP trunk LLDP interface [FOR REAL]")
def provision_ip_trunk_lldp_iface_real(subscription: IptrunkProvisioning, def provision_ip_trunk_lldp_iface_real(
process_id: UUIDstr) -> State: subscription: IptrunkProvisioning, process_id: UUIDstr
provisioning_proxy.provision_ip_trunk(subscription, process_id, ) -> State:
'lldp_interface', False) provisioning_proxy.provision_ip_trunk(
subscription, process_id, "lldp_interface", False
)
return {'subscription': subscription, return {
'label_text': 'This is a live deployment of a new IP trunk ' "subscription": subscription,
'LLDP interface. ' "label_text": (
'Deployment is being taken care of by the ' "This is a live deployment of a new IP trunk "
'provisioning proxy, please wait for the results to ' "LLDP interface. "
'come back before continuing.' "Deployment is being taken care of by the "
"provisioning proxy, please wait for the results to "
"come back before continuing."
),
} }
@workflow( @workflow(
'Create IP trunk', "Create IP trunk",
initial_input_form=wrap_create_initial_input_form( initial_input_form=wrap_create_initial_input_form(
initial_input_form_generator), initial_input_form_generator
),
target=Target.CREATE, target=Target.CREATE,
) )
def create_iptrunk(): def create_iptrunk():
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment