diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py index eefcd46cfe104bd05c6bf6601478216595571b58..8f24e333ffe00af3054459acf16ad8a5099a0f83 100644 --- a/gso/workflows/iptrunk/create_iptrunk.py +++ b/gso/workflows/iptrunk/create_iptrunk.py @@ -57,7 +57,11 @@ from gso.services.lso_client import LSOState, lso_interaction from gso.services.netbox_client import NetboxClient from gso.services.partners import get_partner_by_name from gso.services.sharepoint import SharePointClient -from gso.services.subscriptions import get_non_terminated_iptrunk_subscriptions +from gso.services.subscriptions import ( + generate_unique_ga_id, + generate_unique_gs_id, + get_non_terminated_iptrunk_subscriptions, +) from gso.settings import load_oss_params from gso.utils.helpers import ( available_interfaces_choices, @@ -86,7 +90,6 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: tt_number: TTNumber partner: ReadOnlyField("GEANT", default_type=str) # type: ignore[valid-type] - gs_id: str | None = None iptrunk_description: str | None = None iptrunk_type: IptrunkType iptrunk_speed: PhysicalPortCapacity @@ -144,7 +147,6 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: model_config = ConfigDict(title=f"Provide subscription details for side A of the trunk. ({router_a_fqdn})") side_a_ae_iface: available_lags_choices(router_a) or str # type: ignore[valid-type] - side_a_ga_id: str | None side_a_ae_members: ae_members_side_a_type user_input_side_a = yield CreateIptrunkSideAForm @@ -182,7 +184,6 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: model_config = ConfigDict(title=f"Provide subscription details for side B of the trunk. ({router_b_fqdn})") side_b_ae_iface: available_lags_choices(router_b) or str # type: ignore[valid-type] - side_b_ga_id: str | None side_b_ae_members: ae_members_side_b user_input_side_b = yield CreateIptrunkSideBForm @@ -196,7 +197,6 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: ) summary_form_data = input_forms_data | {"side_a_node": router_a_fqdn, "side_b_node": router_b_fqdn} summary_fields = [ - "gs_id", "iptrunk_type", "iptrunk_speed", "iptrunk_description", @@ -204,11 +204,9 @@ def initial_input_form_generator(product_name: str) -> FormGenerator: "side_a_node", "side_a_ae_iface", "side_a_ae_members", - "side_a_ga_id", "side_b_node", "side_b_ae_iface", "side_b_ae_members", - "side_b_ga_id", ] yield from create_summary_form(summary_form_data, product_name, summary_fields) @@ -322,24 +320,22 @@ def ping_all_hosts_v6(new_ipv6_network: str) -> State: @step("Initialize subscription") def initialize_subscription( subscription: IptrunkInactive, - gs_id: str | None, iptrunk_type: IptrunkType, iptrunk_description: str | None, iptrunk_speed: PhysicalPortCapacity, iptrunk_minimum_links: int, side_a_node_id: str, side_a_ae_iface: str, - side_a_ga_id: str | None, side_a_ae_members: list[dict], side_b_node_id: str, side_b_ae_iface: str, - side_b_ga_id: str | None, side_b_ae_members: list[dict], ) -> State: """Take all input from the user, and store it in the database.""" oss_params = load_oss_params() side_a = Router.from_subscription(side_a_node_id).router side_b = Router.from_subscription(side_b_node_id).router + gs_id = generate_unique_gs_id() subscription.iptrunk.gs_id = gs_id subscription.iptrunk.iptrunk_description = iptrunk_description subscription.iptrunk.iptrunk_type = iptrunk_type @@ -349,6 +345,7 @@ def initialize_subscription( subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node = side_a subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_iface = side_a_ae_iface + side_a_ga_id = generate_unique_ga_id() subscription.iptrunk.iptrunk_sides[0].ga_id = side_a_ga_id for member in side_a_ae_members: subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_members.append( @@ -357,6 +354,7 @@ def initialize_subscription( subscription.iptrunk.iptrunk_sides[1].iptrunk_side_node = side_b subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_iface = side_b_ae_iface + side_b_ga_id = generate_unique_ga_id() subscription.iptrunk.iptrunk_sides[1].ga_id = side_b_ga_id for member in side_b_ae_members: subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_members.append( diff --git a/test/workflows/iptrunk/test_create_iptrunk.py b/test/workflows/iptrunk/test_create_iptrunk.py index 17c37388c479ec5f7889dc1329248b81084d4908..a45f3bf1a97e5bff1a62c07102b16abc23403bb4 100644 --- a/test/workflows/iptrunk/test_create_iptrunk.py +++ b/test/workflows/iptrunk/test_create_iptrunk.py @@ -65,7 +65,6 @@ def input_form_wizard_data(request, router_subscription_factory, faker): create_ip_trunk_step = { "tt_number": faker.tt_number(), - "gs_id": faker.geant_sid(), "iptrunk_type": IptrunkType.DARK_FIBER, "iptrunk_description": faker.sentence(), "iptrunk_speed": PhysicalPortCapacity.HUNDRED_GIGABIT_PER_SECOND, @@ -75,7 +74,6 @@ def input_form_wizard_data(request, router_subscription_factory, faker): create_ip_trunk_side_a_router_name = {"side_a_node_id": router_side_a} create_ip_trunk_side_a_step = { "side_a_ae_iface": "lag-1", - "side_a_ga_id": None, "side_a_ae_members": [ { "interface_name": f"Interface{interface}", @@ -87,7 +85,6 @@ def input_form_wizard_data(request, router_subscription_factory, faker): create_ip_trunk_side_b_router_name = {"side_b_node_id": router_side_b} create_ip_trunk_side_b_step = { "side_b_ae_iface": "lag-4", - "side_b_ga_id": faker.geant_sid(), "side_b_ae_members": side_b_members, } summary_view_step = {} @@ -153,8 +150,9 @@ def test_successful_iptrunk_creation_with_standard_lso_result( subscription.iptrunk.iptrunk_sides[1].iptrunk_side_node.router_site.site_name, ]) assert subscription.status == "provisioning" + assert subscription.iptrunk.gs_id is not None assert subscription.description == ( - f"IP trunk {sorted_sides[0]} {sorted_sides[1]}, gs_id:{input_form_wizard_data[0]["gs_id"]}" + f"IP trunk {sorted_sides[0]} {sorted_sides[1]}, gs_id:{subscription.iptrunk.gs_id}" ) assert mock_execute_playbook.call_count == 6