Traffic Distributtion support added
[optf/osdf.git] / osdf / optimizers / placementopt / conductor / api_builder.py
index 187f9f5..08a7460 100644 (file)
@@ -25,6 +25,29 @@ from osdf.adapters.policy.utils import group_policies_gen
 from osdf.utils.programming_utils import list_flatten
 
 
+def _build_parameters(group_policies, request_json):
+    """
+    Function prepares parameters section for has request
+    :param group_policies: filtered policies
+    :param request_json: parameter data received from a client
+    :return:
+    """
+    initial_params = tr.get_opt_query_data(request_json, group_policies['request_param_query'])
+    params = dict()
+    params.update({"REQUIRED_MEM": initial_params.pop("requiredMemory", "")})
+    params.update({"REQUIRED_DISK": initial_params.pop("requiredDisk", "")})
+    params.update({"customer_lat": initial_params.pop("customerLatitude", 0.0)})
+    params.update({"customer_long": initial_params.pop("customerLongitude", 0.0)})
+    params.update({"service_name": request_json['serviceInfo']['serviceName']})
+    params.update({"service_id": request_json['serviceInfo']['serviceInstanceId']})
+
+    for key, val in initial_params.items():
+        if val and val != "":
+            params.update({key: val})
+
+    return params
+
+
 def conductor_api_builder(request_json, flat_policies: list, local_config,
                           template="osdf/templates/conductor_interface.json"):
     """Build an OSDF southbound API call for HAS-Conductor/Placement optimization
@@ -54,7 +77,7 @@ def conductor_api_builder(request_json, flat_policies: list, local_config,
     reservation_policy_list = tr.gen_reservation_policy(demand_vnf_name_list, gp['instance_reservation'])
     capacity_policy_list = tr.gen_capacity_policy(demand_vnf_name_list, gp['vim_fit'])
     hpa_policy_list = tr.gen_hpa_policy(demand_vnf_name_list, gp['hpa'])
-    req_params_dict = tr.get_opt_query_data(request_json, gp['request_param_query'])
+    req_params_dict = _build_parameters(gp, request_json)
     conductor_policies = [attribute_policy_list, distance_to_location_policy_list, inventory_policy_list,
                           resource_instance_policy_list, resource_region_policy_list, zone_policy_list,
                           reservation_policy_list, capacity_policy_list, hpa_policy_list]
@@ -70,12 +93,7 @@ def conductor_api_builder(request_json, flat_policies: list, local_config,
         name=req_info['requestId'],
         timeout=req_info['timeout'],
         limit=req_info['numSolutions'],
-        service_type=request_json['serviceInfo']['serviceName'],
-        service_id=request_json['serviceInfo']['serviceInstanceId'],
-        latitude=req_params_dict.get("customerLatitude", 0.0),
-        longitude=req_params_dict.get("customerLongitude", 0.0),
-        required_disk=req_params_dict.get("requiredDisk", ""),
-        required_mem=req_params_dict.get("requiredMemory", ""),
+        request_params=req_params_dict,
         json=json)
     json_payload = json.dumps(json.loads(rendered_req))  # need this because template's JSON is ugly!
     return json_payload