From 3d7c03c9cf9333ad9158c2f64f60ca367997b08f Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Fri, 10 Nov 2023 10:07:49 +0100
Subject: [PATCH] update all workflows and associated tests with the router
 remodel accordingly

---
 gso/api/v1/imports.py                         |  4 --
 gso/api/v1/subscriptions.py                   |  2 +-
 gso/products/__init__.py                      |  1 +
 gso/services/subscriptions.py                 |  4 +-
 gso/workflows/iptrunk/create_iptrunk.py       |  4 +-
 gso/workflows/iptrunk/migrate_iptrunk.py      |  4 +-
 .../iptrunk/modify_trunk_interface.py         | 33 +++++-----
 gso/workflows/router/create_router.py         | 64 +------------------
 gso/workflows/router/terminate_router.py      | 24 +------
 gso/workflows/tasks/import_router.py          | 17 +----
 test/fixtures.py                              | 11 ----
 test/imports/test_imports.py                  |  1 -
 .../workflows/iptrunk/test_migrate_iptrunk.py |  2 +-
 test/workflows/router/test_create_router.py   | 29 +--------
 .../workflows/router/test_terminate_router.py |  5 +-
 15 files changed, 34 insertions(+), 171 deletions(-)

diff --git a/gso/api/v1/imports.py b/gso/api/v1/imports.py
index 1d14b689..639443b0 100644
--- a/gso/api/v1/imports.py
+++ b/gso/api/v1/imports.py
@@ -88,13 +88,9 @@ class RouterImportModel(BaseModel):
     ts_port: int
     router_vendor: RouterVendor
     router_role: RouterRole
-    is_ias_connected: bool
     router_lo_ipv4_address: ipaddress.IPv4Address
     router_lo_ipv6_address: ipaddress.IPv6Address
     router_lo_iso_address: str
-    router_si_ipv4_network: ipaddress.IPv4Network | None = None
-    router_ias_lt_ipv4_network: ipaddress.IPv4Network | None = None
-    router_ias_lt_ipv6_network: ipaddress.IPv6Network | None = None
 
 
 class IptrunkImportModel(BaseModel):
diff --git a/gso/api/v1/subscriptions.py b/gso/api/v1/subscriptions.py
index 4e6e3d2a..438e4088 100644
--- a/gso/api/v1/subscriptions.py
+++ b/gso/api/v1/subscriptions.py
@@ -24,7 +24,7 @@ router = APIRouter(
     response_model=list[SubscriptionDomainModelSchema],
 )
 def subscription_routers() -> list[dict[str, Any]]:
-    """Retrieve all active routers subscriptions."""
+    """Retrieve all active router subscriptions."""
     subscriptions = []
     for r in get_active_router_subscriptions():
         subscription = SubscriptionModel.from_subscription(r["subscription_id"])
diff --git a/gso/products/__init__.py b/gso/products/__init__.py
index 916bc92d..d1da7fb0 100644
--- a/gso/products/__init__.py
+++ b/gso/products/__init__.py
@@ -22,6 +22,7 @@ class ProductType(strEnum):
     JUNIPER_ROUTER = "Juniper router"
     IP_TRUNK = "IP trunk"
     IAS_GATEWAY = "IAS gateway"
