From 80aa17c01f6907199e43b3790c206f7e367d7c78 Mon Sep 17 00:00:00 2001 From: boucherv Date: Thu, 24 Dec 2015 14:57:50 +0100 Subject: Update orchestrator (cloudify) version from 3.2 to 3.3 FUNCTEST-121 Change-Id: I05de60dae213e2f2b3ba272917dc70ca03e5fe90 Signed-off-by: boucherv --- testcases/vIMS/CI/vIMS.py | 389 ++++++++++++++++++++++------------------------ 1 file changed, 187 insertions(+), 202 deletions(-) (limited to 'testcases/vIMS/CI/vIMS.py') diff --git a/testcases/vIMS/CI/vIMS.py b/testcases/vIMS/CI/vIMS.py index 772e070b..12fb775a 100644 --- a/testcases/vIMS/CI/vIMS.py +++ b/testcases/vIMS/CI/vIMS.py @@ -18,6 +18,9 @@ import glanceclient.client as glclient import novaclient.client as nvclient from neutronclient.v2_0 import client as ntclient +from orchestrator import * +from clearwater import * + import urllib pp = pprint.PrettyPrinter(indent=4) @@ -29,7 +32,6 @@ parser.add_argument("-r", "--report", action="store_true") args = parser.parse_args() - """ logging configuration """ logger = logging.getLogger('vIMS') logger.setLevel(logging.DEBUG) @@ -50,7 +52,7 @@ if not os.path.exists(REPO_PATH): sys.path.append(REPO_PATH + "testcases/") import functest_utils -with open(REPO_PATH + "testcases/config_functest.yaml") as f: +with open( REPO_PATH + "testcases/config_functest.yaml") as f: functest_yaml = yaml.safe_load(f) f.close() @@ -62,27 +64,21 @@ TEST_DB = functest_yaml.get("results").get("test_db_url") TENANT_NAME = functest_yaml.get("vIMS").get("general").get("tenant_name") TENANT_DESCRIPTION = functest_yaml.get("vIMS").get("general").get("tenant_description") -BASE_IMAGE_URL = functest_yaml.get("vIMS").get("general").get("base_image_url") -BASE_IMAGE_NAME = functest_yaml.get("vIMS").get("general").get("base_image_name") -GLANCE_IMAGE_NAME = functest_yaml.get("vIMS").get("cloudify").get("inputs").get("image_id") +IMAGES = functest_yaml.get("vIMS").get("general").get("images") CFY_MANAGER_BLUEPRINT = functest_yaml.get("vIMS").get("cloudify").get("blueprint") +CFY_MANAGER_REQUIERMENTS = functest_yaml.get("vIMS").get("cloudify").get("requierments") CFY_INPUTS = functest_yaml.get("vIMS").get("cloudify").get("inputs") -CFY_INPUTS_PATH = functest_yaml.get("vIMS").get("cloudify").get("inputs_path") CW_BLUEPRINT = functest_yaml.get("vIMS").get("clearwater").get("blueprint") CW_DEPLOYMENT_NAME = functest_yaml.get("vIMS").get("clearwater").get("deployment-name") CW_INPUTS = functest_yaml.get("vIMS").get("clearwater").get("inputs") -CW_DOMAIN_NAME = functest_yaml.get("vIMS").get("clearwater").get("inputs").get("public_domain") +CW_REQUIERMENTS = functest_yaml.get("vIMS").get("clearwater").get("requierments") CFY_DEPLOYMENT_DURATION = 0 CW_DEPLOYMENT_DURATION = 0 -def pMsg(value): - """pretty printing""" - pp.pprint(value) - def download_and_add_image_on_glance(glance, image_name, image_url): dest_path = VIMS_DATA_DIR + "tmp/" if not os.path.exists(dest_path): @@ -99,16 +95,78 @@ def download_and_add_image_on_glance(glance, image_name, image_url): return image -def download_blueprints(blueprint_url, branch, dest_path): - if os.path.exists(dest_path): - shutil.rmtree(dest_path) +def test_clearwater(): + + time.sleep(180) + + script = "source " + VIMS_DATA_DIR + "venv_cloudify/bin/activate; " + script += "cd " + VIMS_DATA_DIR + "; " + script += "cfy deployments outputs -d " + CW_DEPLOYMENT_NAME + " | grep Value: | sed \"s/ *Value: //g\";" + cmd = "/bin/bash -c '" + script + "'" + try: - Repo.clone_from(blueprint_url, dest_path, branch=branch) - return True + logger.debug("Trying to get clearwater nameserver IP ... ") + dns_ip = os.popen(cmd).read() + dns_ip = dns_ip.splitlines()[0] except: - return False + logger.error("Unable to retrieve the IP of the DNS server !") + + start_time_ts = time.time() + end_time_ts = start_time_ts + logger.info("vIMS functional test Start Time:'%s'" % ( + datetime.datetime.fromtimestamp(start_time_ts).strftime( + '%Y-%m-%d %H:%M:%S'))) + + if dns_ip != "": + script = 'echo -e "nameserver ' + dns_ip + '\nnameserver 8.8.8.8\nnameserver 8.8.4.4" > /etc/resolv.conf; ' + script += 'source /etc/profile.d/rvm.sh; ' + script += 'cd ' + VIMS_TEST_DIR + '; ' + script += 'rake test[' + CW_INPUTS["public_domain"] + '] SIGNUP_CODE="secret"' + + cmd = "/bin/bash -c '" + script + "'" + output_file = "output.txt" + f = open(output_file, 'w+') + p = subprocess.call(cmd, shell=True, stdout=f, stderr=subprocess.STDOUT) + f.close() + end_time_ts = time.time() + duration = round(end_time_ts - start_time_ts, 1) + logger.info("vIMS functional test duration:'%s'" %duration) + f = open(output_file, 'r') + result = f.read() + if result != "" and logger: + logger.debug(result) + + vims_test_result="" + try: + logger.debug("Trying to load test results") + with open(VIMS_TEST_DIR + "temp.json") as f: + vims_test_result = json.load(f) + f.close() + except: + logger.error("Unable to retrieve test results") + + if vims_test_result != "": + if args.report: + logger.debug("Push result into DB") + logger.debug("Pushing results to DB....") + git_version = functest_utils.get_git_branch(args.repo_path) + functest_utils.push_results_to_db(db_url=TEST_DB, case_name="vIMS", + logger=logger, pod_name="opnfv-jump-2", git_version=git_version, + payload={'orchestrator':{'duration': CFY_DEPLOYMENT_DURATION, + 'result': ""}, + 'vIMS': {'duration': CW_DEPLOYMENT_DURATION, + 'result': ""}, + 'sig_test': {'duration': duration, + 'result': vims_test_result}}) + try: + os.remove(VIMS_TEST_DIR + "temp.json") + except: + logger.error("Deleting file failed") + +def main(): + + ################ GENERAL INITIALISATION ################ -def initialize_deployments(): if not os.path.exists(VIMS_DATA_DIR): os.makedirs(VIMS_DATA_DIR) @@ -156,58 +214,78 @@ def initialize_deployments(): "project_id": TENANT_NAME, }) - logger.info("Upload ubuntu image if it doesn't exist") + logger.info("Upload some OS images if it doesn't exist") glance_endpoint = keystone.service_catalog.url_for(service_type='image', endpoint_type='publicURL') glance = glclient.Client(1, glance_endpoint, token=keystone.auth_token) - image_id = functest_utils.get_image_id(glance, BASE_IMAGE_NAME) - if image_id == '': - logger.info("""%s image doesn't exist on glance repository. - Try downloading this image and upload on glance !""" %BASE_IMAGE_NAME) - image_id = download_and_add_image_on_glance(glance, BASE_IMAGE_NAME, BASE_IMAGE_URL) + for img in IMAGES.keys(): + image_name = IMAGES[img]['image_name'] + image_url = IMAGES[img]['image_url'] - if image_id == '': - logger.error("Error : Failed to find or upload required OS image for this deployment" %flavor_name) + image_id = functest_utils.get_image_id(glance, image_name) + + if image_id == '': + logger.info("""%s image doesn't exist on glance repository. + Try downloading this image and upload on glance !""" %image_name) + image_id = download_and_add_image_on_glance(glance, image_name, image_url) + + if image_id == '': + logger.error("Error : Failed to find or upload required OS image for this deployment") + exit(-1) + + nova = nvclient.Client("2", **nv_creds) + + logger.info("Update security group quota for this tenant") + neutron = ntclient.Client(**nt_creds) + if not functest_utils.update_sg_quota(neutron, tenant_id, 50, 100): + logger.error("Failed to update security group quota for tenant %s" %TENANT_NAME) exit(-1) - logger.info("Collect flavor id for cloudify and clearwater VMs") + + ################ CLOUDIFY INITIALISATION ################ + + cfy = orchestrator(VIMS_DATA_DIR, CFY_INPUTS, logger) + + cfy.set_credentials(username=ks_creds['username'], password=ks_creds['password'], tenant_name=ks_creds['tenant_name'], auth_url=ks_creds['auth_url']) + + logger.info("Collect flavor id for cloudify manager server") nova = nvclient.Client("2", **nv_creds) - flavor_name = "m1.small" + flavor_name = "m1.medium" flavor_id = functest_utils.get_flavor_id(nova, flavor_name) + for requirement in CFY_MANAGER_REQUIERMENTS: + if requirement == 'ram_min': + flavor_id = functest_utils.get_flavor_id_by_ram_range(nova, CFY_MANAGER_REQUIERMENTS['ram_min'], 8196) + if flavor_id == '': - logger.error("Failed to find %s flavor. Try with ram range requirement !" %flavor_name) - flavor_id = get_flavor_id_by_ram_range(nova, 1792, 2048) + logger.error("Failed to find %s flavor. Try with ram range default requirement !" %flavor_name) + flavor_id = functest_utils.get_flavor_id_by_ram_range(nova, 4000, 8196) if flavor_id == '': logger.error("Failed to find required flavor for this deployment" %flavor_name) exit(-1) - logger.info("Update security group quota for this tenant") - neutron = ntclient.Client(**nt_creds) - if not functest_utils.update_sg_quota(neutron, tenant_id, 50, 100): - logger.error("Failed to update security group quota for tenant %s" %TENANT_NAME) + cfy.set_flavor_id(flavor_id) + + image_name = "centos_7" + image_id = functest_utils.get_image_id(glance, image_name) + for requirement in CFY_MANAGER_REQUIERMENTS: + if requirement == 'os_image': + image_id = functest_utils.get_image_id(glance, CFY_MANAGER_REQUIERMENTS['os_image']) + + if image_id == '': + logger.error("Error : Failed to find required OS image for cloudify manager") exit(-1) + cfy.set_image_id(image_id) + ext_net = functest_utils.get_external_net(neutron) if not ext_net: logger.error("Failed to get external network") exit(-1) - logger.info("Update inputs informations") - CFY_INPUTS['image_id'] = image_id - CFY_INPUTS['flavor_id'] = flavor_id - CFY_INPUTS['external_network_name'] = ext_net - - CW_INPUTS['image_id'] = image_id - CW_INPUTS['flavor_id'] = flavor_id - CW_INPUTS['external_network_name'] = ext_net - - CFY_INPUTS['keystone_username'] = ks_creds['username'] - CFY_INPUTS['keystone_password'] = ks_creds['password'] - CFY_INPUTS['keystone_url'] = ks_creds['auth_url'] - CFY_INPUTS['keystone_tenant_name'] = ks_creds['tenant_name'] + cfy.set_external_network_name(ext_net) logger.info("Prepare virtualenv for cloudify-cli") cmd = "chmod +x " + VIMS_DIR + "create_venv.sh" @@ -215,94 +293,65 @@ def initialize_deployments(): cmd = VIMS_DIR + "create_venv.sh " + VIMS_DATA_DIR functest_utils.execute_command(cmd,logger) -def cleanup_deployments(): - ks_creds = functest_utils.get_credentials("keystone") - - keystone = ksclient.Client(**ks_creds) - - logger.info("Removing %s tenant .." %CFY_INPUTS['keystone_tenant_name']) - tenant_id = functest_utils.get_tenant_id(keystone, CFY_INPUTS['keystone_tenant_name']) - if tenant_id == '': - logger.error("Error : Failed to get id of %s tenant" %CFY_INPUTS['keystone_tenant_name']) - else: - if not functest_utils.delete_tenant(keystone, tenant_id): - logger.error("Error : Failed to remove %s tenant" %CFY_INPUTS['keystone_tenant_name']) - - logger.info("Removing %s user .." %CFY_INPUTS['keystone_username']) - user_id = functest_utils.get_user_id(keystone, CFY_INPUTS['keystone_username']) - if user_id == '': - logger.error("Error : Failed to get id of %s user" %CFY_INPUTS['keystone_username']) - else: - if not functest_utils.delete_user(keystone, user_id): - logger.error("Error : Failed to remove %s user" %CFY_INPUTS['keystone_username']) - -def deploy_cloudify_manager(): - - logger.info("Downloading the cloudify manager server blueprint") - download_result = download_blueprints(CFY_MANAGER_BLUEPRINT['url'], - CFY_MANAGER_BLUEPRINT['branch'], - VIMS_DATA_DIR + 'cloudify-manager-blueprint/') - - if not download_result: - logger.error("Failed to download manager blueprint") - exit(-1) - - logger.info("Writing the inputs file") - with open( VIMS_DATA_DIR + 'cloudify-manager-blueprint/' + CFY_INPUTS_PATH, "w") as f: - f.write(yaml.dump(CFY_INPUTS, default_style='"') ) - f.close() + cfy.download_manager_blueprint(CFY_MANAGER_BLUEPRINT['url'], CFY_MANAGER_BLUEPRINT['branch']) + ################ CLOUDIFY DEPLOYMENT ################ start_time_ts = time.time() end_time_ts = start_time_ts logger.info("Cloudify deployment Start Time:'%s'" % ( datetime.datetime.fromtimestamp(start_time_ts).strftime( '%Y-%m-%d %H:%M:%S'))) - logger.info("Launching the cloudify-manager deployment") - script = "source " + VIMS_DATA_DIR + "venv_cloudify/bin/activate; " - script += "cd " + VIMS_DATA_DIR + "; " - script += "cfy init -r; " - script += "cd cloudify-manager-blueprint/openstack; " - script += "cfy local create-requirements -o requirements.txt -p openstack-manager-blueprint.yaml; " - script += "pip install -r requirements.txt; " - script += "cfy bootstrap --install-plugins -p openstack-manager-blueprint.yaml -i inputs.yaml; " - cmd = "/bin/bash -c '" + script + "'" - functest_utils.execute_command(cmd, logger) - - logger.info("Cloudify-manager server is UP !") + cfy.deploy_manager() global CFY_DEPLOYMENT_DURATION end_time_ts = time.time() CFY_DEPLOYMENT_DURATION = round(end_time_ts - start_time_ts, 1) logger.info("Cloudify deployment duration:'%s'" %CFY_DEPLOYMENT_DURATION) -def undeploy_cloudify_manager(): + ################ CLEARWATER INITIALISATION ################ - logger.info("Launching the cloudify-manager undeployment") - script = "source " + VIMS_DATA_DIR + "venv_cloudify/bin/activate; " - script += "cd " + VIMS_DATA_DIR + "; " - script += "cfy teardown -f; " - cmd = "/bin/bash -c '" + script + "'" - functest_utils.execute_command(cmd, logger) + cw = clearwater(CW_INPUTS, cfy, logger) + + logger.info("Collect flavor id for all clearwater vm") + nova = nvclient.Client("2", **nv_creds) - logger.info("Cloudify-manager server has been successfully removed!") + flavor_name = "m1.small" + flavor_id = functest_utils.get_flavor_id(nova, flavor_name) + for requirement in CW_REQUIERMENTS: + if requirement == 'ram_min': + flavor_id = functest_utils.get_flavor_id_by_ram_range(nova, CW_REQUIERMENTS['ram_min'], 8196) -def deploy_clearwater(): + if flavor_id == '': + logger.error("Failed to find %s flavor. Try with ram range default requirement !" %flavor_name) + flavor_id = functest_utils.get_flavor_id_by_ram_range(nova, 4000, 8196) + + if flavor_id == '': + logger.error("Failed to find required flavor for this deployment" %flavor_name) + exit(-1) + + cw.set_flavor_id(flavor_id) + + image_name = "ubuntu_14.04" + image_id = functest_utils.get_image_id(glance, image_name) + for requirement in CW_REQUIERMENTS: + if requirement == 'os_image': + image_id = functest_utils.get_image_id(glance, CW_REQUIERMENTS['os_image']) + + if image_id == '': + logger.error("Error : Failed to find required OS image for cloudify manager") + exit(-1) - logger.info("Downloading the {0} blueprint".format(CW_BLUEPRINT['file_name'])) - download_result = download_blueprints(CW_BLUEPRINT['url'], CW_BLUEPRINT['branch'], - VIMS_DATA_DIR + CW_BLUEPRINT['destination_folder']) + cw.set_image_id(image_id) - if not download_result: - logger.error("Failed to download blueprint {0}".format(CW_BLUEPRINT['file_name'])) + ext_net = functest_utils.get_external_net(neutron) + if not ext_net: + logger.error("Failed to get external network") exit(-1) - logger.info("Writing the inputs file") - with open(VIMS_DATA_DIR + CW_BLUEPRINT['destination_folder'] + "/inputs.yaml", "w") as f: - f.write(yaml.dump(CW_INPUTS, default_style='"') ) - f.close() + cw.set_external_network_name(ext_net) - time.sleep(30) + ################ CLEARWATER DEPLOYMENT ################ start_time_ts = time.time() end_time_ts = start_time_ts @@ -310,111 +359,47 @@ def deploy_clearwater(): datetime.datetime.fromtimestamp(start_time_ts).strftime( '%Y-%m-%d %H:%M:%S'))) - logger.info("Launching the {0} deployment".format(CW_BLUEPRINT['name'])) - script = "source " + VIMS_DATA_DIR + "venv_cloudify/bin/activate; " - script += "cd " + VIMS_DATA_DIR + CW_BLUEPRINT['destination_folder'] + "; " - script += "cfy blueprints upload -b " + CW_BLUEPRINT['name'] + " -p openstack-blueprint.yaml; " - script += "cfy deployments create -b " + CW_BLUEPRINT['name'] + " -d " + CW_DEPLOYMENT_NAME + " --inputs inputs.yaml; " - script += "cfy executions start -w install -d " + CW_DEPLOYMENT_NAME + " --timeout 1800; " - - cmd = "/bin/bash -c '" + script + "'" - functest_utils.execute_command(cmd, logger) - - logger.info("Clearwater vIMS is UP !") + cw.deploy_vnf(CW_BLUEPRINT) global CW_DEPLOYMENT_DURATION end_time_ts = time.time() CW_DEPLOYMENT_DURATION = round(end_time_ts - start_time_ts, 1) logger.info("vIMS VNF deployment duration:'%s'" %CW_DEPLOYMENT_DURATION) -def undeploy_clearwater(): - - logger.info("Launching the {0} undeployment".format(CW_BLUEPRINT['name'])) - script = "source " + VIMS_DATA_DIR + "venv_cloudify/bin/activate; " - script += "cd " + VIMS_DATA_DIR + "; " - script += "cfy executions start -w uninstall -d " + CW_DEPLOYMENT_NAME + " --timeout 1800 ; " - script += "cfy deployments delete -d " + CW_DEPLOYMENT_NAME + "; " - - cmd = "/bin/bash -c '" + script + "'" - functest_utils.execute_command(cmd, logger) - -def test_clearwater(): + ################ CLEARWATER TEST ################ - time.sleep(180) + test_clearwater() - script = "source " + VIMS_DATA_DIR + "venv_cloudify/bin/activate; " - script += "cd " + VIMS_DATA_DIR + "; " - script += "cfy deployments outputs -d " + CW_DEPLOYMENT_NAME + " | grep Value: | sed \"s/ *Value: //g\";" - cmd = "/bin/bash -c '" + script + "'" + ########### CLEARWATER UNDEPLOYMENT ############ - try: - logger.debug("Trying to get clearwater nameserver IP ... ") - dns_ip = os.popen(cmd).read() - dns_ip = dns_ip.splitlines()[0] - except: - logger.error("Unable to retrieve the IP of the DNS server !") + cw.undeploy_vnf() - start_time_ts = time.time() - end_time_ts = start_time_ts - logger.info("vIMS functional test Start Time:'%s'" % ( - datetime.datetime.fromtimestamp(start_time_ts).strftime( - '%Y-%m-%d %H:%M:%S'))) + ############ CLOUDIFY UNDEPLOYMENT ############# - if dns_ip != "": - script = 'echo -e "nameserver ' + dns_ip + '\nnameserver 8.8.8.8\nnameserver 8.8.4.4" > /etc/resolv.conf; ' - script += 'source /etc/profile.d/rvm.sh; ' - script += 'cd ' + VIMS_TEST_DIR + '; ' - script += 'rake test[' + CW_INPUTS["public_domain"] + '] SIGNUP_CODE="secret"' + cfy.undeploy_manager() - cmd = "/bin/bash -c '" + script + "'" - output_file = "output.txt" - f = open(output_file, 'w+') - p = subprocess.call(cmd, shell=True, stdout=f, stderr=subprocess.STDOUT) - f.close() - end_time_ts = time.time() - duration = round(end_time_ts - start_time_ts, 1) - logger.info("vIMS functional test duration:'%s'" %duration) - f = open(output_file, 'r') - result = f.read() - if result != "" and logger: - logger.debug(result) + ############### GENERAL CLEANUP ################ - vims_test_result="" - try: - logger.debug("Trying to load test results") - with open(VIMS_TEST_DIR + "temp.json") as f: - vims_test_result = json.load(f) - f.close() - except: - logger.error("Unable to retrieve test results") + ks_creds = functest_utils.get_credentials("keystone") - if vims_test_result != "" & args.report: - logger.debug("Push result into DB") - logger.debug("Pushing results to DB....") - git_version = functest_utils.get_git_branch(REPO_PATH) - functest_utils.push_results_to_db(db_url=TEST_DB, case_name="vIMS", - logger=logger, pod_name="opnfv-jump-2", git_version=git_version, - payload={'orchestrator':{'duration': CFY_DEPLOYMENT_DURATION, - 'result': ""}, - 'vIMS': {'duration': CW_DEPLOYMENT_DURATION, - 'result': ""}, - 'sig_test': {'duration': duration, - 'result': vims_test_result}}) - try: - os.remove(VIMS_TEST_DIR + "temp.json") - except: - logger.error("Deleting file failed") + keystone = ksclient.Client(**ks_creds) -def main(): - initialize_deployments() - deploy_cloudify_manager() - deploy_clearwater() + logger.info("Removing %s tenant .." %CFY_INPUTS['keystone_tenant_name']) + tenant_id = functest_utils.get_tenant_id(keystone, CFY_INPUTS['keystone_tenant_name']) + if tenant_id == '': + logger.error("Error : Failed to get id of %s tenant" %CFY_INPUTS['keystone_tenant_name']) + else: + if not functest_utils.delete_tenant(keystone, tenant_id): + logger.error("Error : Failed to remove %s tenant" %CFY_INPUTS['keystone_tenant_name']) - test_clearwater() + logger.info("Removing %s user .." %CFY_INPUTS['keystone_username']) + user_id = functest_utils.get_user_id(keystone, CFY_INPUTS['keystone_username']) + if user_id == '': + logger.error("Error : Failed to get id of %s user" %CFY_INPUTS['keystone_username']) + else: + if not functest_utils.delete_user(keystone, user_id): + logger.error("Error : Failed to remove %s user" %CFY_INPUTS['keystone_username']) - undeploy_clearwater() - undeploy_cloudify_manager() - cleanup_deployments() if __name__ == '__main__': main() -- cgit 1.2.3-korg