summaryrefslogtreecommitdiffstats
path: root/optimizers/placementopt/conductor/api_builder.py
diff options
context:
space:
mode:
authorAnkitkumar Patel <ankit@research.att.com>2018-02-11 17:51:13 -0500
committerAnkitkumar Patel <ankit@research.att.com>2018-02-11 17:52:51 -0500
commit0b855c08fd98fb8fa0f4bc40d8df430c897b4bad (patch)
treeefdd3c7ab31be64080dd71951a64d13f0ba493de /optimizers/placementopt/conductor/api_builder.py
parentbb8471cae394aa6ff0af8ba3e5354f3b121c56fc (diff)
Re-org folders, onboard test folder, test config
Reorganized the folder structure. Onboarded testcases. Added test config. Issue-ID: OPTFRA-74 Change-Id: I97882a162a405a18ffd287495039e15ae9d0ad7b Signed-off-by: Ankitkumar Patel <ankit@research.att.com>
Diffstat (limited to 'optimizers/placementopt/conductor/api_builder.py')
-rw-r--r--optimizers/placementopt/conductor/api_builder.py121
1 files changed, 0 insertions, 121 deletions
diff --git a/optimizers/placementopt/conductor/api_builder.py b/optimizers/placementopt/conductor/api_builder.py
deleted file mode 100644
index c0281fe..0000000
--- a/optimizers/placementopt/conductor/api_builder.py
+++ /dev/null
@@ -1,121 +0,0 @@
-# -------------------------------------------------------------------------
-# Copyright (c) 2015-2017 AT&T Intellectual Property
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# -------------------------------------------------------------------------
-#
-
-import copy
-import json
-from osdf.utils import data_mapping
-from jinja2 import Template
-from osdf.utils.programming_utils import list_flatten, dot_notation
-import osdf.optimizers.placementopt.conductor.translation as tr
-from osdf.adapters.policy.utils import group_policies
-
-
-def conductor_api_builder(request_json, flat_policies: list, local_config, prov_status,
- template="templates/conductor_interface.json"):
- """Build a SNIRO southbound API call for Conductor/Placement optimization
- :param request_json: parameter data received from a client
- :param flat_policies: policy data received from the policy platform (flat policies)
- :param template: template to generate southbound API call to conductor
- :param local_config: local configuration file with pointers for the service specific information
- :param prov_status: provStatus retrieved from Subscriber policy
- :return: json to be sent to Conductor/placement optimization
- """
- templ = Template(open(template).read())
- gp = group_policies(flat_policies)
- demand_vnf_name_list = []
-
- for placementDemand in request_json['placementInfo']['demandInfo']['placementDemand']:
- demand_vnf_name_list.append(placementDemand['resourceModuleName'])
-
- demand_list = tr.gen_demands(request_json['placementInfo']['demandInfo'], 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(
- demand_vnf_name_list, gp['distance_to_location'])
- inventory_policy_list = tr.gen_inventory_group_policy(demand_vnf_name_list, gp['inventory_group'])
- resource_instance_policy_list = tr.gen_resource_instance_policy(
- 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'])
- reservation_policy_list = tr.gen_reservation_policy(demand_vnf_name_list, gp['instance_reservation'])
- conductor_policies = [attribute_policy_list, distance_to_location_policy_list, inventory_policy_list,
- resource_instance_policy_list, resource_region_policy_list, zone_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']
- model_name = request_json['placementInfo']['serviceModelInfo']['modelName']
- service_type = data_mapping.get_service_type(model_name)
- service_info = local_config.get('service_info', {}).get(service_type, {})
- if 'orderInfo' in request_json["placementInfo"]:
- order_info = json.loads(request_json["placementInfo"]["orderInfo"])
- request_type = req_info.get('requestType', None)
- subs_com_site_id = ""
- if 'subscriberInfo' in request_json['placementInfo']:
- subs_com_site_id = request_json['placementInfo']['subscriberInfo'].get('subscriberCommonSiteId', "")
- if service_type == 'vCPE':
- data_mapping.normalize_user_params(order_info)
- 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,
- name=req_info['requestId'],
- timeout=req_info['timeout'],
- limit=req_info['numSolutions'],
- serviceType=service_type,
- serviceInstance=request_json['placementInfo']['serviceInstanceId'],
- provStatus = prov_status,
- chosenRegion=order_info['requestParameters']['lcpCloudRegionId'],
- json=json)
- elif service_type == 'UNKNOWN':
- rendered_req = templ.render(
- requestType=request_type,
- chosenComplex=subs_com_site_id,
- demand_list=demand_list,
- policy_groups=policy_groups,
- reservation_groups=reservation_groups,
- optimization_policies=optimization_policy_list,
- name=req_info['requestId'],
- timeout=req_info['timeout'],
- limit=req_info['numSolutions'],
- serviceType=service_type,
- serviceInstance=request_json['placementInfo']['serviceInstanceId'],
- provStatus = prov_status,
- # process order data
- bandwidth=dot_notation(order_info, service_info['bandwidth']),
- bandwidth_unit=dot_notation(order_info, service_info['bandwidth_units']),
- json=json)
- json_payload = json.dumps(json.loads(rendered_req)) # need this because template's JSON is ugly!
- return json_payload
-
-
-def retrieve_node(req_json, reference):
- """
- Get the child node(s) from the dot-notation [reference] and parent [req_json].
- For placement and other requests, there are encoded JSONs inside the request or policy,
- so we need to expand it and then do a search over the parent plus expanded JSON.
- """
- req_json_copy = copy.deepcopy(req_json) # since we expand the JSON in place, we work on a copy
- if 'orderInfo' in req_json_copy['placementInfo']:
- req_json_copy['placementInfo']['orderInfo'] = json.loads(req_json_copy['placementInfo']['orderInfo'])
- info = dot_notation(req_json_copy, reference)
- return list_flatten(info) if isinstance(info, list) else info
-