diff --git a/my_deploy.sh b/my_deploy.sh index d7726f521c47dd36fa8eade2fcd1a1a882434c75..8417f6eae510391e65d5f91202e59cccf32e1f98 100755 --- a/my_deploy.sh +++ b/my_deploy.sh @@ -20,7 +20,7 @@ export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/" # Set the list of components, separated by spaces, you want to build images for, and deploy. -export TFS_COMPONENTS=" context device pathcomp service slice nbi webui load_generator" +export TFS_COMPONENTS="context device pathcomp service slice nbi webui load_generator" # Uncomment to activate Monitoring #export TFS_COMPONENTS="${TFS_COMPONENTS} monitoring" diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py b/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py index 823741a0f49aea74604d9bfd5c3f909e7611bb8c..f96291e20b0d93fbf8102295d9ed8347e301760a 100644 --- a/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py +++ b/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py @@ -52,6 +52,10 @@ TAPI_SETTINGS_FIELD_DEFAULTS = { 'direction' : 'UNIDIRECTIONAL', } +IPLINK_SETTINGS_FIELD_DEFAULTS = { + 'mtu' : 1450, +} + def find_custom_config_rule(config_rules : List, resource_name : str) -> Optional[Dict]: resource_value : Optional[Dict] = None for config_rule in config_rules: @@ -105,7 +109,7 @@ def compose_tapi_config_rules(main_service_config_rules : List, subservice_confi compose_config_rules(main_service_config_rules, subservice_config_rules, rule_name, defaults) def compose_iplink_config_rules(main_service_config_rules : List, subservice_config_rules : List) -> None: - CONFIG_RULES = [SETTINGS_RULE_NAME] + CONFIG_RULES: List[Tuple[str, dict]] = [(SETTINGS_RULE_NAME, IPLINK_SETTINGS_FIELD_DEFAULTS)] for rule_name, defaults in CONFIG_RULES: compose_config_rules(main_service_config_rules, subservice_config_rules, rule_name, defaults) @@ -318,48 +322,54 @@ def generate_neighbor_endpoint_config_rules( for config_rule in config_rules: # Only applicable, by now, to Custom Config Rules for endpoint settings - if 'custom' not in config_rule: continue - match = RE_ENDPOINT_SETTINGS.match(config_rule['custom']['resource_key']) - if match is None: - match = RE_ENDPOINT_VLAN_SETTINGS.match(config_rule['custom']['resource_key']) - if match is None: continue - - resource_key_values = match.groups() - if resource_key_values[0:2] in device_endpoint_keys_a: - resource_key_values = list(resource_key_values) - resource_key_values[0] = link_endpoint_b['device'] - resource_key_values[1] = link_endpoint_b['ingress_ep'] - elif resource_key_values[0:2] in device_endpoint_keys_b: - resource_key_values = list(resource_key_values) - resource_key_values[0] = link_endpoint_a['device'] - resource_key_values[1] = link_endpoint_a['egress_ep'] - else: - continue - - device_keys = compute_device_keys(resource_key_values[0], device_name_mapping) - device_names = {device_key for device_key in device_keys if RE_UUID.match(device_key) is None} - if len(device_names) != 1: - MSG = 'Unable to identify name for Device({:s}): device_keys({:s})' - raise Exception(MSG.format(str(resource_key_values[0]), str(device_keys))) - resource_key_values[0] = device_names.pop() - - endpoint_keys = compute_endpoint_keys(device_keys, resource_key_values[1], endpoint_name_mapping) - endpoint_names = {endpoint_key for endpoint_key in endpoint_keys if RE_UUID.match(endpoint_key) is None} - if len(endpoint_names) != 1: - MSG = 'Unable to identify name for Endpoint({:s}): endpoint_keys({:s})' - raise Exception(MSG.format(str(resource_key_values[1]), str(endpoint_keys))) - resource_key_values[1] = endpoint_names.pop() - - resource_value : Dict = json.loads(config_rule['custom']['resource_value']) - if 'neighbor_address' not in resource_value: continue - resource_value['ip_address'] = resource_value.pop('neighbor_address') - - # remove neighbor_address also from original rule as it is already consumed - - resource_key_template = TMPL_ENDPOINT_VLAN_SETTINGS if len(match.groups()) == 3 else TMPL_ENDPOINT_SETTINGS + if 'custom' not in config_rule or 'ip_link' not in config_rule: continue + if 'custom' in config_rule: + match = RE_ENDPOINT_SETTINGS.match(config_rule['custom']['resource_key']) + if match is None: + match = RE_ENDPOINT_VLAN_SETTINGS.match(config_rule['custom']['resource_key']) + if match is None: continue + resource_key_values = match.groups() + if resource_key_values[0:2] in device_endpoint_keys_a: + resource_key_values = list(resource_key_values) + resource_key_values[0] = link_endpoint_b['device'] + resource_key_values[1] = link_endpoint_b['ingress_ep'] + elif resource_key_values[0:2] in device_endpoint_keys_b: + resource_key_values = list(resource_key_values) + resource_key_values[0] = link_endpoint_a['device'] + resource_key_values[1] = link_endpoint_a['egress_ep'] + else: + continue + + device_keys = compute_device_keys(resource_key_values[0], device_name_mapping) + device_names = {device_key for device_key in device_keys if RE_UUID.match(device_key) is None} + if len(device_names) != 1: + MSG = 'Unable to identify name for Device({:s}): device_keys({:s})' + raise Exception(MSG.format(str(resource_key_values[0]), str(device_keys))) + resource_key_values[0] = device_names.pop() + + endpoint_keys = compute_endpoint_keys(device_keys, resource_key_values[1], endpoint_name_mapping) + endpoint_names = {endpoint_key for endpoint_key in endpoint_keys if RE_UUID.match(endpoint_key) is None} + if len(endpoint_names) != 1: + MSG = 'Unable to identify name for Endpoint({:s}): endpoint_keys({:s})' + raise Exception(MSG.format(str(resource_key_values[1]), str(endpoint_keys))) + resource_key_values[1] = endpoint_names.pop() + + resource_value : Dict = json.loads(config_rule['custom']['resource_value']) + if 'neighbor_address' not in resource_value: continue + resource_value['ip_address'] = resource_value.pop('neighbor_address') + + # remove neighbor_address also from original rule as it is already consumed + + resource_key_template = TMPL_ENDPOINT_VLAN_SETTINGS if len(match.groups()) == 3 else TMPL_ENDPOINT_SETTINGS + generated_config_rule = copy.deepcopy(config_rule) + generated_config_rule['custom']['resource_key'] = resource_key_template.format(*resource_key_values) + generated_config_rule['custom']['resource_value'] = json.dumps(resource_value) + generated_config_rules.append(generated_config_rule) + else: + LOGGER.debug('[generate_neighbor_endpoint_config_rules] IP_LINK: {:s}'.format(str(config_rule))) + resource_value : Dict = config_rule['ip_link'] generated_config_rule = copy.deepcopy(config_rule) - generated_config_rule['custom']['resource_key'] = resource_key_template.format(*resource_key_values) - generated_config_rule['custom']['resource_value'] = json.dumps(resource_value) + generated_config_rule['ip_link'] = json.dumps(resource_value) generated_config_rules.append(generated_config_rule) LOGGER.debug('[generate_neighbor_endpoint_config_rules] generated_config_rules={:s}'.format(str(generated_config_rules))) diff --git a/src/webui/service/main/routes.py b/src/webui/service/main/routes.py index 1ac45db5f3be380c968f4bfd73bcfeb472c9e39c..52944a31c439472055d65e9e75249465dcbca7f7 100644 --- a/src/webui/service/main/routes.py +++ b/src/webui/service/main/routes.py @@ -48,7 +48,7 @@ def process_descriptors(descriptors): descriptor_loader = DescriptorLoader(descriptors, num_workers=DESCRIPTOR_LOADER_NUM_WORKERS) results = descriptor_loader.process() for message,level in compose_notifications(results): - if level == 'error': LOGGER.warning('ERROR message ={:s}'.format(str(message))) + if level == 'error': LOGGER.warning('ERROR message={:s}'.format(str(message))) flash(message, level) @main.route('/', methods=['GET', 'POST'])