diff --git a/src/nbi/service/rest_server/nbi_plugins/ietf_network_slice/ietf_slice_handler.py b/src/nbi/service/rest_server/nbi_plugins/ietf_network_slice/ietf_slice_handler.py index 3317a3b2f45342e391a012c4aa8342621abebb49..1614a7724e3e06405fb4f46db5b372206d7418d6 100644 --- a/src/nbi/service/rest_server/nbi_plugins/ietf_network_slice/ietf_slice_handler.py +++ b/src/nbi/service/rest_server/nbi_plugins/ietf_network_slice/ietf_slice_handler.py @@ -15,6 +15,8 @@ LOGGER = logging.getLogger(__name__) RESOURCE_KEY = "ietf_data" +ADDRESS_PREFIX = 24 +RAISE_IF_DIFFERS = False class IETFSliceHandler: @@ -36,6 +38,7 @@ class IETFSliceHandler: slice_request.slice_id.slice_uuid.uuid = slice_id slice_request.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_PLANNED list_endpoints = [] + endpoint_config_rules = [] connection_group_ids = set() for sdp in sdps: attachment_circuits = sdp["attachment-circuits"]["attachment-circuit"] @@ -43,14 +46,26 @@ class IETFSliceHandler: 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"] + device_uuid = sdp["node-id"] + endpoint.device_id.device_uuid.uuid = device_uuid + endpoint_uuid = attachment_circuits[0]["ac-tp-id"] + endpoint.endpoint_uuid.uuid = endpoint_uuid list_endpoints.append(endpoint) connection_group_ids.add( sdp["service-match-criteria"]["match-criterion"][0][ "target-connection-group-id" ] ) + endpoint_config_rule_fields = { + "address_ip": (endpoint_uuid, RAISE_IF_DIFFERS), + "address_prefix": (ADDRESS_PREFIX, RAISE_IF_DIFFERS), + } + endpoint_config_rules.append( + ( + f"/device[{device_uuid}]/endpoint[{endpoint_uuid}]/settings", + endpoint_config_rule_fields, + ) + ) slice_request.slice_endpoint_ids.extend(list_endpoints) if len(connection_group_ids) != 1: raise Exception("SDPs target-connection-group-id do not match") @@ -82,13 +97,18 @@ class IETFSliceHandler: slice_request.slice_owner.owner_uuid.uuid = str( uuid.uuid5(uuid.NAMESPACE_DNS, owner) ) - raise_if_differs = False - fields = { - name: (value, raise_if_differs) for name, value in request_data.items() + ietf_slice_fields = { + name: (value, RAISE_IF_DIFFERS) for name, value in request_data.items() } update_config_rule_custom( - slice_request.slice_config.config_rules, RESOURCE_KEY, fields + slice_request.slice_config.config_rules, RESOURCE_KEY, ietf_slice_fields ) + + for ep_cr_key, ep_cr_fields in endpoint_config_rules: + update_config_rule_custom( + slice_request.slice_config.config_rules, ep_cr_key, ep_cr_fields + ) + return slice_request @staticmethod @@ -112,8 +132,7 @@ class IETFSliceHandler: slice_service = slice_services[0] slice_sdps = slice_service["sdps"]["sdp"] slice_sdps.append(new_sdp) - raise_if_differs = False - fields = {name: (value, raise_if_differs) for name, value in ietf_data.items()} + fields = {name: (value, RAISE_IF_DIFFERS) for name, value in ietf_data.items()} update_config_rule_custom( slice_request.slice_config.config_rules, RESOURCE_KEY, fields ) @@ -139,8 +158,7 @@ class IETFSliceHandler: True ) slice_sdps.pop(sdp_idx) - raise_if_differs = False - fields = {name: (value, raise_if_differs) for name, value in ietf_data.items()} + fields = {name: (value, RAISE_IF_DIFFERS) for name, value in ietf_data.items()} update_config_rule_custom( slice_request.slice_config.config_rules, RESOURCE_KEY, fields ) @@ -167,8 +185,7 @@ class IETFSliceHandler: slice_service = slice_services[0] slice_connection_groups = slice_service["connection-groups"]["connection-group"] slice_connection_groups.append(new_connection_group) - raise_if_differs = False - fields = {name: (value, raise_if_differs) for name, value in ietf_data.items()} + fields = {name: (value, RAISE_IF_DIFFERS) for name, value in ietf_data.items()} update_config_rule_custom(slice.slice_config.config_rules, RESOURCE_KEY, fields) return slice @@ -195,8 +212,7 @@ class IETFSliceHandler: ) ).index(True) slice_connection_groups.pop(sdp_idx) - raise_if_differs = False - fields = {name: (value, raise_if_differs) for name, value in ietf_data.items()} + fields = {name: (value, RAISE_IF_DIFFERS) for name, value in ietf_data.items()} update_config_rule_custom( slice_request.slice_config.config_rules, RESOURCE_KEY, fields ) @@ -288,8 +304,7 @@ class IETFSliceHandler: del slice_request.slice_constraints[:] slice_request.slice_constraints.extend(list_constraints) LOGGER.debug(grpc_message_to_json(slice_request)) # TODO remove - raise_if_differs = False - fields = {name: (value, raise_if_differs) for name, value in ietf_data.items()} + fields = {name: (value, RAISE_IF_DIFFERS) for name, value in ietf_data.items()} update_config_rule_custom( slice_request.slice_config.config_rules, RESOURCE_KEY, fields ) @@ -326,9 +341,7 @@ class IETFSliceHandler: break else: raise Exception("Second SDP not found") - - raise_if_differs = False - fields = {name: (value, raise_if_differs) for name, value in ietf_data.items()} + fields = {name: (value, RAISE_IF_DIFFERS) for name, value in ietf_data.items()} update_config_rule_custom( slice_request.slice_config.config_rules, RESOURCE_KEY, fields ) diff --git a/src/nbi/tests/data/slice/post_network_slice1.json b/src/nbi/tests/data/slice/post_network_slice1.json index 5683877127e56885a31c30613dc7984b2b4173f8..67907649edbaa87e61b3c4ca8d29c966c22346e5 100644 --- a/src/nbi/tests/data/slice/post_network_slice1.json +++ b/src/nbi/tests/data/slice/post_network_slice1.json @@ -58,7 +58,7 @@ "id": "AC POP to VM1", "description": "AC VM1 connected to POP", "ac-node-id": "172.16.204.220", - "ac-tp-id": "200" + "ac-tp-id": "500" } ] }