Skip to content
Snippets Groups Projects
Commit 63b491e5 authored by Pablo Armingol's avatar Pablo Armingol
Browse files

IP-link service

parent 6883949a
No related branches found
No related tags found
2 merge requests!341Draft: Resolve "optical bandwidth expansion",!239Draft: Resolve "(TID) Creation of IP link with supporting coherent pluggable to pluggable connection"
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/" export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
# Set the list of components, separated by spaces, you want to build images for, and deploy. # 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 # Uncomment to activate Monitoring
#export TFS_COMPONENTS="${TFS_COMPONENTS} monitoring" #export TFS_COMPONENTS="${TFS_COMPONENTS} monitoring"
......
...@@ -52,6 +52,10 @@ TAPI_SETTINGS_FIELD_DEFAULTS = { ...@@ -52,6 +52,10 @@ TAPI_SETTINGS_FIELD_DEFAULTS = {
'direction' : 'UNIDIRECTIONAL', 'direction' : 'UNIDIRECTIONAL',
} }
IPLINK_SETTINGS_FIELD_DEFAULTS = {
'mtu' : 1450,
}
def find_custom_config_rule(config_rules : List, resource_name : str) -> Optional[Dict]: def find_custom_config_rule(config_rules : List, resource_name : str) -> Optional[Dict]:
resource_value : Optional[Dict] = None resource_value : Optional[Dict] = None
for config_rule in config_rules: for config_rule in config_rules:
...@@ -105,7 +109,7 @@ def compose_tapi_config_rules(main_service_config_rules : List, subservice_confi ...@@ -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) 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: 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: for rule_name, defaults in CONFIG_RULES:
compose_config_rules(main_service_config_rules, subservice_config_rules, rule_name, defaults) compose_config_rules(main_service_config_rules, subservice_config_rules, rule_name, defaults)
...@@ -318,48 +322,54 @@ def generate_neighbor_endpoint_config_rules( ...@@ -318,48 +322,54 @@ def generate_neighbor_endpoint_config_rules(
for config_rule in config_rules: for config_rule in config_rules:
# Only applicable, by now, to Custom Config Rules for endpoint settings # Only applicable, by now, to Custom Config Rules for endpoint settings
if 'custom' not in config_rule: continue if 'custom' not in config_rule or 'ip_link' not in config_rule: continue
match = RE_ENDPOINT_SETTINGS.match(config_rule['custom']['resource_key']) if 'custom' in config_rule:
if match is None: match = RE_ENDPOINT_SETTINGS.match(config_rule['custom']['resource_key'])
match = RE_ENDPOINT_VLAN_SETTINGS.match(config_rule['custom']['resource_key']) if match is None:
if match is None: continue match = RE_ENDPOINT_VLAN_SETTINGS.match(config_rule['custom']['resource_key'])
if match is None: continue
resource_key_values = match.groups() resource_key_values = match.groups()
if resource_key_values[0:2] in device_endpoint_keys_a: if resource_key_values[0:2] in device_endpoint_keys_a:
resource_key_values = list(resource_key_values) resource_key_values = list(resource_key_values)
resource_key_values[0] = link_endpoint_b['device'] resource_key_values[0] = link_endpoint_b['device']
resource_key_values[1] = link_endpoint_b['ingress_ep'] resource_key_values[1] = link_endpoint_b['ingress_ep']
elif resource_key_values[0:2] in device_endpoint_keys_b: elif resource_key_values[0:2] in device_endpoint_keys_b:
resource_key_values = list(resource_key_values) resource_key_values = list(resource_key_values)
resource_key_values[0] = link_endpoint_a['device'] resource_key_values[0] = link_endpoint_a['device']
resource_key_values[1] = link_endpoint_a['egress_ep'] resource_key_values[1] = link_endpoint_a['egress_ep']
else: else:
continue continue
device_keys = compute_device_keys(resource_key_values[0], device_name_mapping) 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} device_names = {device_key for device_key in device_keys if RE_UUID.match(device_key) is None}
if len(device_names) != 1: if len(device_names) != 1:
MSG = 'Unable to identify name for Device({:s}): device_keys({:s})' MSG = 'Unable to identify name for Device({:s}): device_keys({:s})'
raise Exception(MSG.format(str(resource_key_values[0]), str(device_keys))) raise Exception(MSG.format(str(resource_key_values[0]), str(device_keys)))
resource_key_values[0] = device_names.pop() resource_key_values[0] = device_names.pop()
endpoint_keys = compute_endpoint_keys(device_keys, resource_key_values[1], endpoint_name_mapping) 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} endpoint_names = {endpoint_key for endpoint_key in endpoint_keys if RE_UUID.match(endpoint_key) is None}
if len(endpoint_names) != 1: if len(endpoint_names) != 1:
MSG = 'Unable to identify name for Endpoint({:s}): endpoint_keys({:s})' MSG = 'Unable to identify name for Endpoint({:s}): endpoint_keys({:s})'
raise Exception(MSG.format(str(resource_key_values[1]), str(endpoint_keys))) raise Exception(MSG.format(str(resource_key_values[1]), str(endpoint_keys)))
resource_key_values[1] = endpoint_names.pop() resource_key_values[1] = endpoint_names.pop()
resource_value : Dict = json.loads(config_rule['custom']['resource_value']) resource_value : Dict = json.loads(config_rule['custom']['resource_value'])
if 'neighbor_address' not in resource_value: continue if 'neighbor_address' not in resource_value: continue
resource_value['ip_address'] = resource_value.pop('neighbor_address') resource_value['ip_address'] = resource_value.pop('neighbor_address')
# remove neighbor_address also from original rule as it is already consumed # 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 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 = copy.deepcopy(config_rule)
generated_config_rule['custom']['resource_key'] = resource_key_template.format(*resource_key_values) generated_config_rule['ip_link'] = json.dumps(resource_value)
generated_config_rule['custom']['resource_value'] = json.dumps(resource_value)
generated_config_rules.append(generated_config_rule) generated_config_rules.append(generated_config_rule)
LOGGER.debug('[generate_neighbor_endpoint_config_rules] generated_config_rules={:s}'.format(str(generated_config_rules))) LOGGER.debug('[generate_neighbor_endpoint_config_rules] generated_config_rules={:s}'.format(str(generated_config_rules)))
......
...@@ -48,7 +48,7 @@ def process_descriptors(descriptors): ...@@ -48,7 +48,7 @@ def process_descriptors(descriptors):
descriptor_loader = DescriptorLoader(descriptors, num_workers=DESCRIPTOR_LOADER_NUM_WORKERS) descriptor_loader = DescriptorLoader(descriptors, num_workers=DESCRIPTOR_LOADER_NUM_WORKERS)
results = descriptor_loader.process() results = descriptor_loader.process()
for message,level in compose_notifications(results): 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) flash(message, level)
@main.route('/', methods=['GET', 'POST']) @main.route('/', methods=['GET', 'POST'])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment