X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=test%2Fvcpe%2Fpreload.py;h=f4aafbe8eb61f76cbd1dde43b363f346204a629f;hb=refs%2Fheads%2Fmaster;hp=c4efafde610dffaeaeeffca8ab36f1cc6014d18d;hpb=7469b0d68f5021eaba4770f5f30d0b7cda006d37;p=integration.git diff --git a/test/vcpe/preload.py b/test/vcpe/preload.py index c4efafde6..62c036c83 100755 --- a/test/vcpe/preload.py +++ b/test/vcpe/preload.py @@ -1,10 +1,9 @@ -#! /usr/bin/python +#!/usr/bin/env python import requests import json import sys from datetime import datetime -from vcpecommon import * import csar_parser import logging import base64 @@ -13,6 +12,7 @@ import base64 class Preload: def __init__(self, vcpecommon): self.logger = logging.getLogger(__name__) + self.logger.setLevel(logging.DEBUG) self.vcpecommon = vcpecommon def replace(self, sz, replace_dict): @@ -26,14 +26,14 @@ class Preload: with open(template_file) as json_input: json_data = json.load(json_input) stk = [json_data] - while len(stk) > 0: + while stk: data = stk.pop() for k, v in data.items(): if type(v) is dict: stk.append(v) elif type(v) is list: stk.extend(v) - elif type(v) is str or type(v) is unicode: + elif type(v) is str or type(v) is unicode: # pylint: disable=E0602 if self.vcpecommon.template_variable_symbol in v: data[k] = self.replace(v, replace_dict) else: @@ -46,7 +46,7 @@ class Preload: if 2 != r.status_code / 100: self.logger.debug(r.content) self.logger.error('Clearing SNIRO date failed.') - sys.exit() + sys.exit(1) def preload_sniro(self, template_sniro_data, template_sniro_request, tunnelxconn_ar_name, vgw_name, vbrg_ar_name, vgmux_svc_instance_uuid, vbrg_svc_instance_uuid): @@ -75,7 +75,7 @@ class Preload: response = r.json() self.logger.debug(json.dumps(response, indent=4, sort_keys=True)) self.logger.error('SNIRO preloading failed.') - sys.exit() + sys.exit(1) return True @@ -100,12 +100,17 @@ class Preload: '${subnet_gateway}': subnet_gateway } self.logger.info('Preloading network ' + network_role) - return self.preload(template_file, replace_dict, self.vcpecommon.sdnc_preload_network_url) + self.logger.info('template_file:' + template_file) + if 'networkgra' in template_file: + return self.preload(template_file, replace_dict, self.vcpecommon.sdnc_preload_network_gra_url) + else: + return self.preload(template_file, replace_dict, self.vcpecommon.sdnc_preload_network_url) def preload(self, template_file, replace_dict, url): + self.logger.debug('tempalte_file:'+ template_file) json_data = self.generate_json(template_file, replace_dict) self.logger.debug(json.dumps(json_data, indent=4, sort_keys=True)) - r = requests.post(url, headers=self.vcpecommon.sdnc_headers, auth=self.vcpecommon.sdnc_userpass, json=json_data) + r = requests.post(url, headers=self.vcpecommon.sdnc_headers, auth=self.vcpecommon.sdnc_userpass, json=json_data, verify=False) response = r.json() if int(response.get('output', {}).get('response-code', 0)) != 200: self.logger.debug(json.dumps(response, indent=4, sort_keys=True)) @@ -121,7 +126,16 @@ class Preload: self.logger.info('Preloading vGW') return self.preload(template_file, replace_dict, self.vcpecommon.sdnc_preload_vnf_url) - def preload_vfmodule(self, template_file, service_instance_id, vnf_model, vfmodule_model, common_dict, name_suffix): + def preload_vgw_gra(self, template_file, brg_mac, commont_dict, name_suffix, vgw_vfmod_name_index): + replace_dict = {'${brg_mac}': brg_mac, + '${suffix}': name_suffix, + '${vgw_vfmod_name_index}': vgw_vfmod_name_index + } + replace_dict.update(commont_dict) + self.logger.info('Preloading vGW-GRA') + return self.preload(template_file, replace_dict, self.vcpecommon.sdnc_preload_gra_url) + + def preload_vfmodule(self, template_file, service_instance_id, vnf_model, vfmodule_model, common_dict, name_suffix , gra_api_flag): """ :param template_file: :param service_instance_id: @@ -145,10 +159,16 @@ class Preload: '${service_type}': service_instance_id, '${generic_vnf_name}': vnf_model['modelCustomizationName'], '${vnf_name}': vfmodule_name, + '${mr_ip_addr}': self.vcpecommon.mr_ip_addr, + '${mr_ip_port}': self.vcpecommon.mr_ip_port, + '${sdnc_oam_ip}': self.vcpecommon.sdnc_oam_ip, '${suffix}': name_suffix} replace_dict.update(common_dict) self.logger.info('Preloading VF Module ' + vfmodule_name) - return self.preload(template_file, replace_dict, self.vcpecommon.sdnc_preload_vnf_url) + if gra_api_flag: + return self.preload(template_file, replace_dict, self.vcpecommon.sdnc_preload_gra_url) + else: + return self.preload(template_file, replace_dict, self.vcpecommon.sdnc_preload_vnf_url) def preload_all_networks(self, template_file, name_suffix): common_dict = {'${' + k + '}': v for k, v in self.vcpecommon.common_preload_config.items()} @@ -159,11 +179,90 @@ class Preload: return None return common_dict + def aai_region_query(self, req_method, json=None, verify=False): + """ + Perform actual AAI API request for region + :param req_method: request method ({'get','put'}) + :param json: Json payload + :param verify: SSL verify mode + :return: + """ + url, headers, auth = (self.vcpecommon.aai_region_query_url, + self.vcpecommon.aai_headers, + self.vcpecommon.aai_userpass) + try: + if req_method == 'get': + request = requests.get(url, headers=headers, auth=auth, + verify=verify) + elif req_method == 'put': + request = requests.put(url, headers=headers, auth=auth, + verify=verify, json=json) + else: + raise requests.exceptions.RequestException + except requests.exceptions.RequestException as e: + self.logger.error("Error connecting to AAI API. Error details: " + str(e.message)) + return False + try: + assert request.status_code == 200 + except AssertionError: + self.logger.error('AAI request failed. API returned http code ' + str(request.status_code)) + return False + try: + return request.json() + except ValueError as e: + if req_method == 'get': + self.logger.error('Unable to parse AAI response: ' + e.message) + return False + elif req_method == 'put': + return request.ok + else: + return False + + def preload_aai_data(self, template_aai_region_data): + """ + Update aai region data with identity-url + :param template_aai_region_data: path to region data template + :return: + """ + request = self.aai_region_query('get') + if request: + # Check if identity-url already updated (for idempotency) + self.logger.debug("Regiond data acquired from AAI:\n" + json.dumps(request,indent=4)) + try: + assert request['identity-url'] + except KeyError: + pass + else: + self.logger.info('Identity-url already present in {0} data, not updating'.format(self.vcpecommon.cloud['--os-region-name'])) + return + + # Get resource_version and relationship_list from region data + resource_version = request['resource-version'] + relationship_list = request['relationship-list'] + + replace_dict = {'${identity-url}': self.vcpecommon.cloud['--os-auth-url'], + '${identity_api_version}': self.vcpecommon.cloud['--os-identity-api-version'], + '${region_name}': self.vcpecommon.cloud['--os-region-name'], + '${resource_version}': resource_version + } + json_data = self.generate_json(template_aai_region_data, replace_dict) + json_data['relationship-list'] = relationship_list + self.logger.debug('Region update payload:\n' + json.dumps(json_data,indent=4)) + else: + sys.exit(1) + + # Update region data + request = self.aai_region_query('put', json_data) + if request: + self.logger.info('Successully updated identity-url in {0} ' + 'region'.format(self.vcpecommon.cloud['--os-region-name'])) + else: + sys.exit(1) + def test(self): # this is for testing purpose name_suffix = datetime.now().strftime('%Y%m%d%H%M') - vcpecommon = VcpeCommon() - preloader = Preload(vcpecommon) + preloader = Preload(self.vcpecommon) network_dict = {'${' + k + '}': v for k, v in self.vcpecommon.common_preload_config.items()} template_file = 'preload_templates/template.network.json' @@ -178,14 +277,21 @@ class Preload: keys = ['infra', 'bng', 'gmux', 'brg'] for key in keys: + key_vnf= key + "_" + key_gra = key + "gra_" csar_file = self.vcpecommon.find_file(key, 'csar', 'csar') - template_file = self.vcpecommon.find_file(key, 'json', 'preload_templates') - if csar_file and template_file: + template_file = self.vcpecommon.find_file(key_vnf, 'json', 'preload_templates') + template_file_gra = self.vcpecommon.find_file(key_gra, 'json', 'preload_templates') + if csar_file and template_file and template_file_gra: parser = csar_parser.CsarParser() parser.parse_csar(csar_file) service_instance_id = 'test112233' + # preload both VNF-API and GRA-API preloader.preload_vfmodule(template_file, service_instance_id, parser.vnf_models[0], - parser.vfmodule_models[0], network_dict, name_suffix) + parser.vfmodule_models[0], network_dict, name_suffix, False) + preloader.preload_vfmodule(template_file_gra, service_instance_id, parser.vnf_models[0], + parser.vfmodule_models[0], network_dict, name_suffix, True) + def test_sniro(self): template_sniro_data = self.vcpecommon.find_file('sniro_data', 'json', 'preload_templates') @@ -207,7 +313,7 @@ class Preload: if not (tunnelxconn_ar_name and brg_ar_name and vgw_name): self.logger.error('Cannot find all names from %s.', vcperescust_csar) - sys.exit() + sys.exit(1) vgmux_svc_instance_uuid = '88888888888888' vbrg_svc_instance_uuid = '999999999999999'