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

Fix the bug of clearing all the AE members and creating new objects instead of updating it.

parent 4b4a6c98
No related branches found
No related tags found
1 merge request!275Fix the bug of clearing all the AE members and creating new objects instead of updating it.
Pipeline #89324 canceled
...@@ -216,6 +216,29 @@ def check_ip_trunk_lldp(subscription: Iptrunk, callback_route: str) -> State: ...@@ -216,6 +216,29 @@ def check_ip_trunk_lldp(subscription: Iptrunk, callback_route: str) -> State:
return {"subscription": subscription} return {"subscription": subscription}
def update_side_members(subscription: Iptrunk, side_index: int, new_members: list[dict]) -> None:
"""Update the AE members for a given side without removing unchanged members."""
# Prepare a dictionary for quick lookup of existing members by name
current_members = subscription.iptrunk.iptrunk_sides[side_index].iptrunk_side_ae_members
existing_members_dict = {member.interface_name: member for member in current_members}
# Iterate over new members and update or add them
for new_member in new_members:
interface_name = new_member["interface_name"]
if interface_name in existing_members_dict:
# Member exists, update details but keep the same subscription ID
existing_member = existing_members_dict[interface_name]
existing_member.interface_description = new_member["interface_description"]
else:
# New member, create a new subscription ID
current_members.append(IptrunkInterfaceBlock.new(subscription_id=uuid4(), **new_member))
# Remove members that are no longer in the new members list
subscription.iptrunk.iptrunk_sides[side_index].iptrunk_side_ae_members = [
member for member in current_members if member.interface_name in [m["interface_name"] for m in new_members]
]
@step("Update subscription") @step("Update subscription")
def modify_iptrunk_subscription( def modify_iptrunk_subscription(
subscription: Iptrunk, subscription: Iptrunk,
...@@ -242,12 +265,16 @@ def modify_iptrunk_subscription( ...@@ -242,12 +265,16 @@ def modify_iptrunk_subscription(
for side in subscription.iptrunk.iptrunk_sides for side in subscription.iptrunk.iptrunk_sides
] ]
removed_ae_members = [] removed_ae_members = []
# Compare previous and current members to determine which ones were removed
for side_index in range(2): for side_index in range(2):
previous_members = previous_ae_members[side_index] previous_members = previous_ae_members[side_index]
current_members = side_a_ae_members if side_index == 0 else side_b_ae_members current_members = side_a_ae_members if side_index == 0 else side_b_ae_members
removed_ae_members.append([ae_member for ae_member in previous_members if ae_member not in current_members]) removed_ae_members.append([
ae_member
for ae_member in previous_members
if ae_member["interface_name"] not in [m["interface_name"] for m in current_members]
])
# Update the subscription
subscription.iptrunk.geant_s_sid = geant_s_sid subscription.iptrunk.geant_s_sid = geant_s_sid
subscription.iptrunk.iptrunk_description = iptrunk_description subscription.iptrunk.iptrunk_description = iptrunk_description
subscription.iptrunk.iptrunk_type = iptrunk_type subscription.iptrunk.iptrunk_type = iptrunk_type
...@@ -255,20 +282,9 @@ def modify_iptrunk_subscription( ...@@ -255,20 +282,9 @@ def modify_iptrunk_subscription(
subscription.iptrunk.iptrunk_minimum_links = iptrunk_minimum_links 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 subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_geant_a_sid = side_a_ae_geant_a_sid
# Flush the old list of member interfaces update_side_members(subscription, 0, side_a_ae_members)
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_members.clear()
# And update the list to only include the new member interfaces
for member in side_a_ae_members:
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_ae_members.append(
IptrunkInterfaceBlock.new(subscription_id=uuid4(), **member),
)
subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_geant_a_sid = side_b_ae_geant_a_sid subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_geant_a_sid = side_b_ae_geant_a_sid
subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_members.clear() update_side_members(subscription, 1, side_b_ae_members)
for member in side_b_ae_members:
subscription.iptrunk.iptrunk_sides[1].iptrunk_side_ae_members.append(
IptrunkInterfaceBlock.new(subscription_id=uuid4(), **member),
)
side_names = sorted([ side_names = sorted([
subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node.router_site.site_name, subscription.iptrunk.iptrunk_sides[0].iptrunk_side_node.router_site.site_name,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment