From ca43ea7c87abbcaa71617de50598449ff5ff007c Mon Sep 17 00:00:00 2001 From: Ankitkumar Patel Date: Tue, 27 Mar 2018 15:02:46 -0400 Subject: Updated the conductor adaptor Updated the conductor adaptor code. Issue-ID: OPTFRA-207 Change-Id: I41bd6f2e39bc5ca6d2d27539772175363590416f Signed-off-by: Ankitkumar Patel --- .../placementopt/conductor/api_builder.py | 18 ++++----------- .../optimizers/placementopt/conductor/conductor.py | 4 ++-- .../placementopt/conductor/remote_opt_processor.py | 4 ++-- .../placementopt/conductor/translation.py | 26 +++++++++++++++------- osdf/templates/conductor_interface.json | 6 ++--- 5 files changed, 28 insertions(+), 30 deletions(-) (limited to 'osdf') diff --git a/osdf/optimizers/placementopt/conductor/api_builder.py b/osdf/optimizers/placementopt/conductor/api_builder.py index 55044d0..e359500 100644 --- a/osdf/optimizers/placementopt/conductor/api_builder.py +++ b/osdf/optimizers/placementopt/conductor/api_builder.py @@ -52,26 +52,17 @@ def conductor_api_builder(request_json, flat_policies: list, local_config, templ 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']) 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']) 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, @@ -81,7 +72,6 @@ def conductor_api_builder(request_json, flat_policies: list, local_config, templ service_type=request_json['serviceInfo']['serviceName'], service_id=request_json['serviceInfo']['serviceInstanceId'], provStatus="", - chosenRegion=order_info.get('requestParameters', {}).get('lcpCloudRegionId'), json=json) json_payload = json.dumps(json.loads(rendered_req)) # need this because template's JSON is ugly! return json_payload diff --git a/osdf/optimizers/placementopt/conductor/conductor.py b/osdf/optimizers/placementopt/conductor/conductor.py index 32a4728..dc67517 100644 --- a/osdf/optimizers/placementopt/conductor/conductor.py +++ b/osdf/optimizers/placementopt/conductor/conductor.py @@ -32,7 +32,7 @@ from osdf.utils.interfaces import RestClient from osdf.operation.exceptions import BusinessException -def request(req_object, osdf_config, grouped_policies, prov_status): +def request(req_object, osdf_config, grouped_policies): """ Process a placement request from a Client (build Conductor API call, make the call, return result) :param req_object: Request parameters from the client @@ -53,7 +53,7 @@ def request(req_object, osdf_config, grouped_policies, prov_status): ping_wait_time = config.get('conductorPingWaitTime', 60) rc = RestClient(userid=uid, passwd=passwd, method="GET", log_func=debug_log.debug, headers=headers) - conductor_req_json_str = conductor_api_builder(req_object, grouped_policies, local_config, prov_status) + conductor_req_json_str = conductor_api_builder(req_object, grouped_policies, local_config) conductor_req_json = json.loads(conductor_req_json_str) debug_log.debug("Sending first Conductor request for request_id {}".format(req_id)) diff --git a/osdf/optimizers/placementopt/conductor/remote_opt_processor.py b/osdf/optimizers/placementopt/conductor/remote_opt_processor.py index 957547b..3e89205 100644 --- a/osdf/optimizers/placementopt/conductor/remote_opt_processor.py +++ b/osdf/optimizers/placementopt/conductor/remote_opt_processor.py @@ -26,7 +26,7 @@ from osdf.optimizers.licenseopt.simple_license_allocation import license_optim from osdf.utils.interfaces import get_rest_client -def process_placement_opt(request_json, policies, osdf_config, prov_status): +def process_placement_opt(request_json, policies, osdf_config): """Perform the work for placement optimization (e.g. call SDC artifact and make conductor request) NOTE: there is scope to make the requests to policy asynchronous to speed up overall performance :param request_json: json content from original request @@ -49,7 +49,7 @@ def process_placement_opt(request_json, policies, osdf_config, prov_status): # Conductor only handles placement, only call Conductor if placementDemands exist if request_json.get('licenseInfo', {}).get('licenseDemands'): metrics_log.info(MH.requesting("placement/conductor", req_id)) - placement_response = conductor.request(request_json, osdf_config, policies, prov_status) + placement_response = conductor.request(request_json, osdf_config, policies) if license_info: # Attach license solution if it exists placement_response['solutionInfo']['licenseInfo'] = license_info else: # License selection only scenario diff --git a/osdf/optimizers/placementopt/conductor/translation.py b/osdf/optimizers/placementopt/conductor/translation.py index 91706b7..e02ab19 100644 --- a/osdf/optimizers/placementopt/conductor/translation.py +++ b/osdf/optimizers/placementopt/conductor/translation.py @@ -50,14 +50,6 @@ def gen_optimization_policy(vnf_list, optimization_policy): return optimization_policy_list -def get_matching_vnf(resource, vnf_list): - - for vnf in vnf_list: - if resource in vnf: - return vnf - return resource - - def get_matching_vnfs(resources, vnf_list, match_type="intersection"): """Get a list of matching VNFs from the list of resources :param resources: @@ -157,6 +149,24 @@ def gen_zone_policy(vnf_list, zone_policy): return cur_policies +def gen_capacity_policy(vnf_list, capacity_policy): + """Get zone policies in order to populate the Conductor API call""" + cur_policies, related_policies = gen_policy_instance(vnf_list, capacity_policy, rtype=None) + for p_new, p_main in zip(cur_policies, related_policies): # add additional fields to each policy + pmz = p_main['content']['capacityProperty'] + p_new[p_main['content']['identity']]['properties'] = \ + {"controller": pmz['controller'], 'request': json.loads(pmz['request'])} + return cur_policies + + +def gen_hpa_policy(vnf_list, hpa_policy): + """Get zone policies in order to populate the Conductor API call""" + cur_policies, related_policies = gen_policy_instance(vnf_list, hpa_policy, rtype=None) + for p_new, p_main in zip(cur_policies, related_policies): # add additional fields to each policy + p_new[p_main['content']['identity']]['properties'] = {'evaluate': p_main['content']['flavorFeatures']} + return cur_policies + + def get_augmented_policy_attributes(policy_property, demand): """Get policy attributes and augment them using policy_config_mapping and demand information""" attributes = copy.copy(policy_property['attributes']) diff --git a/osdf/templates/conductor_interface.json b/osdf/templates/conductor_interface.json index 64f9c4f..ec01cc8 100755 --- a/osdf/templates/conductor_interface.json +++ b/osdf/templates/conductor_interface.json @@ -4,14 +4,12 @@ "timeout": {{ timeout }}, "limit": {{ limit }}, "template": { - "homing_template_version": "2017-10-10", + "homing_template_version": "2018-02-01", "parameters": { "service_name": "{{ service_name }}", "service_id": "{{ service_id }}", "customer_lat": "{{ latitude }}", - "customer_long": "{{ longitude }}", - "REQUIRED_MEM": "{{ memory }}", - "REQUIRED_DISK": "{{ storage }}" + "customer_long": "{{ longitude }}" }, "locations": { "customer_loc": { -- cgit 1.2.3-korg