diff --git a/gso/settings.py b/gso/settings.py
index a0be09616096e5916526878f0875a27108eb8fc3..a28b4eae0e033d463e41aff59ddd150222dfff0d 100644
--- a/gso/settings.py
+++ b/gso/settings.py
@@ -4,7 +4,8 @@ GSO settings, ensuring that the required parameters are set correctly.
 import ipaddress
 import json
 import os
-from pydantic import BaseSettings, Field
+# from pydantic import BaseSettings, Field
+from pydantic import BaseSettings
 
 
 class GeneralParams(BaseSettings):
diff --git a/gso/workflows/device/create_device.py b/gso/workflows/device/create_device.py
index 62d319586de87a52fdb4026ecd5a43ab07c0ac19..02f7eeba00e2c09003fcec8621b8f7f792f1a61a 100644
--- a/gso/workflows/device/create_device.py
+++ b/gso/workflows/device/create_device.py
@@ -3,6 +3,7 @@ import re
 from uuid import uuid4
 
 from orchestrator.db.models import ProductTable, SubscriptionTable
+
 # noinspection PyProtectedMember
 from orchestrator.forms import FormPage
 from orchestrator.forms.validators import Choice, choice_list
@@ -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_types import device
-from gso.products.product_types.device import DeviceInactive, \
-    DeviceProvisioning
+from gso.products.product_types.device import (
+    DeviceInactive,
+    DeviceProvisioning,
+)
 from gso.products.product_types.site import Site
 from gso.services import _ipam
 from gso.services import provisioning_proxy
-from gso.services.provisioning_proxy import await_pp_results, \
-    confirm_pp_results
+from gso.services.provisioning_proxy import (
+    await_pp_results,
+    confirm_pp_results,
+)
 
 
 def site_selector() -> list:
     site_subscriptions = {}
     for site_id, site_description in (
-            SubscriptionTable.query
-                             .join(ProductTable)
-                             .filter(
-                                ProductTable.product_type == 'Site',
-                                SubscriptionTable.status == 'active')
-                             .with_entities(SubscriptionTable.subscription_id,
-                                            SubscriptionTable.description)
-                             .all()
+        SubscriptionTable.query.join(ProductTable)
+        .filter(
+            ProductTable.product_type == "Site",
+            SubscriptionTable.status == "active",
+        )
+        .with_entities(
+            SubscriptionTable.subscription_id, SubscriptionTable.description
+        )
+        .all()
     ):
         site_subscriptions[str(site_id)] = site_description
 
     # noinspection PyTypeChecker
     return choice_list(
-        Choice('site_selection',
-               zip(site_subscriptions.keys(),
-                   site_subscriptions.items())),  # type:ignore
+        Choice(
+            "site_selection",
+            zip(site_subscriptions.keys(), site_subscriptions.items()),
+        ),  # type:ignore
         min_items=1,
         max_items=1,
     )
@@ -66,123 +73,144 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
     return user_input.dict()
 
 
-@step('Create subscription')
+@step("Create subscription")
 def create_subscription(product: UUIDstr) -> State:
     subscription = DeviceInactive.from_product_id(product, uuid4())
 
     return {
-        'subscription': subscription,
-        'subscription_id': subscription.subscription_id,
+        "subscription": subscription,
+        "subscription_id": subscription.subscription_id,
     }
 
 
 def iso_from_ipv4(ipv4_address):
-    padded_octets = [f'{x:>03}' for x in ipv4_address.split('.')]
-    joined_octets = ''.join(padded_octets)
-    re_split = '.'.join(re.findall('....', joined_octets))
-    result = '.'.join(['49.51e5.0001', re_split, '00'])
+    padded_octets = [f"{x:>03}" for x in ipv4_address.split(".")]
+    joined_octets = "".join(padded_octets)
+    re_split = ".".join(re.findall("....", joined_octets))
+    result = ".".join(["49.51e5.0001", re_split, "00"])
     return result
 
 
-@step('Get information from IPAM')
+@step("Get information from IPAM")
 def get_info_from_ipam(subscription: DeviceProvisioning) -> State:
