From 2754404822b496392717d260681946debecf8648 Mon Sep 17 00:00:00 2001 From: dhebeha Date: Fri, 10 Apr 2020 06:38:11 -0700 Subject: add aggregation policy for NSI selection made changes for other policy updates Issue-ID: OPTFRA-730 Signed-off-by: dhebeha Change-Id: I3fb4ae184cdae9181037fb059ac144070228c29f --- osdf/adapters/conductor/api_builder.py | 32 +++++++++++---------- osdf/adapters/conductor/translation.py | 52 ++++++++++++++++++++-------------- 2 files changed, 47 insertions(+), 37 deletions(-) (limited to 'osdf/adapters') diff --git a/osdf/adapters/conductor/api_builder.py b/osdf/adapters/conductor/api_builder.py index c99c5eb..daf8e54 100644 --- a/osdf/adapters/conductor/api_builder.py +++ b/osdf/adapters/conductor/api_builder.py @@ -34,7 +34,7 @@ def _build_parameters(group_policies, service_info, request_parameters): :return: """ initial_params = tr.get_opt_query_data(request_parameters, - group_policies['onap.policies.optimization.QueryPolicy']) + group_policies['onap.policies.optimization.service.QueryPolicy']) params = dict() params.update({"REQUIRED_MEM": initial_params.pop("requiredMemory", "")}) params.update({"REQUIRED_DISK": initial_params.pop("requiredDisk", "")}) @@ -46,7 +46,6 @@ def _build_parameters(group_policies, service_info, request_parameters): for key, val in initial_params.items(): if val and val != "": params.update({key: val}) - return params @@ -71,35 +70,38 @@ def conductor_api_builder(req_info, demands, request_parameters, service_info, demand_name_list = [] for demand in demands: demand_name_list.append(demand['resourceModuleName'].lower()) - demand_list = tr.gen_demands(demands, gp['onap.policies.optimization.VnfPolicy']) + demand_list = tr.gen_demands(demands, gp['onap.policies.optimization.resource.VnfPolicy']) attribute_policy_list = tr.gen_attribute_policy( - demand_name_list, gp['onap.policies.optimization.AttributePolicy']) + demand_name_list, gp['onap.policies.optimization.resource.AttributePolicy']) distance_to_location_policy_list = tr.gen_distance_to_location_policy( - demand_name_list, gp['onap.policies.optimization.DistancePolicy']) + demand_name_list, gp['onap.policies.optimization.resource.DistancePolicy']) inventory_policy_list = tr.gen_inventory_group_policy( - demand_name_list, gp['onap.policies.optimization.InventoryGroupPolicy']) + demand_name_list, gp['onap.policies.optimization.resource.InventoryGroupPolicy']) resource_instance_policy_list = tr.gen_resource_instance_policy( - demand_name_list, gp['onap.policies.optimization.ResourceInstancePolicy']) + demand_name_list, gp['onap.policies.optimization.resource.ResourceInstancePolicy']) resource_region_policy_list = tr.gen_resource_region_policy( - demand_name_list, gp['onap.policies.optimization.ResourceRegionPolicy']) + demand_name_list, gp['onap.policies.optimization.resource.ResourceRegionPolicy']) zone_policy_list = tr.gen_zone_policy( - demand_name_list, gp['onap.policies.optimization.AffinityPolicy']) + demand_name_list, gp['onap.policies.optimization.resource.AffinityPolicy']) optimization_policy_list = tr.gen_optimization_policy( - demand_name_list, gp['onap.policies.optimization.OptimizationPolicy']) + demand_name_list, gp['onap.policies.optimization.resource.OptimizationPolicy']) reservation_policy_list = tr.gen_reservation_policy( - demand_name_list, gp['onap.policies.optimization.InstanceReservationPolicy']) + demand_name_list, gp['onap.policies.optimization.resource.InstanceReservationPolicy']) capacity_policy_list = tr.gen_capacity_policy( - demand_name_list, gp['onap.policies.optimization.Vim_fit']) + demand_name_list, gp['onap.policies.optimization.resource.Vim_fit']) hpa_policy_list = tr.gen_hpa_policy( - demand_name_list, gp['onap.policies.optimization.HpaPolicy']) + demand_name_list, gp['onap.policies.optimization.resource.HpaPolicy']) threshold_policy_list = tr.gen_threshold_policy(demand_name_list, - gp['onap.policies.optimization.' + gp['onap.policies.optimization.resource.' 'ThresholdPolicy']) + aggregation_policy_list = tr.gen_aggregation_policy(demand_name_list, + gp['onap.policies.optimization.resource.' + 'AggregationPolicy']) req_params_dict = _build_parameters(gp, service_info, request_parameters) 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, threshold_policy_list] + capacity_policy_list, hpa_policy_list, threshold_policy_list, aggregation_policy_list] filtered_policies = [x for x in conductor_policies if len(x) > 0] policy_groups = list_flatten(filtered_policies) request_type = req_info.get('requestType', None) diff --git a/osdf/adapters/conductor/translation.py b/osdf/adapters/conductor/translation.py index 002af88..4b012f5 100644 --- a/osdf/adapters/conductor/translation.py +++ b/osdf/adapters/conductor/translation.py @@ -21,22 +21,22 @@ import json import re import yaml - from osdf.utils.programming_utils import dot_notation policy_config_mapping = yaml.safe_load(open('config/has_config.yaml')).get('policy_config_mapping') -CONSTRAINT_TYPE_MAP = {"onap.policies.optimization.AttributePolicy": "attribute", - "onap.policies.optimization.DistancePolicy": "distance_to_location", - "onap.policies.optimization.InventoryGroupPolicy": "inventory_group", - "onap.policies.optimization.ResourceInstancePolicy": "instance_fit", - "onap.policies.optimization.ResourceRegionPolicy": "region_fit", - "onap.policies.optimization.AffinityPolicy": "zone", - "onap.policies.optimization.InstanceReservationPolicy": +CONSTRAINT_TYPE_MAP = {"onap.policies.optimization.resource.AttributePolicy": "attribute", + "onap.policies.optimization.resource.DistancePolicy": "distance_to_location", + "onap.policies.optimization.resource.InventoryGroupPolicy": "inventory_group", + "onap.policies.optimization.resource.ResourceInstancePolicy": "instance_fit", + "onap.policies.optimization.resource.ResourceRegionPolicy": "region_fit", + "onap.policies.optimization.resource.AffinityPolicy": "zone", + "onap.policies.optimization.resource.InstanceReservationPolicy": "instance_reservation", - "onap.policies.optimization.Vim_fit": "vim_fit", - "onap.policies.optimization.HpaPolicy": "hpa", - "onap.policies.optimization.ThresholdPolicy": "threshold" + "onap.policies.optimization.resource.Vim_fit": "vim_fit", + "onap.policies.optimization.resource.HpaPolicy": "hpa", + "onap.policies.optimization.resource.ThresholdPolicy": "threshold", + "onap.policies.optimization.resource.AggregationPolicy": "aggregation" } @@ -233,8 +233,16 @@ def gen_hpa_policy(vnf_list, hpa_policy): def gen_threshold_policy(vnf_list, threshold_policy): cur_policies, related_policies = gen_policy_instance(vnf_list, threshold_policy, rtype=None) for p_new, p_main in zip(cur_policies, related_policies): - pmz = p_main[list(p_main.keys())[0]]['properties']['thresholdProperty'] - p_new[p_main[list(p_main.keys())[0]]['properties']['identity']]['properties'] = pmz + pmz = p_main[list(p_main.keys())[0]]['properties']['thresholdProperties'] + p_new[p_main[list(p_main.keys())[0]]['properties']['identity']]['properties'] = {'evaluate': pmz} + return cur_policies + + +def gen_aggregation_policy(vnf_list, cross_policy): + cur_policies, related_policies = gen_policy_instance(vnf_list, cross_policy, rtype=None) + for p_new, p_main in zip(cur_policies, related_policies): + pmz = p_main[list(p_main.keys())[0]]['properties']['aggregationProperties'] + p_new[p_main[list(p_main.keys())[0]]['properties']['identity']]['properties'] = {'evaluate': pmz} return cur_policies @@ -281,15 +289,6 @@ def get_demand_properties(demand, policies): prop.update({'unique': policy_property['unique']} if 'unique' in policy_property and policy_property['unique'] else {}) prop['filtering_attributes'] = dict() - prop['filtering_attributes'].update({'global-customer-id': policy_property['customerId']} - if 'customerId' in policy_property and policy_property['customerId'] else {}) - prop['filtering_attributes'].update({'model-invariant-id': demand['resourceModelInfo']['modelInvariantId']} - if demand['resourceModelInfo']['modelInvariantId'] else {}) - prop['filtering_attributes'].update({'model-version-id': demand['resourceModelInfo']['modelVersionId']} - if demand['resourceModelInfo']['modelVersionId'] else {}) - prop['filtering_attributes'].update({'equipment-role': policy_property['equipmentRole']} - if 'equipmentRole' in policy_property and policy_property['equipmentRole'] else {}) - if policy_property.get('attributes'): for attr_key, attr_val in policy_property['attributes'].items(): update_converted_attribute(attr_key, attr_val, prop, 'filtering_attributes') @@ -298,6 +297,15 @@ def get_demand_properties(demand, policies): for attr_key, attr_val in policy_property['passthroughAttributes'].items(): update_converted_attribute(attr_key, attr_val, prop, 'passthrough_attributes') + prop['filtering_attributes'].update({'global-customer-id': policy_property['customerId']} + if 'customerId' in policy_property and policy_property['customerId'] else {}) + prop['filtering_attributes'].update({'model-invariant-id': demand['resourceModelInfo']['modelInvariantId']} + if 'modelInvariantId' in demand['resourceModelInfo'] and demand['resourceModelInfo']['modelInvariantId'] else {}) + prop['filtering_attributes'].update({'model-version-id': demand['resourceModelInfo']['modelVersionId']} + if 'modelVersionId' in demand['resourceModelInfo'] and demand['resourceModelInfo']['modelVersionId'] else {}) + prop['filtering_attributes'].update({'equipment-role': policy_property['equipmentRole']} + if 'equipmentRole' in policy_property and policy_property['equipmentRole'] else {}) + prop.update(get_candidates_demands(demand)) demand_properties.append(prop) return demand_properties -- cgit 1.2.3-korg