diff --git a/gso/services/provisioning_proxy.py b/gso/services/provisioning_proxy.py index 8b170170a23275bace2d2e467f7d23d28e5c1dd4..d633a68f96d5bb215d47433abf2d2d287aec6a41 100644 --- a/gso/services/provisioning_proxy.py +++ b/gso/services/provisioning_proxy.py @@ -92,6 +92,7 @@ def provision_device( def provision_ip_trunk(subscription: IptrunkProvisioning, process_id: UUIDstr, + config_object: str, dry_run: bool = True): """ Function that provisions an IP trunk service using LSO. @@ -105,37 +106,56 @@ def provision_ip_trunk(subscription: IptrunkProvisioning, parameters = { 'subscription': json.loads(json_dumps(subscription)), 'dry_run': dry_run, - 'verb': '', # FIXME - 'object': '' # FIXME + 'verb': "deploy", # FIXME + 'object': config_object # FIXME } _send_request('ip_trunk', parameters, process_id, CUDOperation.POST) -def modify_ip_trunk(old_subscription: Iptrunk, - new_subscription: Iptrunk, - process_id: UUIDstr, - dry_run: bool = True): +#def modify_ip_trunk(old_subscription: Iptrunk, +# new_subscription: Iptrunk, +# process_id: UUIDstr, +# dry_run: bool = True): +# """ +# Function that modifies an existing IP trunk subscription using LSO. +# +# :param :class:`Iptrunk` old_subscription: The subscription object, before +# its modification. +# :param :class:`Iptrunk` new_subscription: The subscription object, after +# modifications have been made to it. +# :param UUIDstr process_id: The related process ID, used for callback. +# :param bool dry_run: A boolean indicating whether this should be a dry ryn +# or not, defaults to ``True``. +# """ +# parameters = { +# 'dry_run': dry_run, +# 'old_subscription': old_subscription, +# 'subscription': new_subscription +# # FIXME missing parameters +# } +# +# _send_request('ip_trunk', parameters, process_id, CUDOperation.PUT) + +def deprovision_ip_trunk(subscription: Iptrunk, + process_id: UUIDstr, + dry_run: bool = True): """ - Function that modifies an existing IP trunk subscription using LSO. + Function that provisions an IP trunk service using LSO. - :param :class:`Iptrunk` old_subscription: The subscription object, before - its modification. - :param :class:`Iptrunk` new_subscription: The subscription object, after - modifications have been made to it. + :param :class:`IptrunkProvisioning` subscription: The subscription object + that is to be provisioned. :param UUIDstr process_id: The related process ID, used for callback. - :param bool dry_run: A boolean indicating whether this should be a dry ryn + :param bool dry_run: A boolean indicating whether this should be a dry run or not, defaults to ``True``. """ parameters = { + 'subscription': json.loads(json_dumps(subscription)), 'dry_run': dry_run, - 'old_subscription': old_subscription, - 'subscription': new_subscription - # FIXME missing parameters + 'verb': "remove" } - _send_request('ip_trunk', parameters, process_id, CUDOperation.PUT) - + _send_request('ip_trunk', parameters, process_id, CUDOperation.DELETE) @inputstep('Await provisioning proxy results', assignee=Assignee('SYSTEM')) def await_pp_results() -> State: diff --git a/gso/workflows/device/create_device.py b/gso/workflows/device/create_device.py index 4f791fcac00b023dae66a5f97e8478a35ad7ff02..0581d5b11226e3b09a3ba82104344b09c05d36fb 100644 --- a/gso/workflows/device/create_device.py +++ b/gso/workflows/device/create_device.py @@ -89,9 +89,11 @@ def get_info_from_ipam(subscription: DeviceInactive) -> State: # subscription.device.lo_ipv6_address = lo.v6 # TODO: get info about how these should be generated subscription.device.device_lo_ipv4_address = \ - ipaddress.ip_address('10.10.10.10') + ipaddress.ip_address('10.10.10.20') subscription.device.device_lo_ipv6_address = \ - ipaddress.ip_address('fc00:798:10::10') + 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 \ = iso_from_ipv4(str(subscription.device.device_lo_ipv4_address)) subscription.device.device_si_ipv4_network = '192.168.0.0/31' diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py index efbc856808687bb658207b9ba4efb3b8739be204..5ddc3bfa8aa9e64a035f5bbf15164a13f3472a93 100644 --- a/gso/workflows/iptrunk/create_iptrunk.py +++ b/gso/workflows/iptrunk/create_iptrunk.py @@ -150,18 +150,66 @@ def initialize_subscription( return {'subscription': subscription} -@step('Provision IP trunk [DRY RUN]') -def provision_ip_trunk_dry(subscription: IptrunkProvisioning, +@step('Provision IP trunk interface [DRY RUN]') +def provision_ip_trunk_iface_dry(subscription: IptrunkProvisioning, process_id: UUIDstr) -> State: - provisioning_proxy.provision_ip_trunk(subscription, process_id) + provisioning_proxy.provision_ip_trunk(subscription, process_id, "trunk_interface") return {'subscription': subscription} -@step('Provision IP trunk [FOR REAL]') -def provision_ip_trunk_real(subscription: IptrunkProvisioning, +@step('Provision IP trunk interface [FOR REAL]') +def provision_ip_trunk_iface_real(subscription: IptrunkProvisioning, process_id: UUIDstr) -> State: - provisioning_proxy.provision_ip_trunk(subscription, process_id, False) + provisioning_proxy.provision_ip_trunk(subscription, process_id, "trunk_interface", False) + + return {'subscription': subscription} + + +@step('Provision IP trunk ISIS interface [DRY RUN]') +def provision_ip_trunk_isis_iface_dry(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, "isis_interface") + + return {'subscription': subscription} + + +@step('Provision IP trunk ISIS interface [FOR REAL]') +def provision_ip_trunk_isis_iface_real(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, "isis_interface", False) + + return {'subscription': subscription} + + +@step('Provision IP trunk LDP interface [DRY RUN]') +def provision_ip_trunk_ldp_iface_dry(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, "ldp_interface") + + return {'subscription': subscription} + + +@step('Provision IP trunk LDP interface [FOR REAL]') +def provision_ip_trunk_ldp_iface_real(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, "ldp_interface", False) + + return {'subscription': subscription} + + +@step('Provision IP trunk LLDP interface [DRY RUN]') +def provision_ip_trunk_lldp_iface_dry(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, "lldp_interface") + + return {'subscription': subscription} + + +@step('Provision IP trunk LLDP interface [FOR REAL]') +def provision_ip_trunk_lldp_iface_real(subscription: IptrunkProvisioning, + process_id: UUIDstr) -> State: + provisioning_proxy.provision_ip_trunk(subscription, process_id, "lldp_interface", False) return {'subscription': subscription} @@ -179,10 +227,28 @@ def create_iptrunk(): >> store_process_subscription(Target.CREATE) >> get_info_from_ipam >> initialize_subscription - >> provision_ip_trunk_dry + >> provision_ip_trunk_iface_dry + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_iface_real + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_isis_iface_dry + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_isis_iface_real + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_ldp_iface_dry + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_ldp_iface_real + >> await_pp_results + >> confirm_pp_results + >> provision_ip_trunk_lldp_iface_dry >> await_pp_results >> confirm_pp_results - >> provision_ip_trunk_real + >> provision_ip_trunk_lldp_iface_real >> await_pp_results >> confirm_pp_results >> set_status(SubscriptionLifecycle.ACTIVE) diff --git a/gso/workflows/iptrunk/terminate_iptrunk.py b/gso/workflows/iptrunk/terminate_iptrunk.py index ddb65eacfd800868a76f2a5fe5b4f0a472035d42..54e00e0ee6fa7af4a63f4704485549790fbbb7f8 100644 --- a/gso/workflows/iptrunk/terminate_iptrunk.py +++ b/gso/workflows/iptrunk/terminate_iptrunk.py @@ -1,4 +1,5 @@ from orchestrator.forms import FormPage +from orchestrator.types import FormGenerator, State from orchestrator.forms.validators import Label from orchestrator.targets import Target from orchestrator.types import InputForm, SubscriptionLifecycle, UUIDstr @@ -12,6 +13,9 @@ from orchestrator.workflows.steps import ( from orchestrator.workflows.utils import wrap_modify_initial_input_form from gso.products.product_types.iptrunk import Iptrunk +from gso.services import provisioning_proxy +from gso.services.provisioning_proxy import confirm_pp_results, \ + await_pp_results def initial_input_form_generator(subscription_id: UUIDstr) -> InputForm: @@ -29,10 +33,20 @@ def _deprovision_in_user_management_system(fqdn: str) -> str: pass -@step("Deprovision Iptrunk") -def deprovision_iptrunk(subscription: Iptrunk) -> None: - # _deprovision_in_user_management_system(subscription.user.user_id) - pass +@step('Deprovision IP trunk [DRY RUN]') +def deprovision_ip_trunk_dry(subscription: Iptrunk, + process_id: UUIDstr) -> State: + provisioning_proxy.deprovision_ip_trunk(subscription, process_id ) + + return {'subscription': subscription} + + +@step('Deprovision IP trunk [FOR REAL]') +def deprovision_ip_trunk_real(subscription: Iptrunk, + process_id: UUIDstr) -> State: + provisioning_proxy.deprovision_ip_trunk(subscription, process_id, False) + + return {'subscription': subscription} @workflow( @@ -46,7 +60,12 @@ def terminate_iptrunk(): init >> store_process_subscription(Target.TERMINATE) >> unsync - >> deprovision_iptrunk + >> deprovision_ip_trunk_dry + >> await_pp_results + >> confirm_pp_results + >> deprovision_ip_trunk_real + >> await_pp_results + >> confirm_pp_results >> set_status(SubscriptionLifecycle.TERMINATED) >> resync >> done