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

feat: update IETF Slice connection group operations added to TFS NBI

parent f2f4cbc3
No related branches found
No related tags found
4 merge requests!359Draft: Release TeraFlowSDN 5.0,!346Draft: support for restconf protocol,!345Draft: support ipinfusion devices via netconf,!302Resolve "Elaborate IETF Slice NBI to support adding/deleting new sdp, connection group, and match criteria"
......@@ -36,6 +36,27 @@ class NSS_Service_Connection_Group(Resource):
# TODO Return list of current network-slice-services
return response
# @HTTP_AUTH.login_required
def update(self, slice_id: str, connection_group_id: str):
if not request.is_json:
raise UnsupportedMediaType("JSON payload is required")
request_data: Dict = request.json
context_client = ContextClient()
slice_request = IETFSliceHandler.update_connection_group(
slice_id, request_data, context_client
)
slice_client = SliceClient()
slice_client.UpdateSlice(slice_request)
slice_request = IETFSliceHandler.copy_candidate_ietf_slice_data_to_running(
slice_id, context_client
)
_ = context_client.SetSlice(slice_request)
response = jsonify({})
response.status_code = HTTP_CREATED
return response
# @HTTP_AUTH.login_required
def delete(self, slice_id: str, connection_group_id: str):
context_client = ContextClient()
......
......@@ -293,6 +293,42 @@ class IETFSliceHandler:
validate_ietf_slice_data(ietf_data)
return slice
@staticmethod
def update_connection_group(
self,
slice_name: str,
updated_connection_group: dict,
context_client: ContextClient,
):
slice_request = get_slice_by_defualt_name(
context_client, slice_name, rw_copy=False
)
slice_config = slice_request.slice_config
cr = get_custom_config_rule(slice_config, CANDIDATE_RESOURCE_KEY)
candidate_ietf_data = json.loads(cr.custom.resource_value)
slice_services = candidate_ietf_data["network-slice-services"]["slice-service"]
slice_service = slice_services[0]
slice_connection_groups = slice_service["connection-groups"]["connection-group"]
connection_group_id = updated_connection_group["connection-group"][0]["id"]
cg_idx = list(
(
slice_cg["id"] == connection_group_id
for slice_cg in slice_connection_groups
)
).index(True)
slice_connection_groups[cg_idx] = updated_connection_group["connection-group"][
0
]
fields = {
name: (value, RAISE_IF_DIFFERS)
for name, value in candidate_ietf_data.items()
}
update_config_rule_custom(
slice_request.slice_config.config_rules, CANDIDATE_RESOURCE_KEY, fields
)
slice_request.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_PLANNED
return slice_request
@staticmethod
def delete_connection_group(
slice_uuid: str, connection_group_id: str, context_client: ContextClient
......@@ -321,47 +357,7 @@ class IETFSliceHandler:
update_config_rule_custom(
slice_request.slice_config.config_rules, CANDIDATE_RESOURCE_KEY, fields
)
# src_sdp_id = removed_connection_group["connectivity-construct"][0][
# "p2p-sender-sdp"
# ]
# dst_sdp_id = removed_connection_group["connectivity-construct"][0][
# "p2p-receiver-sdp"
# ]
# cr = get_custom_config_rule(slice_config, RUNNING_RESOURCE_KEY)
# running_ietf_data = json.loads(cr.custom.resource_value)
# slice_services = running_ietf_data["network-slice-services"]["slice-service"]
# slice_service = slice_services[0]
# sdps = slice_service["sdps"]["sdp"]
slice_request.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_PLANNED
# list_endpoints = []
# for sdp in sdps:
# if sdp["id"] == src_sdp_id:
# attachment_circuits = sdp["attachment-circuits"]["attachment-circuit"]
# if len(attachment_circuits) != 1:
# raise Exception("All SDPs should have 1 attachment-circuit")
# endpoint = EndPointId()
# endpoint.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
# endpoint.device_id.device_uuid.uuid = sdp["node-id"]
# endpoint.endpoint_uuid.uuid = attachment_circuits[0]["ac-tp-id"]
# list_endpoints.append(endpoint)
# break
# else:
# raise Exception("Second SDP not found")
# for sdp in sdps:
# if sdp["id"] == dst_sdp_id:
# attachment_circuits = sdp["attachment-circuits"]["attachment-circuit"]
# if len(attachment_circuits) != 1:
# raise Exception("All SDPs should have 1 attachment-circuit")
# endpoint = EndPointId()
# endpoint.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
# endpoint.device_id.device_uuid.uuid = sdp["node-id"]
# endpoint.endpoint_uuid.uuid = attachment_circuits[0]["ac-tp-id"]
# list_endpoints.append(endpoint)
# break
# else:
# raise Exception("SDP not found")
# del slice_request.slice_endpoint_ids[:]
# slice_request.slice_endpoint_ids.extend(list_endpoints)
return slice_request
@staticmethod
......
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