2 ##############################################################################
3 # Copyright (c) 2016 Huawei Technologies Co.,Ltd and others.
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
19 #------------------------------------------------------
20 # parser for configuration files in each test case
21 # ------------------------------------------------------
22 parser = argparse.ArgumentParser()
23 parser.add_argument("-c", "--conf",
24 help="configuration files for the testcase, in yaml format",
25 default="rubbos_1-1-1.yaml")
26 args = parser.parse_args()
28 #--------------------------------------------------
29 # logging configuration
30 #--------------------------------------------------
31 logger = logging.getLogger('run_rubbos')
32 logger.setLevel(logging.DEBUG)
34 def _get_keystone_client():
35 keystone_client = keystoneclient.v2_0.client.Client(
36 auth_url=os.environ.get('OS_AUTH_URL'),
37 username=os.environ.get('OS_USERNAME'),
38 password=os.environ.get('OS_PASSWORD'),
39 tenant_name=os.environ.get('OS_TENANT_NAME'),
40 cacert=os.environ.get('OS_CACERT'))
41 return keystone_client
43 def _get_heat_client():
44 keystone = _get_keystone_client()
45 heat_endpoint = keystone.service_catalog.url_for(service_type='orchestration')
46 heat_client = heatclient.client.Client('1', endpoint=heat_endpoint, token=keystone.auth_token)
50 def _get_glance_client():
51 keystone = _get_keystone_client()
52 glance_endpoint = keystone.service_catalog.url_for(service_type='image',
53 endpoint_type='publicURL')
54 return glanceclient.v2.client.Client(glance_endpoint, token=keystone.auth_token)
56 def _get_nova_client():
57 nova_client = novaclient.client.Client("2", auth_url=os.environ.get('OS_AUTH_URL'),
58 username=os.environ.get('OS_USERNAME'),
59 password=os.environ.get('OS_PASSWORD'),
60 tenant_name=os.environ.get('OS_TENANT_NAME'),
61 region_name=os.environ.get('OS_REGION_NAME'),
62 cacert=os.environ.get('OS_CACERT'))
65 def download_url(url, dest_path):
67 Download a file to a destination path given a URL
69 name = url.rsplit('/')[-1]
70 dest = dest_path + "/" + name
72 response = urllib2.urlopen(url)
73 except (urllib2.HTTPError, urllib2.URLError):
76 with open(dest, 'wb') as f:
77 shutil.copyfileobj(response, f)
80 def rubbos_env_prepare(template=None):
81 """ Prepare for rubbos running env
83 #logger.info("generate heat template for the testcase based on template '%s'." % template)
86 def rubbos_env_cleanup():
87 glance = _get_glance_client()
88 heat = _get_heat_client()
89 nova = _get_nova_client()
91 for stack in self.heat.stacks.list():
92 heat.stacks.delete(stack.id)
94 for image in self.glance.images.list():
95 glance.images.delete(image.id)
97 for keypair in self.nova.keypairs.list():
98 nova.keypairs.delete(keypair.id)
100 for flavor in self.nova.flavors.list():
101 nova.flavors.delete(flavor.id)
103 logger.info("openstack env cleanup")
105 def rubbos_load_image(name=None):
107 download_url(image_url,file_url)
109 glance = _get_glance_client()
110 image_args = {'name': name,
111 'disk-format': 'qcow2',
112 'container_format': 'bare',
113 'file': '/tmp/bottlenecks-trusty-server.img'}
114 image = glance.images.create(**image_args)
116 logger.error("failed to upload rubbos image to openstack")
119 def rubbos_create_instance(template_file=None, rubbos_parameters=None):
120 heat = _get_heat_client()
121 template = open(template_file, 'r')
122 rubbos_stack = heat.stacks.create(stack_name='rubbos', template=template.read(), parameters=rubbos_parameters)
123 uid = rubbos_stack['stack']['id']
125 def rubbos_stack_check(stack_name=None):
126 for stack in heat.stacks.list():
127 if stack.stack_name == stack_name:
128 return stack.stack_status
138 image_url = 'http://artifacts.opnfv.org/bottlenecks/rubbos/bottlenecks-trusty-server.img'
141 logger.error("configuration files are not set for testcase")
144 Heat_template = args.conf
146 parameters={'image': 'rubbos',
147 'key_name': 'rubbos-key',
148 'public_net': 'net04_ext'}
150 rubbos_env_prepare(Heat_template)
152 rubbos_load_image(name='rubbos')
153 rubbos_create_instance(template_file=Heat_template, rubbos_paramters=parameters)
155 rubbos_stack_check(stack_name='rubbos')
159 if __name__=='__main__':