+    ROUTER = "Router"
 
 
 SUBSCRIPTION_MODEL_REGISTRY.update(
diff --git a/gso/services/subscriptions.py b/gso/services/subscriptions.py
index a60ef997..f4bc0b34 100644
--- a/gso/services/subscriptions.py
+++ b/gso/services/subscriptions.py
@@ -82,9 +82,7 @@ def get_active_router_subscriptions(
     :return: A list of Subscription objects for routers.
     :rtype: list[Subscription]
     """
-    active_nokia_routers = get_active_subscriptions(product_type=ProductType.NOKIA_ROUTER, includes=includes)
-    active_juniper_routers = get_active_subscriptions(product_type=ProductType.JUNIPER_ROUTER, includes=includes)
-    return active_nokia_routers + active_juniper_routers
+    return get_active_subscriptions(product_type="Router", includes=includes)
 
 
 def get_product_id_by_name(product_name: ProductType) -> UUID:
diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py
index 2f3cd527..f490243f 100644
--- a/gso/workflows/iptrunk/create_iptrunk.py
+++ b/gso/workflows/iptrunk/create_iptrunk.py
@@ -338,7 +338,7 @@ def reserve_interfaces_in_netbox(subscription: IptrunkProvisioning) -> State:
     """Create the :term:`LAG` interfaces in NetBox and attach the lag interfaces to the physical interfaces."""
     nbclient = NetboxClient()
     for trunk_side in subscription.iptrunk.iptrunk_sides:
-        if trunk_side.iptrunk_side_node.router_vendor == RouterVendor.NOKIA:
+        if get_router_vendor(trunk_side.iptrunk_side_node.owner_subscription_id) == RouterVendor.NOKIA:
             # Create :term:`LAG` interfaces
             lag_interface: Interfaces = nbclient.create_interface(
                 iface_name=trunk_side.iptrunk_side_ae_iface,
@@ -370,7 +370,7 @@ def reserve_interfaces_in_netbox(subscription: IptrunkProvisioning) -> State:
 def allocate_interfaces_in_netbox(subscription: IptrunkProvisioning) -> State:
     """Allocate the :term:`LAG` interfaces in NetBox and attach the lag interfaces to the physical interfaces."""
     for trunk_side in subscription.iptrunk.iptrunk_sides:
-        if trunk_side.iptrunk_side_node.router_vendor == RouterVendor.NOKIA:
+        if get_router_vendor(trunk_side.iptrunk_side_node.owner_subscription_id) == RouterVendor.NOKIA:
             for interface in trunk_side.iptrunk_side_ae_members:
                 NetboxClient().allocate_interface(
                     device_name=trunk_side.iptrunk_side_node.router_fqdn,
diff --git a/gso/workflows/iptrunk/migrate_iptrunk.py b/gso/workflows/iptrunk/migrate_iptrunk.py
index 38374103..24b036ba 100644
--- a/gso/workflows/iptrunk/migrate_iptrunk.py
+++ b/gso/workflows/iptrunk/migrate_iptrunk.py
@@ -531,13 +531,13 @@ def update_netbox(
     """Update Netbox, reallocating the old and new interfaces."""
     new_side = subscription.iptrunk.iptrunk_sides[replace_index]
     nbclient = NetboxClient()
-    if new_side.iptrunk_side_node.router_vendor == RouterVendor.NOKIA:
+    if get_router_vendor(new_side.iptrunk_side_node.owner_subscription_id) == RouterVendor.NOKIA:
         for interface in new_side.iptrunk_side_ae_members:
             nbclient.allocate_interface(
                 device_name=new_side.iptrunk_side_node.router_fqdn,
                 iface_name=interface.interface_name,
             )
-    if old_side_data["iptrunk_side_node"]["router_vendor"] == RouterVendor.NOKIA:
+    if get_router_vendor(old_side_data["iptrunk_side_node"]["owner_subscription_id"]) == RouterVendor.NOKIA:
         # Set interfaces to free
         for iface in old_side_data["iptrunk_side_ae_members"]:
             nbclient.free_interface(
diff --git a/gso/workflows/iptrunk/modify_trunk_interface.py b/gso/workflows/iptrunk/modify_trunk_interface.py
index d5ab094a..008c37a8 100644
--- a/gso/workflows/iptrunk/modify_trunk_interface.py
+++ b/gso/workflows/iptrunk/modify_trunk_interface.py
@@ -243,30 +243,30 @@ def provision_ip_trunk_iface_real(
 def update_interfaces_in_netbox(subscription: Iptrunk, removed_ae_members: dict, previous_ae_members: dict) -> State:
     """Update Netbox such that it contains the new interfaces."""
     nbclient = NetboxClient()
-    for side in range(2):
-        if subscription.iptrunk.iptrunk_sides[side].iptrunk_side_node.router_vendor == RouterVendor.NOKIA:
-            lag_interface = subscription.iptrunk.iptrunk_sides[side].iptrunk_side_ae_iface
-            router_name = subscription.iptrunk.iptrunk_sides[side].iptrunk_side_node.router_fqdn
+    for index, side in enumerate(subscription.iptrunk.iptrunk_sides):
+        if get_router_vendor(side.iptrunk_side_node.owner_subscription_id) == RouterVendor.NOKIA:
+            lag_interface = side.iptrunk_side_ae_iface
+            router_name = side.iptrunk_side_node.router_fqdn
             # Free removed interfaces
-            for member in removed_ae_members[str(side)]:
+            for member in removed_ae_members[str(index)]:
                 nbclient.free_interface(router_name, member["interface_name"])
             # Attach physical interfaces to :term:`LAG`
             # Update interface description to subscription ID
             # Reserve interfaces
-            for interface in subscription.iptrunk.iptrunk_sides[side].iptrunk_side_ae_members:
+            for interface in side.iptrunk_side_ae_members:
                 if any(
                     ae_member.get("interface_name") == interface.interface_name
-                    for ae_member in previous_ae_members[str(side)]
+                    for ae_member in previous_ae_members[str(index)]
                 ):
                     continue
                 nbclient.attach_interface_to_lag(
-                    device_name=subscription.iptrunk.iptrunk_sides[side].iptrunk_side_node.router_fqdn,
+                    device_name=side.iptrunk_side_node.router_fqdn,
                     lag_name=lag_interface,
                     iface_name=interface.interface_name,
                     description=str(subscription.subscription_id),
                 )
                 nbclient.reserve_interface(
-                    device_name=subscription.iptrunk.iptrunk_sides[side].iptrunk_side_node.router_fqdn,
+                    device_name=side.iptrunk_side_node.router_fqdn,
                     iface_name=interface.interface_name,
                 )
     return {
@@ -280,23 +280,24 @@ def allocate_interfaces_in_netbox(subscription: Iptrunk, previous_ae_members: di
 
     Attach the :term:`LAG` interfaces to the physical interfaces detach old ones from the :term:`LAG`.
     """
-    for side in range(2):
+
+    for index, side in enumerate(subscription.iptrunk.iptrunk_sides):
         nbclient = NetboxClient()
-        if subscription.iptrunk.iptrunk_sides[side].iptrunk_side_node.router_vendor == RouterVendor.NOKIA:
-            for interface in subscription.iptrunk.iptrunk_sides[side].iptrunk_side_ae_members:
+        if get_router_vendor(side.iptrunk_side_node.owner_subscription_id) == RouterVendor.NOKIA:
+            for interface in side.iptrunk_side_ae_members:
                 if any(
                     ae_member.get("interface_name") == interface.interface_name
-                    for ae_member in previous_ae_members[str(side)]
+                    for ae_member in previous_ae_members[str(index)]
                 ):
                     continue
                 nbclient.allocate_interface(
-                    device_name=subscription.iptrunk.iptrunk_sides[side].iptrunk_side_node.router_fqdn,
+                    device_name=side.iptrunk_side_node.router_fqdn,
                     iface_name=interface.interface_name,
                 )
             # detach the old interfaces from lag
             nbclient.detach_interfaces_from_lag(
-                device_name=subscription.iptrunk.iptrunk_sides[side].iptrunk_side_node.router_fqdn,
-                lag_name=subscription.iptrunk.iptrunk_sides[side].iptrunk_side_ae_iface,
+                device_name=side.iptrunk_side_node.router_fqdn,
+                lag_name=side.iptrunk_side_ae_iface,
             )
 
     return {"subscription": subscription}
diff --git a/gso/workflows/router/create_router.py b/gso/workflows/router/create_router.py
index 9c74245e..c69a78ff 100644
--- a/gso/workflows/router/create_router.py
+++ b/gso/workflows/router/create_router.py
@@ -1,6 +1,5 @@
 """A creation workflow for adding a new router to the network."""
 
-from ipaddress import IPv4Network, IPv6Network
 from typing import Any
 
 # noinspection PyProtectedMember
@@ -8,7 +7,7 @@ from orchestrator.forms import FormPage
 from orchestrator.forms.validators import Choice
 from orchestrator.targets import Target
 from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUIDstr
-from orchestrator.workflow import StepList, conditional, done, init, step, workflow
+from orchestrator.workflow import StepList, done, init, step, workflow
 from orchestrator.workflows.steps import resync, set_status, store_process_subscription
 from orchestrator.workflows.utils import wrap_create_initial_input_form
 from pydantic import validator
@@ -49,7 +48,6 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
         hostname: str
         ts_port: PortNumber
         router_role: RouterRole
-        is_ias_connected: bool | None = False
 
         @validator("hostname", allow_reuse=True)
         def hostname_must_be_available(cls, hostname: str, **kwargs: dict[str, Any]) -> str:
@@ -87,13 +85,11 @@ def initialize_subscription(
     subscription: RouterInactive,
     hostname: str,
     ts_port: PortNumber,
-    vendor: RouterVendor,
     router_site: str,
     router_role: RouterRole,
 ) -> State:
     """Initialise the subscription object in the service database."""
     subscription.router.router_ts_port = ts_port
-    subscription.vendor = vendor
     subscription.router.router_site = Site.from_subscription(router_site).site
     fqdn = generate_fqdn(
         hostname,
@@ -111,7 +107,7 @@ def initialize_subscription(
 
 
 @step("Allocate loopback interfaces in IPAM")
-def ipam_allocate_loopback(subscription: RouterProvisioning, is_ias_connected: bool) -> State:  # noqa: FBT001
+def ipam_allocate_loopback(subscription: RouterProvisioning) -> State:  # noqa: FBT001
     """Allocate :term:`IPAM` resources for the loopback interface."""
     fqdn = subscription.router.router_fqdn
     loopback_v4, loopback_v6 = infoblox.allocate_host(f"lo0.{fqdn}", "LO", [fqdn], str(subscription.subscription_id))
@@ -119,28 +115,6 @@ def ipam_allocate_loopback(subscription: RouterProvisioning, is_ias_connected: b
     subscription.router.router_lo_ipv4_address = loopback_v4
     subscription.router.router_lo_ipv6_address = loopback_v6
     subscription.router.router_lo_iso_address = iso_from_ipv4(subscription.router.router_lo_ipv4_address)
-    subscription.router.router_is_ias_connected = is_ias_connected
-
-    return {"subscription": subscription}
-
-
-@step("Allocate IAS connection in IPAM")
-def ipam_allocate_ias_networks(subscription: RouterProvisioning) -> State:
-    """Allocate required :term:`IAS` :term:`IPAM` resources."""
-    fqdn = subscription.router.router_fqdn
-
-    subscription.router.router_si_ipv4_network = infoblox.allocate_v4_network(
-        "SI",
-        f"SI for {fqdn} - {subscription.subscription_id}",
-    )
-    subscription.router.router_ias_lt_ipv4_network = infoblox.allocate_v4_network(
-        "LT_IAS",
-        f"LT for {fqdn} - {subscription.subscription_id}",
-    )
-    subscription.router.router_ias_lt_ipv6_network = infoblox.allocate_v6_network(
-        "LT_IAS",
-        f"LT for {fqdn} - {subscription.subscription_id}",
-    )
 
     return {"subscription": subscription}
 
@@ -196,36 +170,6 @@ def verify_ipam_loopback(subscription: RouterProvisioning) -> State:
     return {"subscription": subscription}
 
 
-@step("Verify IPAM resources for IAS/LT networks")
-def verify_ipam_ias(subscription: RouterProvisioning) -> State:
-    """Validate the :term:`IPAM` resources related to this new router subscription."""
-    si_ipv4_network = infoblox.find_network_by_cidr(IPv4Network(subscription.router.router_si_ipv4_network))
-    ias_lt_ipv4_network = infoblox.find_network_by_cidr(IPv4Network(subscription.router.router_ias_lt_ipv4_network))
-    ias_lt_ipv6_network = infoblox.find_network_by_cidr(IPv6Network(subscription.router.router_ias_lt_ipv6_network))
-
-    new_state = {}
-
-    if not si_ipv4_network or str(subscription.subscription_id) not in si_ipv4_network.comment:
-        new_state = {
-            "ipam_si_warning": f"SI IPv4 network expected at {subscription.router.router_si_ipv4_network}, "
-            f"but it was not found or misconfigured, please investigate and adjust if necessary.",
-        }
-    if not ias_lt_ipv4_network or str(subscription.subscription_id) not in ias_lt_ipv4_network.comment:
-        new_state = new_state | {
-            "ipam_ias_lt_ipv4_warning": "IAS/LT IPv4 network expected at "
-            f"{subscription.router.router_ias_lt_ipv4_network}, but it was not found or misconfigured, please "
-            "investigate and adjust if necessary.",
-        }
-    if not ias_lt_ipv6_network or str(subscription.subscription_id) not in ias_lt_ipv6_network.comment:
-        new_state = new_state | {
-            "ipam_ias_lt_ipv6_warning": f"IAS/LT IPv6 network expected at "
-            f"{subscription.router.router_ias_lt_ipv6_network}, but it was not found or misconfigured, please "
-            "investigate and adjust if necessary.",
-        }
-
-    return new_state
-
-
 @workflow(
     "Create router",
     initial_input_form=wrap_create_initial_input_form(initial_input_form_generator),
@@ -240,19 +184,15 @@ def create_router() -> StepList:
     * Validate :term:`IPAM` resources
     * Create a new device in Netbox
     """
-    should_allocate_ias = conditional(lambda state: state["is_ias_connected"])
-
     return (
         init
         >> create_subscription
         >> store_process_subscription(Target.CREATE)
         >> initialize_subscription
         >> ipam_allocate_loopback
-        >> should_allocate_ias(ipam_allocate_ias_networks)
         >> pp_interaction(provision_router_dry)
         >> pp_interaction(provision_router_real)
         >> verify_ipam_loopback
-        >> should_allocate_ias(verify_ipam_ias)
         >> create_netbox_device
         >> set_status(SubscriptionLifecycle.ACTIVE)
         >> resync
diff --git a/gso/workflows/router/terminate_router.py b/gso/workflows/router/terminate_router.py
index 18734430..b19e92c6 100644
--- a/gso/workflows/router/terminate_router.py
+++ b/gso/workflows/router/terminate_router.py
@@ -48,23 +48,6 @@ def deprovision_loopback_ips(subscription: Router) -> dict:
     return {"subscription": subscription}
 
 
-@step("Deprovision SI interface network from IPAM")
-def deprovision_si_ips(subscription: Router) -> dict:
-    """Clear up SI interface resources from :term:`IPAM`."""
-    infoblox.delete_network(ipaddress.IPv4Network(subscription.router.router_si_ipv4_network))
-
-    return {"subscription": subscription}
-
-
-@step("Deprovision IAS LT interfaces from IPAM")
-def deprovision_lt_ips(subscription: Router) -> dict:
-    """Clear up :term:`IAS` LT interfaces from :term:`IPAM`."""
-    infoblox.delete_network(ipaddress.IPv4Network(subscription.router.router_ias_lt_ipv4_network))
-    infoblox.delete_network(ipaddress.IPv6Network(subscription.router.router_ias_lt_ipv6_network))
-
-    return {"subscription": subscription}
-
-
 @step("Remove configuration from router")
 def remove_config_from_router() -> None:
     """Remove configuration from the router, first as a dry run.
@@ -97,17 +80,12 @@ def terminate_router() -> StepList:
     """
     run_ipam_steps = conditional(lambda state: state["clean_up_ipam"])
     run_config_steps = conditional(lambda state: state["remove_configuration"])
-    run_ias_removal = conditional(lambda state: state["subscription"]["router"]["router_is_ias_connected"])
-
-    ipam_steps = (
-        init >> deprovision_loopback_ips >> run_ias_removal(deprovision_si_ips) >> run_ias_removal(deprovision_lt_ips)
-    )
 
     return (
         init
         >> store_process_subscription(Target.TERMINATE)
         >> unsync
-        >> run_ipam_steps(ipam_steps)
+        >> run_ipam_steps(deprovision_loopback_ips)
         >> run_config_steps(remove_config_from_router)
         >> remove_device_from_netbox
         >> set_status(SubscriptionLifecycle.TERMINATED)
diff --git a/gso/workflows/tasks/import_router.py b/gso/workflows/tasks/import_router.py
index 2b5829bd..461aa2e7 100644
--- a/gso/workflows/tasks/import_router.py
+++ b/gso/workflows/tasks/import_router.py
@@ -38,10 +38,11 @@ def _get_site_by_name(site_name: str) -> Site:
 def create_subscription(customer: str, router_vendor: RouterVendor) -> State:
     """Create a new subscription object."""
     customer_id = get_customer_by_name(customer)["id"]
+    product_id: UUID
     if router_vendor == RouterVendor.NOKIA:
-        product_id: UUID = subscriptions.get_product_id_by_name(ProductType.NOKIA_ROUTER)
+        product_id = subscriptions.get_product_id_by_name(ProductType.NOKIA_ROUTER)
     elif router_vendor == RouterVendor.JUNIPER:
-        product_id: UUID = subscriptions.get_product_id_by_name(ProductType.JUNIPER_ROUTER)
+        product_id = subscriptions.get_product_id_by_name(ProductType.JUNIPER_ROUTER)
     else:
         raise ValueError(f"Unknown router vendor: {router_vendor}")
 
@@ -66,13 +67,9 @@ def initial_input_form_generator() -> FormGenerator:
         ts_port: int
         router_vendor: RouterVendor
         router_role: RouterRole
-        is_ias_connected: bool
         router_lo_ipv4_address: ipaddress.IPv4Address
         router_lo_ipv6_address: ipaddress.IPv6Address
         router_lo_iso_address: str
-        router_si_ipv4_network: ipaddress.IPv4Network | None = None
-        router_ias_lt_ipv4_network: ipaddress.IPv4Network | None = None
-        router_ias_lt_ipv6_network: ipaddress.IPv6Network | None = None
 
     user_input = yield ImportRouter
 
@@ -86,13 +83,9 @@ def initialize_subscription(
     ts_port: PortNumber,
     router_site: str,
     router_role: router_pb.RouterRole,
-    is_ias_connected: bool | None = None,
     router_lo_ipv4_address: ipaddress.IPv4Address | None = None,
     router_lo_ipv6_address: ipaddress.IPv6Address | None = None,
     router_lo_iso_address: str | None = None,
-    router_si_ipv4_network: ipaddress.IPv4Network | None = None,
-    router_ias_lt_ipv4_network: ipaddress.IPv4Network | None = None,
-    router_ias_lt_ipv6_network: ipaddress.IPv6Network | None = None,
 ) -> State:
     """Initialise the router subscription using input data."""
     subscription.router.router_ts_port = ts_port
@@ -103,13 +96,9 @@ def initialize_subscription(
     subscription.router.router_role = router_role
     subscription.router.router_access_via_ts = True
     subscription.description = f"Router {fqdn}"
-    subscription.router.router_is_ias_connected = is_ias_connected
     subscription.router.router_lo_ipv4_address = router_lo_ipv4_address
     subscription.router.router_lo_ipv6_address = router_lo_ipv6_address
     subscription.router.router_lo_iso_address = router_lo_iso_address
-    subscription.router.router_si_ipv4_network = router_si_ipv4_network
-    subscription.router.router_ias_lt_ipv4_network = router_ias_lt_ipv4_network
-    subscription.router.router_ias_lt_ipv6_network = router_ias_lt_ipv6_network
 
     subscription = router.RouterProvisioning.from_other_lifecycle(subscription, SubscriptionLifecycle.PROVISIONING)
 
diff --git a/test/fixtures.py b/test/fixtures.py
index 8a8db797..786d1842 100644
--- a/test/fixtures.py
+++ b/test/fixtures.py
@@ -84,12 +84,8 @@ def nokia_router_subscription_factory(site_subscription_factory, faker):
         router_lo_ipv4_address=None,
         router_lo_ipv6_address=None,
         router_lo_iso_address=None,
-        router_si_ipv4_network=None,
-        router_ias_lt_ipv4_network=None,
-        router_ias_lt_ipv6_network=None,
         router_role=RouterRole.PE,
         router_site=None,
-        router_is_ias_connected=True,  # noqa: FBT002
         status: SubscriptionLifecycle | None = None,
     ) -> UUIDstr:
         description = description or faker.text(max_nb_chars=30)
@@ -99,9 +95,6 @@ def nokia_router_subscription_factory(site_subscription_factory, faker):
         router_lo_ipv4_address = router_lo_ipv4_address or ipaddress.IPv4Address(faker.ipv4())
         router_lo_ipv6_address = router_lo_ipv6_address or ipaddress.IPv6Address(faker.ipv6())
         router_lo_iso_address = router_lo_iso_address or faker.word()
-        router_si_ipv4_network = router_si_ipv4_network or faker.ipv4_network()
-        router_ias_lt_ipv4_network = router_ias_lt_ipv4_network or faker.ipv4_network()
-        router_ias_lt_ipv6_network = router_ias_lt_ipv6_network or faker.ipv6_network()
         router_site = router_site or site_subscription_factory()
 
         product_id = subscriptions.get_product_id_by_name(ProductType.NOKIA_ROUTER)
@@ -112,12 +105,8 @@ def nokia_router_subscription_factory(site_subscription_factory, faker):
         router_subscription.router.router_lo_ipv4_address = router_lo_ipv4_address
         router_subscription.router.router_lo_ipv6_address = router_lo_ipv6_address
         router_subscription.router.router_lo_iso_address = router_lo_iso_address
-        router_subscription.router.router_si_ipv4_network = router_si_ipv4_network
-        router_subscription.router.router_ias_lt_ipv4_network = router_ias_lt_ipv4_network
-        router_subscription.router.router_ias_lt_ipv6_network = router_ias_lt_ipv6_network
         router_subscription.router.router_role = router_role
         router_subscription.router.router_site = Site.from_subscription(router_site).site
-        router_subscription.router.router_is_ias_connected = router_is_ias_connected
 
         router_subscription = SubscriptionModel.from_other_lifecycle(router_subscription, SubscriptionLifecycle.ACTIVE)
         router_subscription.description = description
diff --git a/test/imports/test_imports.py b/test/imports/test_imports.py
index 274ee634..1d7801e2 100644
--- a/test/imports/test_imports.py
+++ b/test/imports/test_imports.py
@@ -118,7 +118,6 @@ def router_data(faker, site_data):
         "router_site": site_data["site_name"],
         "ts_port": 1234,
         "customer": "GÉANT",
-        "is_ias_connected": True,
         "router_lo_ipv4_address": mock_ipv4,
         "router_lo_ipv6_address": faker.ipv6(),
         "router_lo_iso_address": iso_from_ipv4(mock_ipv4),
diff --git a/test/workflows/iptrunk/test_migrate_iptrunk.py b/test/workflows/iptrunk/test_migrate_iptrunk.py
index 49769de4..ef096214 100644
--- a/test/workflows/iptrunk/test_migrate_iptrunk.py
+++ b/test/workflows/iptrunk/test_migrate_iptrunk.py
@@ -40,7 +40,7 @@ def test_migrate_iptrunk_success(
     mock_provision_ip_trunk,
     mock_migrate_ip_trunk,
     iptrunk_subscription_factory,
-        nokia_router_subscription_factory,
+    nokia_router_subscription_factory,
     faker,
     data_config_filename: PathLike,
 ):
diff --git a/test/workflows/router/test_create_router.py b/test/workflows/router/test_create_router.py
index b39782a7..3926fa33 100644
--- a/test/workflows/router/test_create_router.py
+++ b/test/workflows/router/test_create_router.py
@@ -5,7 +5,7 @@ from infoblox_client import objects
 
 from gso.products import ProductType, Site
 from gso.products.product_blocks.router import RouterRole
-from gso.products.product_types.router import Router, RouterVendor
+from gso.products.product_types.router import Router
 from gso.services.crm import customer_selector, get_customer_by_name
 from gso.services.subscriptions import get_product_id_by_name
 from test.workflows import (
@@ -27,9 +27,7 @@ def router_creation_input_form_data(site_subscription_factory, faker):
         "router_site": router_site,
         "hostname": faker.pystr(),
         "ts_port": faker.pyint(),
-        "vendor": RouterVendor.NOKIA,
         "router_role": faker.random_choices(elements=(RouterRole.P, RouterRole.PE, RouterRole.AMT), length=1)[0],
-        "is_ias_connected": True,
     }
 
 
@@ -37,17 +35,11 @@ def router_creation_input_form_data(site_subscription_factory, faker):
 @patch("gso.workflows.router.create_router.provisioning_proxy.provision_router")
 @patch("gso.workflows.router.create_router.NetboxClient.create_device")
 @patch("gso.workflows.router.create_router.infoblox.hostname_available")
-@patch("gso.workflows.router.create_router.infoblox.find_network_by_cidr")
 @patch("gso.workflows.router.create_router.infoblox.find_host_by_fqdn")
-@patch("gso.workflows.router.create_router.infoblox.allocate_v6_network")
-@patch("gso.workflows.router.create_router.infoblox.allocate_v4_network")
 @patch("gso.workflows.router.create_router.infoblox.allocate_host")
 def test_create_nokia_router_success(
     mock_allocate_host,
-    mock_allocate_v4_network,
-    mock_allocate_v6_network,
     mock_find_host_by_fqdn,
-    mock_find_network_by_cidr,
     mock_hostname_available,
     mock_netbox_create_device,
     mock_provision_router,
@@ -59,7 +51,6 @@ def test_create_nokia_router_success(
     product_id = get_product_id_by_name(ProductType.NOKIA_ROUTER)
     mock_site = Site.from_subscription(router_creation_input_form_data["router_site"]).site
     mock_v4 = faker.ipv4()
-    mock_v4_net = faker.ipv4_network()
     mock_v6 = faker.ipv6()
     mock_fqdn = (
         f"{router_creation_input_form_data['hostname']}.{mock_site.site_name.lower()}."
@@ -67,8 +58,6 @@ def test_create_nokia_router_success(
     )
     mock_hostname_available.return_value = True
     mock_allocate_host.return_value = str(mock_v4), str(mock_v6)
-    mock_allocate_v4_network.return_value = mock_v4_net
-    mock_allocate_v6_network.return_value = faker.ipv6_network()
 
     #  Run workflow
     initial_router_data = [{"product": product_id}, router_creation_input_form_data]
@@ -91,13 +80,6 @@ def test_create_nokia_router_success(
         ],
         name=mock_fqdn,
     )
-    mock_find_network_by_cidr.return_value = objects.NetworkV4(
-        connector=None,
-        comment=subscription_id,
-        network=str(mock_v4_net),
-        network_view="default",
-        cidr=str(mock_v4_net),
-    )
 
     for _ in range(2):
         result, step_log = assert_pp_interaction_success(result, process_stat, step_log)
@@ -113,14 +95,7 @@ def test_create_nokia_router_success(
     assert mock_provision_router.call_count == 2
     assert mock_netbox_create_device.call_count == 1
     assert mock_find_host_by_fqdn.call_count == 1
-    assert mock_find_network_by_cidr.call_count == 3
-    for error in [
-        "ipam_warning",
-        "ipam_si_warning",
-        "ipam_ias_lt_ipv4_warning",
-        "ipam_ias_lt_ipv6_warning",
-    ]:
-        assert error not in state
+    assert "ipam_warning" not in state
 
 
 @pytest.mark.workflow()
diff --git a/test/workflows/router/test_terminate_router.py b/test/workflows/router/test_terminate_router.py
index 0ff22d96..8603a207 100644
--- a/test/workflows/router/test_terminate_router.py
+++ b/test/workflows/router/test_terminate_router.py
@@ -18,13 +18,11 @@ def router_termination_input_form_data(site_subscription_factory, faker):
 @pytest.mark.workflow()
 @patch("gso.workflows.router.terminate_router.NetboxClient.delete_device")
 @patch("gso.workflows.router.terminate_router.infoblox.delete_host_by_ip")
-@patch("gso.workflows.router.terminate_router.infoblox.delete_network")
 def test_terminate_router_success(
-    mock_delete_network,
     mock_delete_host_by_ip,
     mock_delete_device,
     router_termination_input_form_data,
-        nokia_router_subscription_factory,
+    nokia_router_subscription_factory,
     faker,
     data_config_filename,
 ):
@@ -44,6 +42,5 @@ def test_terminate_router_success(
     subscription = Router.from_subscription(subscription_id)
 
     assert subscription.status == "terminated"
-    assert mock_delete_network.call_count == 3
     assert mock_delete_device.call_count == 1
     assert mock_delete_host_by_ip.call_count == 1
-- 
GitLab