Skip to content
Snippets Groups Projects
Commit 9ad1fc4a authored by Neda Moeini's avatar Neda Moeini
Browse files

Did a couple of adjustment for IP Trunk creation and modification. Added...

Did a couple of adjustment for IP Trunk creation and modification. Added default values for nullable fields.
parent 8760c67a
No related branches found
No related tags found
No related merge requests found
Pipeline #86702 passed
......@@ -90,7 +90,7 @@ class IptrunkImportModel(BaseModel):
partner: str
geant_s_sid: str | None
iptrunk_type: IptrunkType
iptrunk_description: str
iptrunk_description: str | None
iptrunk_speed: PhysicalPortCapacity
iptrunk_minimum_links: int
iptrunk_isis_metric: int
......
......@@ -141,7 +141,7 @@ class IptrunkBlock(IptrunkBlockProvisioning, lifecycle=[SubscriptionLifecycle.AC
#: GÉANT service ID associated with this trunk.
geant_s_sid: str | None = None
#: A human-readable description of this trunk.
iptrunk_description: str
iptrunk_description: str | None = None
#: The type of trunk, can be either dark fibre or leased capacity.
iptrunk_type: IptrunkType
#: The speed of the trunk, measured per interface associated with it.
......
......@@ -75,7 +75,7 @@ class PopVlanBlockProvisioning(PopVlanBlockInactive, lifecycle=[SubscriptionLife
"""A Pop VLAN that's currently being provisioned, see :class:`PopVlanBlock`."""
vlan_id: int
pop_vlan_description: str | None
pop_vlan_description: str | None = None
lan_switch_interconnect: LanSwitchInterconnectBlockProvisioning
ports: PortList[PopVlanPortBlockProvisioning]
layer_preference: LayerPreference
......
......@@ -27,8 +27,8 @@ class SwitchBlockInactive(
switch_hostname: str | None = None
switch_ts_port: PortNumber | None = None
switch_site: SiteBlockInactive | None
switch_vendor: Vendor | None
switch_site: SiteBlockInactive | None = None
switch_vendor: Vendor | None = None
switch_model: SwitchModel | None = None
......
......@@ -121,7 +121,7 @@ class SNMPParams(BaseSettings):
v2c: MonitoringSNMPV2Params
#: .. versionadded :: 2.0
#: Support for :term:`SNMP` v3 will get added in a later version of :term:`GSO`. Parameters are optional for now.
v3: MonitoringSNMPV3Params | None
v3: MonitoringSNMPV3Params | None = None
class MonitoringParams(BaseSettings):
......@@ -136,6 +136,9 @@ class ProvisioningProxyParams(BaseSettings):
scheme: str
api_base: str
#: .. deprecated:: 0.1
#: Not used anymore, may be left out from config file.
auth: str | None = None
api_version: int
......
......@@ -24,7 +24,7 @@ class LAGMember(BaseModel):
"""A :term:`LAG` member interface that consists of a name and description."""
interface_name: str
interface_description: str | None
interface_description: str | None = None
def __hash__(self) -> int:
"""Calculate the hash based on the interface name and description, so that uniqueness can be determined."""
......
......@@ -44,8 +44,8 @@ def initial_input_form_generator() -> FormGenerator:
model_config = ConfigDict(title="Import Iptrunk")
partner: str
geant_s_sid: str | None
iptrunk_description: str
geant_s_sid: str | None = None
iptrunk_description: str | None = None
iptrunk_type: IptrunkType
iptrunk_speed: PhysicalPortCapacity
iptrunk_minimum_links: int
......@@ -53,12 +53,12 @@ def initial_input_form_generator() -> FormGenerator:
side_a_node_id: router_enum # type: ignore[valid-type]
side_a_ae_iface: str
side_a_ae_geant_a_sid: str | None
side_a_ae_geant_a_sid: str | None = None
side_a_ae_members: LAGMemberList
side_b_node_id: router_enum # type: ignore[valid-type]
side_b_ae_iface: str
side_b_ae_geant_a_sid: str | None
side_b_ae_geant_a_sid: str | None = None
side_b_ae_members: LAGMemberList
iptrunk_ipv4_network: ipaddress.IPv4Network
......@@ -123,8 +123,11 @@ def initialize_subscription(
subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_members.append(
IptrunkInterfaceBlockInactive.new(subscription_id=uuid4(), **member),
)
subscription.description = f"IP trunk, geant_s_sid:{geant_s_sid}"
side_names = sorted([
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node.router_site.site_name,
subscription.iptrunk.iptrunk_sides[1].iptrunk_side_node.router_site.site_name,
])
subscription.description = f"IP trunk {side_names[0]} {side_names[1]}, geant_s_sid:{geant_s_sid}"
return {"subscription": subscription}
......
......@@ -58,8 +58,8 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
tt_number: str
partner: ReadOnlyField("GEANT", default_type=str) # type: ignore[valid-type]
geant_s_sid: str | None
iptrunk_description: str
geant_s_sid: str | None = None
iptrunk_description: str | None = None
iptrunk_type: IptrunkType
iptrunk_speed: PhysicalPortCapacity
iptrunk_number_of_members: int
......@@ -74,9 +74,10 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
info_label: Label = (
f"This is the calculated minimum-links for this LAG: " f"{initial_user_input.iptrunk_number_of_members - 1}"
)
iptrunk_minimum_links: int = initial_user_input.iptrunk_number_of_members - 1
info_label2: Label = "Please confirm or modify."
yield VerifyMinimumLinksForm
verify_minimum_links = yield VerifyMinimumLinksForm
router_enum_a = Choice("Select a router", zip(routers.keys(), routers.items(), strict=True)) # type: ignore[arg-type]
class SelectRouterSideA(FormPage):
......@@ -188,6 +189,7 @@ def initial_input_form_generator(product_name: str) -> FormGenerator:
return (
initial_user_input.dict()
| verify_minimum_links.dict()
| user_input_router_side_a.dict()
| user_input_side_a.dict()
| user_input_router_side_b.dict()
......@@ -226,9 +228,9 @@ def initialize_subscription(
subscription: IptrunkInactive,
geant_s_sid: str | None,
iptrunk_type: IptrunkType,
iptrunk_description: str,
iptrunk_description: str | None,
iptrunk_speed: PhysicalPortCapacity,
iptrunk_number_of_members: int,
iptrunk_minimum_links: int,
side_a_node_id: str,
side_a_ae_iface: str,
side_a_ae_geant_a_sid: str | None,
......@@ -247,7 +249,7 @@ def initialize_subscription(
subscription.iptrunk.iptrunk_type = iptrunk_type
subscription.iptrunk.iptrunk_speed = iptrunk_speed
subscription.iptrunk.iptrunk_isis_metric = oss_params.GENERAL.isis_high_metric
subscription.iptrunk.iptrunk_minimum_links = iptrunk_number_of_members - 1
subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node = side_a
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_iface = side_a_ae_iface
......
......@@ -84,7 +84,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
class ModifyIptrunkForm(FormPage):
tt_number: str
geant_s_sid: str | None = subscription.iptrunk.geant_s_sid
iptrunk_description: str = subscription.iptrunk.iptrunk_description
iptrunk_description: str | None = subscription.iptrunk.iptrunk_description
iptrunk_type: IptrunkType = subscription.iptrunk.iptrunk_type
warning_label: Label = (
"Changing the PhyPortCapacity will result in the deletion of all AE members. "
......@@ -110,9 +110,10 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
info_label: Label = (
f"This is the calculated minimum-links for this LAG: " f"{initial_user_input.iptrunk_number_of_members - 1}"
)
iptrunk_minimum_links: int = initial_user_input.iptrunk_number_of_members - 1
info_label2: Label = "Please confirm or modify."
yield VerifyMinimumLinksForm
verify_minimum_links = yield VerifyMinimumLinksForm
ae_members_side_a = initialize_ae_members(subscription, initial_user_input.dict(), 0)
class ModifyIptrunkSideAForm(FormPage):
......@@ -166,7 +167,7 @@ def initial_input_form_generator(subscription_id: UUIDstr) -> FormGenerator:
user_input_side_b = yield ModifyIptrunkSideBForm
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() | verify_minimum_links.dict()
@step("Update subscription")
......@@ -174,9 +175,9 @@ def modify_iptrunk_subscription(
subscription: Iptrunk,
geant_s_sid: str | None,
iptrunk_type: IptrunkType,
iptrunk_description: str,
iptrunk_description: str | None,
iptrunk_speed: PhysicalPortCapacity,
iptrunk_number_of_members: int,
iptrunk_minimum_links: int,
side_a_ae_geant_a_sid: str | None,
side_a_ae_members: list[dict],
side_b_ae_geant_a_sid: str | None,
......@@ -205,7 +206,7 @@ def modify_iptrunk_subscription(
subscription.iptrunk.iptrunk_description = iptrunk_description
subscription.iptrunk.iptrunk_type = iptrunk_type
subscription.iptrunk.iptrunk_speed = iptrunk_speed
subscription.iptrunk.iptrunk_minimum_links = iptrunk_number_of_members - 1
subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_geant_a_sid = side_a_ae_geant_a_sid
# Flush the old list of member interfaces
......@@ -223,7 +224,11 @@ def modify_iptrunk_subscription(
IptrunkInterfaceBlock.new(subscription_id=uuid4(), **member),
)
subscription.description = f"IP trunk, geant_s_sid:{geant_s_sid}"
side_names = sorted([
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node.router_site.site_name,
subscription.iptrunk.iptrunk_sides[1].iptrunk_side_node.router_site.site_name,
])
subscription.description = f"IP trunk {side_names[0]} {side_names[1]}, geant_s_sid:{geant_s_sid}"
return {
"subscription": subscription,
......
......@@ -67,7 +67,7 @@ def input_form_wizard_data(request, juniper_router_subscription_factory, nokia_r
"iptrunk_speed": PhysicalPortCapacity.HUNDRED_GIGABIT_PER_SECOND,
"iptrunk_number_of_members": 2,
}
create_ip_trunk_confirm_step = {}
create_ip_trunk_confirm_step = {"iptrunk_minimum_links": 1}
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",
......
......@@ -158,7 +158,11 @@ def test_iptrunk_modify_trunk_interface_success(
assert mocked_detach_interfaces_from_lag.call_count == num_lag_ifaces # 1 time per nokia side
# Assert all subscription properties have been updated correctly
assert subscription.description == f"IP trunk, geant_s_sid:{new_sid}"
side_names = sorted([
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node.router_site.site_name,
subscription.iptrunk.iptrunk_sides[1].iptrunk_side_node.router_site.site_name,
])
assert subscription.description == f"IP trunk {side_names[0]} {side_names[1]}, geant_s_sid:{new_sid}"
assert subscription.iptrunk.geant_s_sid == input_form_iptrunk_data[1]["geant_s_sid"]
assert subscription.iptrunk.iptrunk_description == input_form_iptrunk_data[1]["iptrunk_description"]
assert subscription.iptrunk.iptrunk_type == input_form_iptrunk_data[1]["iptrunk_type"]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment