Loading src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py +57 −21 Original line number Diff line number Diff line Loading @@ -12,11 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. import itertools, json, re import itertools, json, logging, re from typing import Dict, List, Optional, Tuple from common.proto.context_pb2 import ConfigRule from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.ConfigRule import json_config_rule_set LOGGER = logging.getLogger(__name__) SETTINGS_RULE_NAME = '/settings' DEVICE_SETTINGS = re.compile(r'\/device\[([^\]]+)\]\/settings') Loading Loading @@ -76,6 +79,7 @@ def compose_device_config_rules( config_rules : List, subservice_config_rules : List, path_hops : List, device_name_mapping : Dict[str, str], endpoint_name_mapping : Dict[Tuple[str, str], str] ) -> None: LOGGER.warning('[compose_device_config_rules] begin') devices_traversed = set() endpoints_traversed = set() Loading @@ -85,8 +89,36 @@ def compose_device_config_rules( endpoints_traversed.add((device_uuid_or_name, path_hop['ingress_ep'])) endpoints_traversed.add((device_uuid_or_name, path_hop['egress_ep'])) LOGGER.warning('[compose_device_config_rules] devices_traversed={:s}'.format(str(devices_traversed))) LOGGER.warning('[compose_device_config_rules] endpoints_traversed={:s}'.format(str(endpoints_traversed))) for config_rule in config_rules: if config_rule.WhichOneof('config_rule') != 'custom': continue LOGGER.warning('[compose_device_config_rules] processing config_rule: {:s}'.format( grpc_message_to_json_string(config_rule))) 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))) # 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 LOGGER.warning('[compose_device_config_rules] adding acl config rule') subservice_config_rules.append(config_rule) elif config_rule.WhichOneof('config_rule') == 'custom': LOGGER.warning('[compose_device_config_rules] is custom') match = DEVICE_SETTINGS.match(config_rule.custom.resource_key) if match is not None: Loading @@ -111,3 +143,7 @@ def compose_device_config_rules( device_endpoint_keys = set(itertools.product(device_keys, endpoint_keys)) if len(device_endpoint_keys.intersection(endpoints_traversed)) == 0: continue subservice_config_rules.append(config_rule) else: continue LOGGER.warning('[compose_device_config_rules] end') Loading
src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py +57 −21 Original line number Diff line number Diff line Loading @@ -12,11 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. import itertools, json, re import itertools, json, logging, re from typing import Dict, List, Optional, Tuple from common.proto.context_pb2 import ConfigRule from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.ConfigRule import json_config_rule_set LOGGER = logging.getLogger(__name__) SETTINGS_RULE_NAME = '/settings' DEVICE_SETTINGS = re.compile(r'\/device\[([^\]]+)\]\/settings') Loading Loading @@ -76,6 +79,7 @@ def compose_device_config_rules( config_rules : List, subservice_config_rules : List, path_hops : List, device_name_mapping : Dict[str, str], endpoint_name_mapping : Dict[Tuple[str, str], str] ) -> None: LOGGER.warning('[compose_device_config_rules] begin') devices_traversed = set() endpoints_traversed = set() Loading @@ -85,8 +89,36 @@ def compose_device_config_rules( endpoints_traversed.add((device_uuid_or_name, path_hop['ingress_ep'])) endpoints_traversed.add((device_uuid_or_name, path_hop['egress_ep'])) LOGGER.warning('[compose_device_config_rules] devices_traversed={:s}'.format(str(devices_traversed))) LOGGER.warning('[compose_device_config_rules] endpoints_traversed={:s}'.format(str(endpoints_traversed))) for config_rule in config_rules: if config_rule.WhichOneof('config_rule') != 'custom': continue LOGGER.warning('[compose_device_config_rules] processing config_rule: {:s}'.format( grpc_message_to_json_string(config_rule))) 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))) # 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 LOGGER.warning('[compose_device_config_rules] adding acl config rule') subservice_config_rules.append(config_rule) elif config_rule.WhichOneof('config_rule') == 'custom': LOGGER.warning('[compose_device_config_rules] is custom') match = DEVICE_SETTINGS.match(config_rule.custom.resource_key) if match is not None: Loading @@ -111,3 +143,7 @@ def compose_device_config_rules( device_endpoint_keys = set(itertools.product(device_keys, endpoint_keys)) if len(device_endpoint_keys.intersection(endpoints_traversed)) == 0: continue subservice_config_rules.append(config_rule) else: continue LOGGER.warning('[compose_device_config_rules] end')