diff options
author | Lukasz Rajewski <lukasz.rajewski@orange.com> | 2019-04-08 15:05:22 +0200 |
---|---|---|
committer | Lukasz Rajewski <lukasz.rajewski@orange.com> | 2019-04-18 17:05:54 +0200 |
commit | fc3ead31e631f69fabf0baaa20c10bf955ce374b (patch) | |
tree | 5227f20b49628ddf2e3ac533d0cd1dcb9d32a9e8 /osdf/optimizers/placementopt/conductor/api_builder.py | |
parent | 2d59800cf61a90e2a80902186bdce3b28e5ae14d (diff) |
Traffic Distributtion support added
* New local polcies for vFW TD use case
* Fixed encoding for conductor_request template and parameters
section modified to accept all requestParameters
* Conductor request can have many attributes in the
'attributes' section - all that are defined in the vnf policy file
* Conductor request can have many request parameters in the
'requestParameters' section. The parameters come from QueryPolicies.
Before list of suppoted parameters was hardcoded
* Optional 'unique' parameter added to the placementDemand section.
It is already supported by conductor for all inventory types
* Improved debug logs for local policies
* Unit tests added for expanded request format
Change-Id: I41f219c366a3a77881c7096e64a6272edbada23b
Issue-ID: OPTFRA-443
Signed-off-by: Lukasz Rajewski <lukasz.rajewski@orange.com>
Diffstat (limited to 'osdf/optimizers/placementopt/conductor/api_builder.py')
-rw-r--r-- | osdf/optimizers/placementopt/conductor/api_builder.py | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/osdf/optimizers/placementopt/conductor/api_builder.py b/osdf/optimizers/placementopt/conductor/api_builder.py index 187f9f5..08a7460 100644 --- a/osdf/optimizers/placementopt/conductor/api_builder.py +++ b/osdf/optimizers/placementopt/conductor/api_builder.py @@ -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 |