Commit e57862b5 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Update ComposeConfigRules.py

parent f0de9596
Loading
Loading
Loading
Loading
+21 −14
Original line number Diff line number Diff line
@@ -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
            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

            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_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)))
            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}

            if acl_endpoint_uuid not in endpoints_traversed: continue
            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)