From e5ec2c24b1dec6c94ac01dcd743c2b7f5a4d1d25 Mon Sep 17 00:00:00 2001
From: Simone Spinelli <simone.spinelli@geant.org>
Date: Mon, 15 May 2023 10:12:00 +0000
Subject: [PATCH] Resolve conflicts

---
 gso/services/provisioning_proxy.py         | 54 +++++++++-----
 gso/workflows/device/create_device.py      |  6 +-
 gso/workflows/iptrunk/create_iptrunk.py    | 82 +++++++++++++++++++---
 gso/workflows/iptrunk/terminate_iptrunk.py | 29 ++++++--
 4 files changed, 139 insertions(+), 32 deletions(-)

diff --git a/gso/services/provisioning_proxy.py b/gso/services/provisioning_proxy.py
index 8b170170..d633a68f 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 4f791fca..0581d5b1 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 efbc8568..5ddc3bfa 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 ddb65eac..54e00e0e 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
-- 
GitLab