Fix for NSI selection response 51/120551/1
authorhariharan97 <rh20085046@wipro.com>
Thu, 15 Apr 2021 05:35:27 +0000 (11:05 +0530)
committerhariharan97 <rh20085046@wipro.com>
Thu, 15 Apr 2021 05:38:29 +0000 (11:08 +0530)
Issue-ID: OPTFRA-943
Signed-off-by: hariharan97 <rh20085046@wipro.com>
Change-Id: I88f18e258898683df8e03a531f5c22d11ff7f08f

apps/slice_selection/optimizers/conductor/remote_opt_processor.py
apps/slice_selection/optimizers/conductor/response_processor.py
requirements.txt

index 0fbf36e..3c140c5 100644 (file)
@@ -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']
index d2c949b..2357ab9 100644 (file)
@@ -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:
index 956ec7c..a77172a 100644 (file)
@@ -18,3 +18,6 @@ pathtools>=0.1.2
 pycryptodome>=3.9.6
 python-consul>=1.1.0
 tornado>=6.1
+mock>=4.0.3
+
+