From fac7fad54201fabab91fb850abf6f7d5c9f772bc Mon Sep 17 00:00:00 2001 From: hariharan97 Date: Thu, 15 Apr 2021 11:05:27 +0530 Subject: Fix for NSI selection response Issue-ID: OPTFRA-943 Signed-off-by: hariharan97 Change-Id: I88f18e258898683df8e03a531f5c22d11ff7f08f --- .../optimizers/conductor/remote_opt_processor.py | 2 +- .../optimizers/conductor/response_processor.py | 26 +++++++++++----------- requirements.txt | 3 +++ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/apps/slice_selection/optimizers/conductor/remote_opt_processor.py b/apps/slice_selection/optimizers/conductor/remote_opt_processor.py index 0fbf36e..3c140c5 100644 --- a/apps/slice_selection/optimizers/conductor/remote_opt_processor.py +++ b/apps/slice_selection/optimizers/conductor/remote_opt_processor.py @@ -106,7 +106,7 @@ class SliceSelectionOptimizer(Thread): 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, model_info): camel_to_snake = self.slice_config['attribute_mapping']['camel_to_snake'] diff --git a/apps/slice_selection/optimizers/conductor/response_processor.py b/apps/slice_selection/optimizers/conductor/response_processor.py index d2c949b..2357ab9 100644 --- a/apps/slice_selection/optimizers/conductor/response_processor.py +++ b/apps/slice_selection/optimizers/conductor/response_processor.py @@ -28,23 +28,31 @@ class ResponseProcessor(object): self.request_info = request_info self.slice_config = slice_config - def process_response(self, recommendations, model_info, subnets): + def process_response(self, recommendations, model_info, subnets, model_type): """Process conductor response to form the response for the API request :param recommendations: recommendations from conductor :param model_info: model info from the request :param subnets: list of subnets + :param model_type: NSI or NSSI :return: response json as a dictionary """ if not recommendations: return self.get_slice_selection_response([]) model_name = model_info['name'] - solutions = [self.get_solution_from_candidate(rec[model_name]['candidate'], model_info, subnets) + solutions = [self.get_solution_from_candidate(rec[model_name]['candidate'], model_info, subnets, model_type) for rec in recommendations] return self.get_slice_selection_response(solutions) - def get_solution_from_candidate(self, candidate, model_info, subnets): - if candidate['inventory_type'] == 'nssi': + def get_solution_from_candidate(self, candidate, model_info, subnets, model_type): + if candidate['inventory_type'] == 'slice_profiles': + return { + 'existingNSI': False, + 'newNSISolution': { + 'sliceProfiles': self.get_slice_profiles_from_candidate(candidate, subnets) + } + } + elif model_type == 'NSSI': return { 'UUID': model_info['UUID'], 'invariantUUID': model_info['invariantUUID'], @@ -52,7 +60,7 @@ class ResponseProcessor(object): 'NSSIId': candidate['instance_id'] } - elif candidate['inventory_type'] == 'nsi': + elif model_type == 'NSI': return { 'existingNSI': True, 'sharedNSISolution': { @@ -63,14 +71,6 @@ class ResponseProcessor(object): } } - elif candidate['inventory_type'] == 'slice_profiles': - return { - 'existingNSI': False, - 'newNSISolution': { - 'sliceProfiles': self.get_slice_profiles_from_candidate(candidate, subnets) - } - } - def get_slice_profiles_from_candidate(self, candidate, subnets): slice_profiles = [] for subnet in subnets: diff --git a/requirements.txt b/requirements.txt index 956ec7c..a77172a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,3 +18,6 @@ pathtools>=0.1.2 pycryptodome>=3.9.6 python-consul>=1.1.0 tornado>=6.1 +mock>=4.0.3 + + -- cgit 1.2.3-korg