Fixed tosca models, updated code and policies
[optf/osdf.git] / osdf / optimizers / placementopt / conductor / api_builder.py
index 55044d0..187f9f5 100644 (file)
@@ -25,7 +25,8 @@ from osdf.adapters.policy.utils import group_policies_gen
 from osdf.utils.programming_utils import list_flatten
 
 
-def conductor_api_builder(request_json, flat_policies: list, local_config, template="templates/conductor_interface.json"):
+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
     :param request_json: parameter data received from a client
     :param flat_policies: policy data received from the policy platform (flat policies)
@@ -39,8 +40,7 @@ def conductor_api_builder(request_json, flat_policies: list, local_config, templ
     demand_vnf_name_list = []
 
     for placementDemand in request_json['placementInfo']['placementDemands']:
-        demand_vnf_name_list.append(placementDemand['resourceModuleName'])
-
+        demand_vnf_name_list.append(placementDemand['resourceModuleName'].lower())
     demand_list = tr.gen_demands(request_json, gp['vnfPolicy'])
     attribute_policy_list = tr.gen_attribute_policy(demand_vnf_name_list, gp['attribute'])
     distance_to_location_policy_list = tr.gen_distance_to_location_policy(
@@ -50,28 +50,20 @@ def conductor_api_builder(request_json, flat_policies: list, local_config, templ
         demand_vnf_name_list, gp['instance_fit'])
     resource_region_policy_list = tr.gen_resource_region_policy(demand_vnf_name_list, gp['region_fit'])
     zone_policy_list = tr.gen_zone_policy(demand_vnf_name_list, gp['zone'])
-    optimization_policy_list = tr.gen_optimization_policy(demand_vnf_name_list, gp['placementOptimization'])
+    optimization_policy_list = tr.gen_optimization_policy(demand_vnf_name_list, gp['placement_optimization'])
     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'])
     conductor_policies = [attribute_policy_list, distance_to_location_policy_list, inventory_policy_list,
-                          resource_instance_policy_list, resource_region_policy_list, zone_policy_list]
+                          resource_instance_policy_list, resource_region_policy_list, zone_policy_list,
+                          reservation_policy_list, capacity_policy_list, hpa_policy_list]
     filtered_policies = [x for x in conductor_policies if len(x) > 0]
     policy_groups = list_flatten(filtered_policies)
-    reservation_policies = [x for x in reservation_policy_list if len(x) > 0]
-    reservation_groups = list_flatten(reservation_policies)
     req_info = request_json['requestInfo']
     request_type = req_info.get('requestType', None)
-    service_type = request_json['serviceInfo']['serviceName']
-    service_info = local_config.get('service_info', {}).get(service_type, {})
-    order_info = {}
-    if 'orderInfo' in request_json["placementInfo"]:
-        order_info = json.loads(request_json["placementInfo"]["orderInfo"])
-
-    subs_com_site_id = ""
-    if 'subscriberInfo' in request_json['placementInfo']: 
-        subs_com_site_id = request_json['placementInfo']['subscriberInfo'].get('subscriberCommonSiteId', "")
     rendered_req = templ.render(
         requestType=request_type,
-        chosenComplex=subs_com_site_id,
         demand_list=demand_list,
         policy_groups=policy_groups,
         optimization_policies=optimization_policy_list,
@@ -80,8 +72,10 @@ def conductor_api_builder(request_json, flat_policies: list, local_config, templ
         limit=req_info['numSolutions'],
         service_type=request_json['serviceInfo']['serviceName'],
         service_id=request_json['serviceInfo']['serviceInstanceId'],
-        provStatus="",
-        chosenRegion=order_info.get('requestParameters', {}).get('lcpCloudRegionId'),
+        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", ""),
         json=json)
     json_payload = json.dumps(json.loads(rendered_req))  # need this because template's JSON is ugly!
     return json_payload