Skip to content
Snippets Groups Projects
Verified Commit 0649d9ee authored by Karel van Klink's avatar Karel van Klink :smiley_cat:
Browse files

update formatting

parent e5ec2c24
Branches
Tags
1 merge request!12Add sites, and add integration of IPtrunks and routers with LSO deployment
This commit is part of merge request !12. Comments created here will be created in the context of that merge request.
...@@ -4,6 +4,7 @@ import logging ...@@ -4,6 +4,7 @@ import logging
import requests import requests
from orchestrator import inputstep from orchestrator import inputstep
from orchestrator.config.assignee import Assignee from orchestrator.config.assignee import Assignee
# noinspection PyProtectedMember
from orchestrator.forms import FormPage, ReadOnlyField from orchestrator.forms import FormPage, ReadOnlyField
from orchestrator.forms.validators import Accept, Label, LongText from orchestrator.forms.validators import Accept, Label, LongText
from orchestrator.types import UUIDstr, State, strEnum from orchestrator.types import UUIDstr, State, strEnum
...@@ -92,7 +93,7 @@ def provision_device( ...@@ -92,7 +93,7 @@ def provision_device(
def provision_ip_trunk(subscription: IptrunkProvisioning, def provision_ip_trunk(subscription: IptrunkProvisioning,
process_id: UUIDstr, process_id: UUIDstr,
config_object: str, config_object: str,
dry_run: bool = True): dry_run: bool = True):
""" """
Function that provisions an IP trunk service using LSO. Function that provisions an IP trunk service using LSO.
...@@ -100,20 +101,21 @@ def provision_ip_trunk(subscription: IptrunkProvisioning, ...@@ -100,20 +101,21 @@ def provision_ip_trunk(subscription: IptrunkProvisioning,
:param :class:`IptrunkProvisioning` subscription: The subscription object :param :class:`IptrunkProvisioning` subscription: The subscription object
that is to be provisioned. that is to be provisioned.
:param UUIDstr process_id: The related process ID, used for callback. :param UUIDstr process_id: The related process ID, used for callback.
:param str config_object: The type of object that is deployed
:param bool dry_run: A boolean indicating whether this should be a dry run :param bool dry_run: A boolean indicating whether this should be a dry run
or not, defaults to ``True``. or not, defaults to ``True``.
""" """
parameters = { parameters = {
'subscription': json.loads(json_dumps(subscription)), 'subscription': json.loads(json_dumps(subscription)),
'dry_run': dry_run, 'dry_run': dry_run,
'verb': "deploy", # FIXME 'verb': "deploy",
'object': config_object # FIXME 'object': config_object
} }
_send_request('ip_trunk', parameters, process_id, CUDOperation.POST) _send_request('ip_trunk', parameters, process_id, CUDOperation.POST)
#def modify_ip_trunk(old_subscription: Iptrunk, # def modify_ip_trunk(old_subscription: Iptrunk,
# new_subscription: Iptrunk, # new_subscription: Iptrunk,
# process_id: UUIDstr, # process_id: UUIDstr,
# dry_run: bool = True): # dry_run: bool = True):
...@@ -137,9 +139,10 @@ def provision_ip_trunk(subscription: IptrunkProvisioning, ...@@ -137,9 +139,10 @@ def provision_ip_trunk(subscription: IptrunkProvisioning,
# #
# _send_request('ip_trunk', parameters, process_id, CUDOperation.PUT) # _send_request('ip_trunk', parameters, process_id, CUDOperation.PUT)
def deprovision_ip_trunk(subscription: Iptrunk, def deprovision_ip_trunk(subscription: Iptrunk,
process_id: UUIDstr, process_id: UUIDstr,
dry_run: bool = True): dry_run: bool = True):
""" """
Function that provisions an IP trunk service using LSO. Function that provisions an IP trunk service using LSO.
...@@ -157,6 +160,7 @@ def deprovision_ip_trunk(subscription: Iptrunk, ...@@ -157,6 +160,7 @@ def deprovision_ip_trunk(subscription: Iptrunk,
_send_request('ip_trunk', parameters, process_id, CUDOperation.DELETE) _send_request('ip_trunk', parameters, process_id, CUDOperation.DELETE)
@inputstep('Await provisioning proxy results', assignee=Assignee('SYSTEM')) @inputstep('Await provisioning proxy results', assignee=Assignee('SYSTEM'))
def await_pp_results() -> State: def await_pp_results() -> State:
class ProvisioningResultPage(FormPage): class ProvisioningResultPage(FormPage):
......
...@@ -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
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
from orchestrator.targets import Target from orchestrator.targets import Target
...@@ -92,8 +93,6 @@ def get_info_from_ipam(subscription: DeviceInactive) -> State: ...@@ -92,8 +93,6 @@ def get_info_from_ipam(subscription: DeviceInactive) -> State:
ipaddress.ip_address('10.10.10.20') ipaddress.ip_address('10.10.10.20')
subscription.device.device_lo_ipv6_address = \ subscription.device.device_lo_ipv6_address = \
ipaddress.ip_address('fc00:798:10::20') ipaddress.ip_address('fc00:798:10::20')
#subscription.device.device_lo_iso_address \
# = "49.51e5.0001.0620.4009.6047.00"
subscription.device.device_lo_iso_address \ subscription.device.device_lo_iso_address \
= iso_from_ipv4(str(subscription.device.device_lo_ipv4_address)) = iso_from_ipv4(str(subscription.device.device_lo_ipv4_address))
subscription.device.device_si_ipv4_network = '192.168.0.0/31' subscription.device.device_si_ipv4_network = '192.168.0.0/31'
......
...@@ -19,8 +19,8 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> InputForm: ...@@ -19,8 +19,8 @@ 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}?'
) # type:ignore )
return TerminateForm return TerminateForm
......
...@@ -2,6 +2,7 @@ import ipaddress ...@@ -2,6 +2,7 @@ import ipaddress
from uuid import uuid4 from uuid import uuid4
from orchestrator.db.models import ProductTable, SubscriptionTable from orchestrator.db.models import ProductTable, SubscriptionTable
# 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
from orchestrator.targets import Target from orchestrator.targets import Target
...@@ -25,16 +26,17 @@ def device_selector(choice_value: str) -> list: ...@@ -25,16 +26,17 @@ def device_selector(choice_value: str) -> list:
device_subscriptions = {} device_subscriptions = {}
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, .with_entities(SubscriptionTable.subscription_id,
SubscriptionTable.description) SubscriptionTable.description)
.all() .all()
): ):
device_subscriptions[str(device_id)] = device_description device_subscriptions[str(device_id)] = device_description
# noinspection PyTypeChecker
return choice_list( return choice_list(
Choice(choice_value, zip(device_subscriptions.keys(), Choice(choice_value, zip(device_subscriptions.keys(),
device_subscriptions.items())), # type:ignore device_subscriptions.items())), # type:ignore
...@@ -68,10 +70,10 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ...@@ -68,10 +70,10 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
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]
# TODO: we need additional validation: # TODO: we need additional validation:
# sideA fqdn must be different from sideB fqdn # * sideA fqdn must be different from sideB fqdn
# the lenght of iptrunk_sideA_ae_members should # * the length of iptrunk_sideA_ae_members should
# be the same as iptrunk_sideA_ae_members # be the same as iptrunk_sideB_ae_members
# interface names must be validated # * interface names must be validated
user_input = yield CreateIptrunkForm user_input = yield CreateIptrunkForm
...@@ -152,64 +154,72 @@ def initialize_subscription( ...@@ -152,64 +154,72 @@ def initialize_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(subscription: IptrunkProvisioning,
process_id: UUIDstr) -> State: process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "trunk_interface") provisioning_proxy.provision_ip_trunk(subscription, process_id,
'trunk_interface')
return {'subscription': subscription} return {'subscription': subscription}
@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(subscription: IptrunkProvisioning,
process_id: UUIDstr) -> State: process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "trunk_interface", False) provisioning_proxy.provision_ip_trunk(subscription, process_id,
'trunk_interface', False)
return {'subscription': subscription} return {'subscription': subscription}
@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(subscription: IptrunkProvisioning,
process_id: UUIDstr) -> State: process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "isis_interface") provisioning_proxy.provision_ip_trunk(subscription, process_id,
'isis_interface')
return {'subscription': subscription} return {'subscription': subscription}
@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(subscription: IptrunkProvisioning,
process_id: UUIDstr) -> State: process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "isis_interface", False) provisioning_proxy.provision_ip_trunk(subscription, process_id,
'isis_interface', False)
return {'subscription': subscription} return {'subscription': subscription}
@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(subscription: IptrunkProvisioning,
process_id: UUIDstr) -> State: process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "ldp_interface") provisioning_proxy.provision_ip_trunk(subscription, process_id,
'ldp_interface')
return {'subscription': subscription} return {'subscription': subscription}
@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(subscription: IptrunkProvisioning,
process_id: UUIDstr) -> State: process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "ldp_interface", False) provisioning_proxy.provision_ip_trunk(subscription, process_id,
'ldp_interface', False)
return {'subscription': subscription} return {'subscription': subscription}
@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(subscription: IptrunkProvisioning,
process_id: UUIDstr) -> State: process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "lldp_interface") provisioning_proxy.provision_ip_trunk(subscription, process_id,
'lldp_interface')
return {'subscription': subscription} return {'subscription': subscription}
@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(subscription: IptrunkProvisioning,
process_id: UUIDstr) -> State: process_id: UUIDstr) -> State:
provisioning_proxy.provision_ip_trunk(subscription, process_id, "lldp_interface", False) provisioning_proxy.provision_ip_trunk(subscription, process_id,
'lldp_interface', False)
return {'subscription': subscription} return {'subscription': subscription}
......
# noinspection PyProtectedMember
from orchestrator.forms import FormPage from orchestrator.forms import FormPage
from orchestrator.types import FormGenerator, State
from orchestrator.forms.validators import Label from orchestrator.forms.validators import Label
from orchestrator.targets import Target from orchestrator.targets import Target
from orchestrator.types import InputForm, SubscriptionLifecycle, UUIDstr from orchestrator.types import InputForm, SubscriptionLifecycle, UUIDstr
from orchestrator.types import State
from orchestrator.workflow import done, init, step, workflow from orchestrator.workflow import done, init, step, workflow
from orchestrator.workflows.steps import ( from orchestrator.workflows.steps import (
resync, resync,
...@@ -23,50 +24,46 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> InputForm: ...@@ -23,50 +24,46 @@ 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}?'
) # type:ignore )
return TerminateForm return TerminateForm
def _deprovision_in_user_management_system(fqdn: str) -> str:
pass
@step('Deprovision IP trunk [DRY RUN]') @step('Deprovision IP trunk [DRY RUN]')
def deprovision_ip_trunk_dry(subscription: Iptrunk, def deprovision_ip_trunk_dry(subscription: Iptrunk,
process_id: UUIDstr) -> State: process_id: UUIDstr) -> State:
provisioning_proxy.deprovision_ip_trunk(subscription, process_id ) provisioning_proxy.deprovision_ip_trunk(subscription, process_id)
return {'subscription': subscription} return {'subscription': subscription}
@step('Deprovision IP trunk [FOR REAL]') @step('Deprovision IP trunk [FOR REAL]')
def deprovision_ip_trunk_real(subscription: Iptrunk, def deprovision_ip_trunk_real(subscription: Iptrunk,
process_id: UUIDstr) -> State: process_id: UUIDstr) -> State:
provisioning_proxy.deprovision_ip_trunk(subscription, process_id, False) provisioning_proxy.deprovision_ip_trunk(subscription, process_id, False)
return {'subscription': subscription} return {'subscription': subscription}
@workflow( @workflow(
"Terminate IPtrunk", 'Terminate IPtrunk',
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_iptrunk(): def terminate_iptrunk():
return ( return (
init init
>> store_process_subscription(Target.TERMINATE) >> store_process_subscription(Target.TERMINATE)
>> unsync >> unsync
>> deprovision_ip_trunk_dry >> deprovision_ip_trunk_dry
>> await_pp_results >> await_pp_results
>> confirm_pp_results >> confirm_pp_results
>> deprovision_ip_trunk_real >> deprovision_ip_trunk_real
>> await_pp_results >> await_pp_results
>> confirm_pp_results >> confirm_pp_results
>> set_status(SubscriptionLifecycle.TERMINATED) >> set_status(SubscriptionLifecycle.TERMINATED)
>> resync >> resync
>> done >> done
) )
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment