diff --git a/src/nbi/service/rest_server/nbi_plugins/etsi_bwm/Tools.py b/src/nbi/service/rest_server/nbi_plugins/etsi_bwm/Tools.py index c805919920617272d4086cc6adb3c37db8e90303..17199315d31a9a18ee0c5611a50ad25083fac3b5 100644 --- a/src/nbi/service/rest_server/nbi_plugins/etsi_bwm/Tools.py +++ b/src/nbi/service/rest_server/nbi_plugins/etsi_bwm/Tools.py @@ -27,9 +27,8 @@ from common.tools.object_factory.Service import json_service_id LOGGER = logging.getLogger(__name__) -RE_PORT_AND_IP_MATCH = r'resource_key: \"\/interface\[(.*)\]\/subinterface\[.*\]\"[.|\n]*.*\\\"address_ip\\\": \\\"{}\\\"' -RE_ENDPOINT_UUID_PORT_MATCH = r'\s*\n?\s*endpoint_uuid .\s*\n?\s*uuid: \"(.*)\"\n?\s*.\n?\s*.\n?\s*name: \"{}\"' -RE_DEVICE_UUID_MATCH = r'\n?\s*device_uuid \{\s*\n?\s*uuid: \"(.*)\"\n?\s*\}\n?\s*\}' +RE_CONFIG_RULE_IF_SUBIF = re.compile(r'^\/interface\[([^\]]+)\]\/subinterface\[([^\]]+)\]$') +RE_CONFIG_RULE_ADDRESS_IP = re.compile(r'\\\"address_ip\\\": \\\"((?:[0-9]{1,3}\.){3}[0-9]{1,3})\\\"') def service_2_bwInfo(service: Service) -> dict: response = {} @@ -79,20 +78,20 @@ def bwInfo_2_service(client, bwInfo: dict) -> Service: a_ip = bwInfo['sessionFilter'][0]['sourceIp'] z_ip = bwInfo['sessionFilter'][0]['dstAddress'] - devices = (str(device) for device in client.ListDevices(Empty()).devices) + devices = client.ListDevices(Empty()).devices for device in devices: - for ep_id in (a_ip, z_ip): - if look_up := re.search(RE_PORT_AND_IP_MATCH.format(ep_id), device): - physical_port = look_up.groups(0)[0] - # 'PORT-' is added as a prefix - port = 'PORT-' + physical_port - port_uuid = re.search(RE_ENDPOINT_UUID_PORT_MATCH.format(port), device).group(0)[0] - device_uuid = re.search(RE_DEVICE_UUID_MATCH, device).group(0)[0] - ep_id = EndPointId() - ep_id.endpoint_uuid.uuid = port_uuid - ep_id.device_id.device_uuid.uuid = device_uuid - service.service_endpoint_ids.append(ep_id) - + device_endpoint_uuids = {ep.name:ep.endpoint_id.endpoint_uuid for ep in device.device_endpoints} + for cr in device.device_config.config_rules: + if cr.WhichOneof('config_rule') == 'custom': + match_subif = RE_CONFIG_RULE_IF_SUBIF.match(cr.custom.resource_key) + match_ip = RE_CONFIG_RULE_ADDRESS_IP.match(cr.custom.resource_value) + if match_subif and match_ip and match_ip.groups(0)[0] in [a_ip, z_ip]: + # `PORT-` added as prefix + port_name = 'PORT-' + match_subif.groups(0)[0] + ep_id = EndPointId() + ep_id.endpoint_uuid.uuid = device_endpoint_uuids[port_name] + ep_id.device_id.device_uuid.uuid = device.device_id.device_uuid + service.service_endpoint_ids.append(ep_id) service.service_type = ServiceTypeEnum.SERVICETYPE_L3NM if 'appInsId' in bwInfo: