diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py b/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py index 02f412a3f88c495f77046cd5d6be7ca9ee990fab..e40580123022503f51641796ef46416fd86d97e4 100644 --- a/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py +++ b/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py @@ -81,6 +81,9 @@ def compose_device_config_rules( ) -> None: LOGGER.warning('[compose_device_config_rules] begin') + LOGGER.warning('[compose_device_config_rules] device_name_mapping={:s}'.format(str(device_name_mapping))) + LOGGER.warning('[compose_device_config_rules] endpoint_name_mapping={:s}'.format(str(endpoint_name_mapping))) + devices_traversed = set() endpoints_traversed = set() for path_hop in path_hops: @@ -98,21 +101,25 @@ def compose_device_config_rules( if config_rule.WhichOneof('config_rule') == 'acl': LOGGER.warning('[compose_device_config_rules] is acl') - acl_endpoint_id = config_rule.acl.endpoint_id - acl_device_uuid = acl_endpoint_id.device_id.device_uuid.uuid - LOGGER.warning('[compose_device_config_rules] acl_device_uuid={:s}'.format(str(acl_device_uuid))) - if acl_device_uuid not in devices_traversed: continue - - acl_endpoint_uuid = acl_endpoint_id.endpoint_uuid.uuid - LOGGER.warning('[compose_device_config_rules] initial acl_endpoint_uuid={:s}'.format(str(acl_endpoint_uuid))) + endpoint_id = config_rule.acl.endpoint_id + device_uuid_or_name = endpoint_id.device_id.device_uuid.uuid + LOGGER.warning('[compose_device_config_rules] device_uuid_or_name={:s}'.format(str(device_uuid_or_name))) + device_name_or_uuid = device_name_mapping.get(device_uuid_or_name, device_uuid_or_name) + LOGGER.warning('[compose_device_config_rules] device_name_or_uuid={:s}'.format(str(device_name_or_uuid))) + device_keys = {device_uuid_or_name, device_name_or_uuid} + if len(device_keys.intersection(devices_traversed)) == 0: continue + + endpoint_uuid = endpoint_id.endpoint_uuid.uuid + LOGGER.warning('[compose_device_config_rules] endpoint_uuid={:s}'.format(str(endpoint_uuid))) # given endpoint uuids link 'eth-1/0/20.533', remove last part after the '.' - acl_endpoint_uuid_reversed = acl_endpoint_uuid[::-1] - acl_endpoint_uuid_reversed_parts = acl_endpoint_uuid_reversed.split('.', maxsplit=1) - acl_endpoint_uuid_reversed_last_part = acl_endpoint_uuid_reversed_parts[-1] - acl_endpoint_uuid = acl_endpoint_uuid_reversed_last_part[::-1] - LOGGER.warning('[compose_device_config_rules] corrected acl_endpoint_uuid={:s}'.format(str(acl_endpoint_uuid))) - - if acl_endpoint_uuid not in endpoints_traversed: continue + endpoint_uuid_or_name = (endpoint_uuid[::-1].split('.', maxsplit=1)[-1])[::-1] + LOGGER.warning('[compose_device_config_rules] endpoint_uuid_or_name={:s}'.format(str(endpoint_uuid_or_name))) + endpoint_name_or_uuid_1 = endpoint_name_mapping[(device_uuid_or_name, endpoint_uuid_or_name)] + endpoint_name_or_uuid_2 = endpoint_name_mapping[(device_name_or_uuid, endpoint_uuid_or_name)] + endpoint_keys = {endpoint_uuid_or_name, endpoint_name_or_uuid_1, endpoint_name_or_uuid_2} + + device_endpoint_keys = set(itertools.product(device_keys, endpoint_keys)) + if len(device_endpoint_keys.intersection(endpoints_traversed)) == 0: continue LOGGER.warning('[compose_device_config_rules] adding acl config rule') subservice_config_rules.append(config_rule)