-    lo0_alias = re.sub('.geant.net', '', subscription.device.device_fqdn)
-    lo0_name = f'lo0.{lo0_alias}'
-    lo0_addr = _ipam.allocate_service_host(hostname=lo0_name,
-                                           service_type='LO',
-                                           cname_aliases=[lo0_alias])
+    lo0_alias = re.sub(".geant.net", "", subscription.device.device_fqdn)
+    lo0_name = f"lo0.{lo0_alias}"
+    lo0_addr = _ipam.allocate_service_host(
+        hostname=lo0_name, service_type="LO", cname_aliases=[lo0_alias]
+    )
     subscription.device.device_lo_ipv4_address = lo0_addr.v4
     subscription.device.device_lo_ipv6_address = lo0_addr.v6
-    subscription.device.device_lo_iso_address \
-        = iso_from_ipv4(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_ias_lt_ipv4_network \
-        = _ipam.allocate_service_ipv4_network(service_type='LT_IAS', comment=f"LT for {lo0_name}").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')
+    subscription.device.device_lo_iso_address = iso_from_ipv4(
+        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_ias_lt_ipv4_network = (
+        _ipam.allocate_service_ipv4_network(
+            service_type="LT_IAS", comment=f"LT for {lo0_name}"
+        ).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(
-        subscription: device.DeviceInactive,
-        hostname: str,
-        ts_address: ipaddress.IPv4Address,
-        ts_port: str,
-        device_vendor: device_pb.DeviceVendor,
-        device_site: str,
-        device_role: device_pb.DeviceRole
+    subscription: device.DeviceInactive,
+    hostname: str,
+    ts_address: ipaddress.IPv4Address,
+    ts_port: str,
+    device_vendor: device_pb.DeviceVendor,
+    device_site: str,
+    device_role: device_pb.DeviceRole,
 ) -> State:
     subscription.device.device_ts_address = str(ts_address)
     subscription.device.device_ts_port = str(ts_port)
     subscription.device.device_vendor = device_vendor
-    subscription.device.device_site \
-        = Site.from_subscription(device_site[0]).site
-    fqdn = f'{hostname}.{subscription.device.device_site.site_name.lower()}.' \
-           f'{subscription.device.device_site.site_country_code.lower()}' \
-           f'.geant.net'
+    subscription.device.device_site = Site.from_subscription(
+        device_site[0]
+    ).site
+    fqdn = (
+        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_role = device_role
     subscription.device.device_access_via_ts = True
-    subscription.description = f'Device {fqdn} ' \
-                               f'({subscription.device_type})'
+    subscription.description = f"Device {fqdn} ({subscription.device_type})"
 
     subscription = device.DeviceProvisioning.from_other_lifecycle(
         subscription, SubscriptionLifecycle.PROVISIONING
     )
 
-    return {'subscription': subscription}
+    return {"subscription": subscription}
 
 
-@step('Provision device [DRY RUN]')
-def provision_device_dry(subscription: DeviceProvisioning,
-                         process_id: UUIDstr) -> State:
+@step("Provision device [DRY RUN]")
+def provision_device_dry(
+    subscription: DeviceProvisioning, process_id: UUIDstr
+) -> State:
     provisioning_proxy.provision_device(subscription, process_id)
 
-    return {'subscription': subscription,
-            'label_text': f'Dry run for the deployment of base config on a'
-                          f'new {subscription.device_type}. Deployment is '
-                          f'done  by the provisioning proxy, please '
-                          f'wait for the results to come back before '
-                          f'continuing.'
-            }
+    return {
+        "subscription": subscription,
+        "label_text": (
+            "Dry run for the deployment of base config on a"
+            f"new {subscription.device_type}. Deployment is "
+            "done  by the provisioning proxy, please "
+            "wait for the results to come back before "
+            "continuing."
+        ),
+    }
 
 
-@step('Provision device [FOR REAL]')
-def provision_device_real(subscription: DeviceProvisioning,
-                          process_id: UUIDstr) -> State:
+@step("Provision device [FOR REAL]")
+def provision_device_real(
+    subscription: DeviceProvisioning, process_id: UUIDstr
+) -> State:
     provisioning_proxy.provision_device(subscription, process_id, False)
 
-    return {'subscription': subscription,
-            'label_text': f'Deployment of base config for  a new '
-                          f'{subscription.device_type}. Deployment is being '
-                          f'taken care of by the provisioning proxy, please '
-                          f'wait for the results to come back before '
-                          f'continuing.'
-            }
+    return {
+        "subscription": subscription,
+        "label_text": (
+            "Deployment of base config for  a new "
+            f"{subscription.device_type}. Deployment is being "
+            "taken care of by the provisioning proxy, please "
+            "wait for the results to come back before "
+            "continuing."
+        ),
+    }
 
 
 @workflow(
-    'Create device',
+    "Create device",
     initial_input_form=wrap_create_initial_input_form(
-        initial_input_form_generator),
+        initial_input_form_generator
+    ),
     target=Target.CREATE,
 )
 def create_device():
     return (
-            init
-            >> create_subscription
-            >> store_process_subscription(Target.CREATE)
-            >> initialize_subscription
-            >> get_info_from_ipam
-            >> provision_device_dry
-            >> await_pp_results
-            >> confirm_pp_results
-            >> provision_device_real
-            >> await_pp_results
-            >> confirm_pp_results
-            >> set_status(SubscriptionLifecycle.ACTIVE)
-            >> resync
-            >> done
+        init
+        >> create_subscription
+        >> store_process_subscription(Target.CREATE)
+        >> initialize_subscription
+        >> get_info_from_ipam
+        >> provision_device_dry
+        >> await_pp_results
+        >> confirm_pp_results
+        >> provision_device_real
+        >> await_pp_results
+        >> confirm_pp_results
+        >> set_status(SubscriptionLifecycle.ACTIVE)
+        >> resync
+        >> done
     )
diff --git a/gso/workflows/device/terminate_device.py b/gso/workflows/device/terminate_device.py
index 7659e78d8d5c05582f7964757203825a88c8ec6b..c8b9147372fbb76b8433393fd5fc0066e4fc72b4 100644
--- a/gso/workflows/device/terminate_device.py
+++ b/gso/workflows/device/terminate_device.py
@@ -21,7 +21,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> InputForm:
 
     class TerminateForm(FormPage):
         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
@@ -34,44 +34,63 @@ def _deprovision_in_user_management_system(fqdn: str) -> str:
 @step("Deprovision loopback IPs from IPAM/DNS")
 def deprovision_loopback_ips(subscription: Device) -> None:
     input_host_addresses = ipam.HostAddresses(
-            v4=ipaddress.ip_address(subscription.device.device_lo_ipv4_address),
-            v6=ipaddress.ip_address(subscription.device.device_lo_ipv6_address)
-            )
-    fqdn_as_list=subscription.device.device_fqdn.split(".")
-    hostname=str(fqdn_as_list[0])+"."+str(fqdn_as_list[1])+"."+str(fqdn_as_list[2])
-    lo0_name="lo0."+hostname
-    host_addresses=ipam.delete_service_host(
+        v4=ipaddress.ip_address(subscription.device.device_lo_ipv4_address),
+        v6=ipaddress.ip_address(subscription.device.device_lo_ipv6_address),
+    )
+    fqdn_as_list = subscription.device.device_fqdn.split(".")
+    hostname = (
+        str(fqdn_as_list[0])
+        + "."
+        + str(fqdn_as_list[1])
+        + "."
+        + str(fqdn_as_list[2])
+    )
+    lo0_name = "lo0." + hostname
+    host_addresses = ipam.delete_service_host(
         hostname=lo0_name,
         host_addresses=input_host_addresses,
         cname_aliases=[hostname],
-        service_type='LO'
-        )
-    return {'cleanup_for': hostname }
+        service_type="LO",
+    )
+    return {"addresses": host_addresses}
 
 
 @step("Deprovision SI- interface  IPs from IPAM/DNS")
 def deprovision_si_ips(subscription: Device) -> None:
-    service_network=ipam.delete_service_network(
-            network=ipaddress.ip_network(subscription.device.device_si_ipv4_network)
-            ,service_type='SI')
-    return {'service_network': service_network}
+    service_network = ipam.delete_service_network(
+        network=ipaddress.ip_network(
+            subscription.device.device_si_ipv4_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:
-    service_network_v4=ipam.delete_service_network(
-            network=ipaddress.ip_network(subscription.device.device_ias_lt_ipv4_network),
-            service_type='LT_IAS')
-    service_network_v6=ipam.delete_service_network(
-            network=ipaddress.ip_network(subscription.device.device_ias_lt_ipv6_network),
-            service_type='LT_IAS')
-    return {'service_network_v4': service_network_v4,
-            'service_network_v6': service_network_v6}
+    service_network_v4 = ipam.delete_service_network(
+        network=ipaddress.ip_network(
+            subscription.device.device_ias_lt_ipv4_network
+        ),
+        service_type="LT_IAS",
+    )
+    service_network_v6 = ipam.delete_service_network(
+        network=ipaddress.ip_network(
+            subscription.device.device_ias_lt_ipv6_network
+        ),
+        service_type="LT_IAS",
+    )
+    return {
+        "service_network_v4": service_network_v4,
+        "service_network_v6": service_network_v6,
+    }
+
 
 @workflow(
     "Terminate device",
     initial_input_form=wrap_modify_initial_input_form(
-                       initial_input_form_generator),
+        initial_input_form_generator
+    ),
     target=Target.TERMINATE,
 )
 def terminate_device():
diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py
index e90d42841a92bbeadd49956c25c99fbbcaee6dcf..9c0e1c8c2215d12153830b538c1ea37a99133009 100644
--- a/gso/workflows/iptrunk/create_iptrunk.py
+++ b/gso/workflows/iptrunk/create_iptrunk.py
@@ -1,6 +1,7 @@
 from uuid import uuid4
 
 from orchestrator.db.models import ProductTable, SubscriptionTable
+
 # noinspection PyProtectedMember
 from orchestrator.forms import FormPage
 from orchestrator.forms.validators import Choice, UniqueConstrainedList
@@ -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.iptrunk import IptrunkType
 from gso.products.product_types.device import Device
-from gso.products.product_types.iptrunk import IptrunkInactive, \
-    IptrunkProvisioning
+from gso.products.product_types.iptrunk import (
+    IptrunkInactive,
+    IptrunkProvisioning,
+)
 from gso.services import provisioning_proxy, _ipam
-from gso.services.provisioning_proxy import confirm_pp_results, \
-    await_pp_results
+from gso.services.provisioning_proxy import (
+    confirm_pp_results,
+    await_pp_results,
+)
 
 
 def initial_input_form_generator(product_name: str) -> FormGenerator:
@@ -28,14 +33,15 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
 
     devices = {}
     for device_id, device_description in (
-            SubscriptionTable.query.join(ProductTable)
-            .filter(
-                ProductTable.product_type == 'Device',
-                SubscriptionTable.status == 'active',
-            )
-            .with_entities(SubscriptionTable.subscription_id,
-                           SubscriptionTable.description)
-            .all()
+        SubscriptionTable.query.join(ProductTable)
+        .filter(
+            ProductTable.product_type == "Device",
+            SubscriptionTable.status == "active",
+        )
+        .with_entities(
+            SubscriptionTable.subscription_id, SubscriptionTable.description
+        )
+        .all()
     ):
         devices[str(device_id)] = device_description
 
@@ -54,11 +60,11 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
     class AeMembersListA(UniqueConstrainedList[str]):
         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 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_ae_iface: str
@@ -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
     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]):
         min_items = len(user_input_side_a.iptrunk_sideA_ae_members)
@@ -78,7 +84,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
 
     class CreateIptrunkSideBForm(FormPage):
         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_ae_iface: str
@@ -88,49 +94,59 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
 
     user_input_side_b = yield CreateIptrunkSideBForm
 
-    return initial_user_input.dict() | \
-        user_input_side_a.dict() | \
-        user_input_side_b.dict()
+    return (
+        initial_user_input.dict()
+        | user_input_side_a.dict()
+        | user_input_side_b.dict()
+    )
 
 
-@step('Create subscription')
+@step("Create subscription")
 def create_subscription(product: UUIDstr) -> State:
     subscription = IptrunkInactive.from_product_id(product, uuid4())
 
     return {
-        'subscription': subscription,
-        'subscription_id': subscription.subscription_id,
+        "subscription": subscription,
+        "subscription_id": subscription.subscription_id,
     }
 
 
-@step('Get information from IPAM')
+@step("Get information from IPAM")
 def get_info_from_ipam(subscription: IptrunkProvisioning) -> State:
     # TODO: get info about how these should be generated
-    subscription.iptrunk.iptrunk_ipv4_network \
-        = _ipam.allocate_service_ipv4_network(service_type="TRUNK", comment=subscription.iptrunk.iptrunk_description).v4
-    subscription.iptrunk.iptrunk_ipv6_network \
-        = _ipam.allocate_service_ipv6_network(service_type="TRUNK", comment=subscription.iptrunk.iptrunk_description).v6
-    return {'subscription': subscription}
+    subscription.iptrunk.iptrunk_ipv4_network = (
+        _ipam.allocate_service_ipv4_network(
+            service_type="TRUNK",
+            comment=subscription.iptrunk.iptrunk_description,
+        ).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(
-        subscription: IptrunkInactive,
-        geant_s_sid: str,
-        iptrunk_type: IptrunkType,
-        iptrunk_description: str,
-        iptrunk_speed: str,
-        iptrunk_minimum_links: int,
-        iptrunk_sideA_node_id: str,
-        iptrunk_sideA_ae_iface: str,
-        iptrunk_sideA_ae_geant_a_sid: str,
-        iptrunk_sideA_ae_members: list[str],
-        iptrunk_sideA_ae_members_descriptions: list[str],
-        iptrunk_sideB_node_id: str,
-        iptrunk_sideB_ae_iface: str,
-        iptrunk_sideB_ae_geant_a_sid: str,
-        iptrunk_sideB_ae_members: list[str],
-        iptrunk_sideB_ae_members_descriptions: list[str]
+    subscription: IptrunkInactive,
+    geant_s_sid: str,
+    iptrunk_type: IptrunkType,
+    iptrunk_description: str,
+    iptrunk_speed: str,
+    iptrunk_minimum_links: int,
+    iptrunk_sideA_node_id: str,
+    iptrunk_sideA_ae_iface: str,
+    iptrunk_sideA_ae_geant_a_sid: str,
+    iptrunk_sideA_ae_members: list[str],
+    iptrunk_sideA_ae_members_descriptions: list[str],
+    iptrunk_sideB_node_id: str,
+    iptrunk_sideB_ae_iface: str,
+    iptrunk_sideB_ae_geant_a_sid: str,
+    iptrunk_sideB_ae_members: list[str],
+    iptrunk_sideB_ae_members_descriptions: list[str],
 ) -> State:
     subscription.iptrunk.geant_s_sid = geant_s_sid
     subscription.iptrunk.iptrunk_description = iptrunk_description
@@ -139,189 +155,235 @@ def initialize_subscription(
     subscription.iptrunk.iptrunk_isis_metric = 9000
     subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links
 
-    subscription.iptrunk.iptrunk_sideA_node = \
-        Device.from_subscription(iptrunk_sideA_node_id).device
+    subscription.iptrunk.iptrunk_sideA_node = Device.from_subscription(
+        iptrunk_sideA_node_id
+    ).device
     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_description \
-        = iptrunk_sideA_ae_members_descriptions
-
-    subscription.iptrunk.iptrunk_sideB_node = \
-        Device.from_subscription(iptrunk_sideB_node_id).device
-    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_sideA_ae_members_description = (
+        iptrunk_sideA_ae_members_descriptions
+    )
+
+    subscription.iptrunk.iptrunk_sideB_node = Device.from_subscription(
+        iptrunk_sideB_node_id
+    ).device
+    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_members = iptrunk_sideB_ae_members
-    subscription.iptrunk.iptrunk_sideB_ae_members_description \
-        = iptrunk_sideB_ae_members_descriptions
+    subscription.iptrunk.iptrunk_sideB_ae_members_description = (
+        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, SubscriptionLifecycle.PROVISIONING
     )
 
-    return {'subscription': subscription}
-
-
-@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,
-                                          'trunk_interface')
-
-    return {'subscription': subscription,
-            'label_text': 'This is a dry run for the deployment of a new IP '
-                          '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]')
-def provision_ip_trunk_iface_real(subscription: IptrunkProvisioning,
-                                  process_id: UUIDstr) -> State:
-    provisioning_proxy.provision_ip_trunk(subscription, process_id,
-                                          'trunk_interface', False)
-
-    return {'subscription': subscription,
-            'label_text': 'This is a live deployment of a new IP 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 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,
-            'label_text': 'This is a dry run for the deployment of a new IP '
-                          'trunk ISIS interface. '
-                          '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]')
-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,
-            'label_text': 'This is a live deployment of a new IP trunk '
-                          'ISIS interface. '
-                          '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]')
-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,
-            'label_text': 'This is a dry run for the deployment of a new IP '
-                          'trunk LDP interface. '
-                          '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]')
-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,
-            'label_text': 'This is a live deployment of a new IP trunk '
-                          'LDP interface. '
-                          '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]')
-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,
-            'label_text': 'This is a dry run for the deployment of a new IP '
-                          'trunk LLDP interface. '
-                          '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]')
-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,
-            'label_text': 'This is a live deployment of a new IP trunk '
-                          'LLDP interface. '
-                          'Deployment is being taken care of by the '
-                          'provisioning proxy, please wait for the results to '
-                          'come back before continuing.'
-            }
+    return {"subscription": subscription}
+
+
+@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, "trunk_interface"
+    )
+
+    return {
+        "subscription": subscription,
+        "label_text": (
+            "This is a dry run for the deployment of a new IP "
+            "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]")
+def provision_ip_trunk_iface_real(
+    subscription: IptrunkProvisioning, process_id: UUIDstr
+) -> State:
+    provisioning_proxy.provision_ip_trunk(
+        subscription, process_id, "trunk_interface", False
+    )
+
+    return {
+        "subscription": subscription,
+        "label_text": (
+            "This is a live deployment of a new IP 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 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,
+        "label_text": (
+            "This is a dry run for the deployment of a new IP "
+            "trunk ISIS interface. "
+            "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]")
+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,
+        "label_text": (
+            "This is a live deployment of a new IP trunk "
+            "ISIS interface. "
+            "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]")
+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,
+        "label_text": (
+            "This is a dry run for the deployment of a new IP "
+            "trunk LDP interface. "
+            "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]")
+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,
+        "label_text": (
+            "This is a live deployment of a new IP trunk "
+            "LDP interface. "
+            "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]")
+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,
+        "label_text": (
+            "This is a dry run for the deployment of a new IP "
+            "trunk LLDP interface. "
+            "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]")
+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,
+        "label_text": (
+            "This is a live deployment of a new IP trunk "
+            "LLDP interface. "
+            "Deployment is being taken care of by the "
+            "provisioning proxy, please wait for the results to "
+            "come back before continuing."
+        ),
+    }
 
 
 @workflow(
-    'Create IP trunk',
+    "Create IP trunk",
     initial_input_form=wrap_create_initial_input_form(
-        initial_input_form_generator),
+        initial_input_form_generator
+    ),
     target=Target.CREATE,
 )
 def create_iptrunk():
     return (
-            init
-            >> create_subscription
-            >> store_process_subscription(Target.CREATE)
-            >> initialize_subscription
-            >> get_info_from_ipam
-            >> 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_lldp_iface_real
-            >> await_pp_results
-            >> confirm_pp_results
-            >> set_status(SubscriptionLifecycle.ACTIVE)
-            >> resync
-            >> done
+        init
+        >> create_subscription
+        >> store_process_subscription(Target.CREATE)
+        >> initialize_subscription
+        >> get_info_from_ipam
+        >> 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_lldp_iface_real
+        >> await_pp_results
+        >> confirm_pp_results
+        >> set_status(SubscriptionLifecycle.ACTIVE)
+        >> resync
+        >> done
     )