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 ##############################################################################
18 #------------------------------------------------------
19 # parser for configuration files in each test case
20 # ------------------------------------------------------
21 parser = argparse.ArgumentParser()
22 parser.add_argument("-c", "--conf",
23 help="configuration files for the testcase, in yaml format",
24 default="rubbos_1-1-1.yaml")
25 args = parser.parse_args()
27 #--------------------------------------------------
28 # logging configuration
29 #--------------------------------------------------
30 logger = logging.getLogger('run_rubbos')
31 logger.setLevel(logging.DEBUG)
33 def _get_keystone_client():
34 keystone_client = keystoneclient.v2_0.client.Client(
35 auth_url=os.environ.get('OS_AUTH_URL'),
36 username=os.environ.get('OS_USERNAME'),
37 password=os.environ.get('OS_PASSWORD'),
38 tenant_name=os.environ.get('OS_TENANT_NAME'),
39 cacert=os.environ.get('OS_CACERT'))
40 return keystone_client
42 def _get_heat_client():
43 keystone = _get_keystone_client()
44 heat_endpoint = keystone.service_catalog.url_for(service_type='orchestration')
45 heat_client = heatclient.client.Client('1', endpoint=heat_endpoint, token=keystone.auth_token)
49 def _get_glance_client():
50 keystone = _get_keystone_client()
51 glance_endpoint = keystone.service_catalog.url_for(service_type='image',
52 endpoint_type='publicURL')
53 return glanceclient.v2.client.Client(glance_endpoint, token=keystone.auth_token)
55 def _get_nova_client():
56 nova_client = novaclient.client.Client("2", auth_url=os.environ.get('OS_AUTH_URL'),
57 username=os.environ.get('OS_USERNAME'),
58 password=os.environ.get('OS_PASSWORD'),
59 tenant_name=os.environ.get('OS_TENANT_NAME'),
60 region_name=os.environ.get('OS_REGION_NAME'),
61 cacert=os.environ.get('OS_CACERT'))
64 def download_url(url, dest_path):
66 Download a file to a destination path given a URL
68 name = url.rsplit('/')[-1]
69 dest = dest_path + "/" + name
71 response = urllib2.urlopen(url)
72 except (urllib2.HTTPError, urllib2.URLError):
75 with open(dest, 'wb') as f:
76 shutil.copyfileobj(response, f)
79 def rubbos_env_prepare(template=None):
80 """ Prepare for rubbos running env
82 #logger.info("generate heat template for the testcase based on template '%s'." % template)
85 def rubbos_env_cleanup():
86 glance = _get_glance_client()
87 heat = _get_heat_client()
88 nova = _get_nova_client()
90 for stack in self.heat.stacks.list():
91 heat.stacks.delete(stack.id)
93 for image in self.glance.images.list():
94 glance.images.delete(image.id)
96 for keypair in self.nova.keypairs.list():
97 nova.keypairs.delete(keypair.id)
99 for flavor in self.nova.flavors.list():
100 nova.flavors.delete(flavor.id)
102 logger.info("openstack env cleanup")
104 def rubbos_load_image(name=None):
106 download_url(image_url,file_url)
108 glance = _get_glance_client()
109 image_args = {'name': name,
110 'disk-format': 'qcow2',
111 'container_format': 'bare',
112 'file': '/tmp/bottlenecks-trusty-server.img'}
113 image = glance.images.create(**image_args)
115 logger.error("failed to upload rubbos image to openstack")
118 def rubbos_create_instance(template_file=None, rubbos_parameters=None):
119 heat = _get_heat_client()
120 template = open(template_file, 'r')
121 rubbos_stack = heat.stacks.create(stack_name='rubbos', template=template.read(), parameters=rubbos_parameters)
122 uid = rubbos_stack['stack']['id']
124 def rubbos_stack_check(stack_name=None):
125 for stack in heat.stacks.list():
126 if stack.stack_name == stack_name:
127 return stack.stack_status
137 image_url = 'http://artifacts.opnfv.org/bottlenecks/rubbos/bottlenecks-trusty-server.img'
140 logger.error("configuration files are not set for testcase")
143 Heat_template = args.conf
145 parameters={'image': 'rubbos',
146 'key_name': 'rubbos-key',
147 'public_net': 'net04_ext'}
149 rubbos_env_prepare(Heat_template)
151 rubbos_load_image(name='rubbos')
152 rubbos_create_instance(template_file=Heat_template, rubbos_paramters=parameters)
154 rubbos_stack_check(stack_name='rubbos')
158 if __name__=='__main__':