class SliceSelectionOptimizer(Thread):
def __init__(self, osdf_config, slice_config, request_json, model_type):
+ super().__init__()
self.osdf_config = osdf_config
self.slice_config = slice_config
self.request_json = request_json
model_info = self.request_json.get(app_info['model_info'])
model_name = model_info['name']
policies = self.get_app_policies(model_name, app_info['app_name'])
- request_parameters = self.get_request_parameters(requirements)
+ request_parameters = self.get_request_parameters(requirements, model_info)
demands = [
{
except RequestException as e:
resp = e.response.json()
error = resp['plans'][0]['message']
+ if "Unable to find any" in error:
+ return self.response_processor.get_slice_selection_response([])
error_log.error('Error from conductor {}'.format(error))
return self.response_processor.process_error_response(error)
recommendations = resp["plans"][0].get("recommendations")
subnets = [subnet['domainType'] for subnet in self.request_json['subnetCapabilities']] \
if self.request_json.get('subnetCapabilities') else []
- return self.response_processor.process_response(recommendations, model_info, subnets)
+ return self.response_processor.process_response(recommendations, model_info, subnets, self.model_type)
- def get_request_parameters(self, requirements):
+ def get_request_parameters(self, requirements, model_info):
camel_to_snake = self.slice_config['attribute_mapping']['camel_to_snake']
request_params = {camel_to_snake[key]: value for key, value in requirements.items()}
subnet_capabilities = self.request_json.get('subnetCapabilities')
if subnet_capabilities:
for subnet_capability in subnet_capabilities:
- domain_type = f"{subnet_capability['domainType'].lower().replace('-', '_')}_"
+ domain_type = f"{subnet_capability['domainType']}_"
capability_details = subnet_capability['capabilityDetails']
for key, value in capability_details.items():
request_params[f"{domain_type}{camel_to_snake[key]}"] = value
+ request_params.update(model_info)
return request_params
def get_app_policies(self, model_name, app_name):
policy_request_json = self.request_json.copy()
policy_request_json['serviceInfo'] = {'serviceName': model_name}
- if 'preferReuse' in self.request_json:
- policy_request_json['preferReuse'] = "reuse" if self.request_json['preferReuse'] else "create_new"
+ if 'serviceProfile' in self.request_json:
+ slice_scope = self.request_json['serviceProfile']['resourceSharingLevel']
+ if 'preferReuse' in self.request_json and slice_scope == "shared":
+ slice_scope = slice_scope + "," + ("reuse" if self.request_json['preferReuse'] else "create_new")
+ policy_request_json['slice_scope'] = slice_scope
+ debug_log.debug("policy_request_json {}".format(str(policy_request_json)))
return get_policies(policy_request_json, app_name)