Skip to content
Snippets Groups Projects
Commit ad57480a authored by Shayan Hajipour's avatar Shayan Hajipour
Browse files

debug: connection group extraction bug resolved

parent 281f093e
No related branches found
No related tags found
1 merge request!307Resolve "(CTTC) L3Slice-IETFSlice Service Handler is Required"
......@@ -77,6 +77,77 @@ METRICS_POOL = MetricsPool(
RAISE_IF_DIFFERS = True
def get_removed_items(
candidate_ietf_slice_dict: dict, running_ietf_slice_dict: dict
) -> dict:
removed_items = {
"sdp": {"sdp_idx": None, "value": {}},
"connection_group": {"connection_group_idx": None, "value": {}},
"match_criterion": {
"sdp_idx": None,
"match_criterion_idx": None,
"value": {},
},
}
running_slice_services = running_ietf_slice_dict["network-slice-services"][
"slice-service"
][0]
running_slice_sdps = [sdp["id"] for sdp in running_slice_services["sdps"]["sdp"]]
candidate_slice_services = candidate_ietf_slice_dict["network-slice-services"][
"slice-service"
][0]
candidiate_slice_sdps = [
sdp["id"] for sdp in candidate_slice_services["sdps"]["sdp"]
]
removed_sdps = set(running_slice_sdps) - set(candidiate_slice_sdps)
if len(removed_sdps) > 1:
raise Exception("Multiple SDPs removed")
removed_sdp_id = list(removed_sdps)[0]
removed_items["sdp"]["sdp_idx"] = running_slice_sdps.index(removed_sdp_id)
removed_items["sdp"]["value"] = next(
sdp
for sdp in running_slice_services["sdps"]["sdp"]
if sdp["id"] == removed_sdp_id
)
match_criteria = removed_items["sdp"]["value"]["service-match-criteria"][
"match-criterion"
]
if len(match_criteria) > 1:
raise Exception("Multiple match criteria found")
match_criterion = match_criteria[0]
connection_grp_id = match_criterion["target-connection-group-id"]
connection_groups = running_slice_services["connection-groups"]["connection-group"]
connection_group = next(
(idx, cg)
for idx, cg in enumerate(connection_groups)
if cg["id"] == connection_grp_id
)
removed_items["connection_group"]["connection_group_idx"] = connection_group[0]
removed_items["connection_group"]["value"] = connection_group[1]
for sdp in running_slice_services["sdps"]["sdp"]:
if sdp["id"] == removed_sdp_id:
continue
for mc in sdp["service-match-criteria"]["match-criterion"]:
if mc["target-connection-group-id"] == connection_grp_id:
removed_items["match_criterion"]["sdp_idx"] = running_slice_sdps.index(
sdp["id"]
)
removed_items["match_criterion"]["match_criterion_idx"] = sdp[
"service-match-criteria"
]["match-criterion"].index(mc)
removed_items["match_criterion"]["value"] = mc
break
if (
removed_items["match_criterion"]["sdp_idx"] is None
or removed_items["sdp"]["sdp_idx"] is None
or removed_items["connection_group"]["connection_group_idx"] is None
):
raise Exception("sdp, connection group or match criterion not found")
return removed_items
def extract_source_destination_device_endpoint_info(
device_ep_pairs: list, connection_group: Dict
) -> Tuple[DeviceEpInfo, DeviceEpInfo]:
......@@ -224,8 +295,11 @@ class L3NMSliceIETFSliceServiceHandler(_ServiceHandler):
slice_services = candidate_resource_value_dict[
"network-slice-services"
]["slice-service"]
slice_service = slice_services[0]
sdps = slice_service["sdps"]["sdp"]
candidate_slice_service = slice_services[0]
full_connection_groups = candidate_slice_service["connection-groups"][
"connection-group"
]
sdps = candidate_slice_service["sdps"]["sdp"]
operation_type = "create"
sdp_ids = [sdp["node-id"] for sdp in sdps]
for sdp in sdps:
......@@ -316,8 +390,11 @@ class L3NMSliceIETFSliceServiceHandler(_ServiceHandler):
slice_services = candidate_resource_value_dict[
"network-slice-services"
]["slice-service"]
slice_service = slice_services[0]
sdps = slice_service["sdps"]["sdp"]
candidate_slice_service = slice_services[0]
full_connection_groups = candidate_slice_service["connection-groups"][
"connection-group"
]
sdps = candidate_slice_service["sdps"]["sdp"]
operation_type = "update"
added_items = {
"sdp": {"sdp_idx": None, "value": {}},
......@@ -457,44 +534,19 @@ class L3NMSliceIETFSliceServiceHandler(_ServiceHandler):
slice_services = running_resource_value_dict["network-slice-services"][
"slice-service"
]
candidate_slice_services = candidate_resource_value_dict[
"network-slice-services"
]["slice-service"]
candidate_slice_service = candidate_slice_services[0]
slice_service = slice_services[0]
full_connection_groups = slice_service["connection-groups"][
"connection-group"
]
sdps = slice_service["sdps"]["sdp"]
operation_type = "update"
removed_items = {
"sdp": {"sdp_idx": None, "value": {}},
"connection_group": {"connection_group_idx": None, "value": {}},
"match_criterion": {
"sdp_idx": None,
"match_criterion_idx": None,
"value": {},
},
}
for added_key, added_value in running_candidate_diff[
"iterable_item_removed"
].items():
sdp_match = SDP_DIFF_RE.match(added_key)
connection_group_match = CONNECTION_GROUP_DIFF_RE.match(added_key)
match_criterion_match = MATCH_CRITERION_DIFF_RE.match(added_key)
if sdp_match:
removed_items["sdp"] = {
"sdp_idx": int(sdp_match.groups()[0]),
"value": added_value,
}
elif connection_group_match:
removed_items["connection_group"] = {
"connection_group_idx": int(
connection_group_match.groups()[0]
),
"value": added_value,
}
elif match_criterion_match:
removed_items["match_criterion"] = {
"sdp_idx": int(match_criterion_match.groups()[0]),
"match_criterion_idx": int(
match_criterion_match.groups()[1]
),
"value": added_value,
}
removed_items = get_removed_items(
candidate_resource_value_dict, running_resource_value_dict
)
new_sdp = sdps[removed_items["sdp"]["sdp_idx"]]
src_sdp_name = new_sdp["node-id"]
dst_sdp_idx = sdps[removed_items["match_criterion"]["sdp_idx"]]["id"]
......@@ -594,8 +646,11 @@ class L3NMSliceIETFSliceServiceHandler(_ServiceHandler):
break
else:
raise Exception("sdp between the domains not found")
connection_groups = slice_service["connection-groups"]["connection-group"]
for cg in connection_groups:
candidate_connection_groups = candidate_slice_service["connection-groups"][
"connection-group"
]
LOGGER.debug(f"connection_groups: {candidate_connection_groups}")
for cg in candidate_connection_groups:
for cc in cg["connectivity-construct"]:
for metric_bound in cc["service-slo-sle-policy"]["slo-policy"][
"metric-bound"
......@@ -633,7 +688,9 @@ class L3NMSliceIETFSliceServiceHandler(_ServiceHandler):
):
operation_type = "delete"
target_connection_group = next(
cg for cg in connection_groups if cg["id"] == target_connection_group_id
cg
for cg in full_connection_groups
if cg["id"] == target_connection_group_id
)
source_device_ep_info, destination_device_ep_info = (
extract_source_destination_device_endpoint_info(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment