blob: f884baa3e717b30400af389988ebd4a7a1538d2b [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Jay Pipes3f981df2012-03-27 18:59:44 -04002# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Dirk Muellere746fc22013-06-29 16:29:29 +020016from __future__ import print_function
17
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +090018import logging as std_logging
Jay Pipes7f757632011-12-02 15:53:32 -050019import os
Jay Pipes3f981df2012-03-27 18:59:44 -040020
Doug Hellmann583ce2c2015-03-11 14:55:46 +000021from oslo_config import cfg
Matthew Treinish90aedd12013-02-25 17:56:49 -050022
Doug Hellmann583ce2c2015-03-11 14:55:46 +000023from oslo_log import log as logging
Jay Pipes7f757632011-12-02 15:53:32 -050024
Daryl Walleck1465d612011-11-02 02:22:15 -050025
DennyZhang88a2dd82013-10-07 12:55:35 -050026def register_opt_group(conf, opt_group, options):
27 conf.register_group(opt_group)
28 for opt in options:
29 conf.register_opt(opt, group=opt_group.name)
30
31
Matthew Treinishc791ac42014-07-16 09:15:23 -040032auth_group = cfg.OptGroup(name='auth',
33 title="Options for authentication and credentials")
34
35
36AuthGroup = [
37 cfg.StrOpt('test_accounts_file',
38 default='etc/accounts.yaml',
39 help="Path to the yaml file that contains the list of "
40 "credentials to use for running tests"),
Andrea Frittoli8283b4e2014-07-17 13:28:58 +010041 cfg.BoolOpt('allow_tenant_isolation',
Attila Fazekas5dda1582015-02-18 17:16:02 +010042 default=True,
Andrea Frittoli8283b4e2014-07-17 13:28:58 +010043 help="Allows test cases to create/destroy tenants and "
44 "users. This option requires that OpenStack Identity "
45 "API admin credentials are known. If false, isolated "
46 "test cases and parallel execution, can still be "
47 "achieved configuring a list of test accounts",
48 deprecated_opts=[cfg.DeprecatedOpt('allow_tenant_isolation',
49 group='compute'),
50 cfg.DeprecatedOpt('allow_tenant_isolation',
51 group='orchestration')]),
52 cfg.BoolOpt('locking_credentials_provider',
53 default=False,
54 help="If set to True it enables the Accounts provider, "
55 "which locks credentials to allow for parallel execution "
56 "with pre-provisioned accounts. It can only be used to "
57 "run tests that ensure credentials cleanup happens. "
58 "It requires at least `2 * CONC` distinct accounts "
59 "configured in `test_accounts_file`, with CONC == the "
60 "number of concurrent test processes."),
Matthew Treinish167b2be2015-01-15 17:20:27 -050061 cfg.ListOpt('tempest_roles',
62 help="Roles to assign to all users created by tempest",
Andrea Frittolic3280152015-02-26 12:42:34 +000063 default=[]),
64 cfg.StrOpt('tenant_isolation_domain_name',
65 default=None,
66 help="Only applicable when identity.auth_version is v3."
67 "Domain within which isolated credentials are provisioned."
68 "The default \"None\" means that the domain from the"
69 "admin user is used instead.")
Matthew Treinishc791ac42014-07-16 09:15:23 -040070]
71
Matthew Treinish39e48ef2012-12-21 13:36:15 -050072identity_group = cfg.OptGroup(name='identity',
73 title="Keystone Configuration Options")
Daryl Walleck1465d612011-11-02 02:22:15 -050074
Matthew Treinish39e48ef2012-12-21 13:36:15 -050075IdentityGroup = [
76 cfg.StrOpt('catalog_type',
77 default='identity',
78 help="Catalog type of the Identity service."),
Jay Pipescd8eaec2013-01-16 21:03:48 -050079 cfg.BoolOpt('disable_ssl_certificate_validation',
80 default=False,
81 help="Set to True if using self-signed SSL certificates."),
Rob Crittendena7db6692014-11-23 18:44:38 -050082 cfg.StrOpt('ca_certificates_file',
83 default=None,
84 help='Specify a CA bundle file to use in verifying a '
85 'TLS (https) server certificate.'),
Jay Pipes7c88eb22013-01-16 21:32:43 -050086 cfg.StrOpt('uri',
Brant Knudsonc7ca3342013-03-28 21:08:50 -050087 help="Full URI of the OpenStack Identity API (Keystone), v2"),
88 cfg.StrOpt('uri_v3',
89 help='Full URI of the OpenStack Identity API (Keystone), v3'),
Andrea Frittoli8bbdb162014-01-06 11:06:13 +000090 cfg.StrOpt('auth_version',
91 default='v2',
92 help="Identity API version to be used for authentication "
Andrea Frittoli77f9da42014-02-06 11:18:19 +000093 "for API tests."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -050094 cfg.StrOpt('region',
Attila Fazekascadcb1f2013-01-21 23:10:53 +010095 default='RegionOne',
Arata Notsu8f440392013-09-13 16:14:20 +090096 help="The identity region name to use. Also used as the other "
97 "services' region name unless they are set explicitly. "
98 "If no such region is found in the service catalog, the "
99 "first found one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000100 cfg.StrOpt('endpoint_type',
101 default='publicURL',
102 choices=['public', 'admin', 'internal',
103 'publicURL', 'adminURL', 'internalURL'],
104 help="The endpoint type to use for the identity service."),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100105 cfg.StrOpt('username',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100106 help="Username to use for Nova API requests."),
107 cfg.StrOpt('tenant_name',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100108 help="Tenant name to use for Nova API requests."),
Russell Sim7f894a52013-09-13 10:35:21 +1000109 cfg.StrOpt('admin_role',
110 default='admin',
111 help="Role required to administrate keystone."),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100112 cfg.StrOpt('password',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100113 help="API key to use when authenticating.",
114 secret=True),
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100115 cfg.StrOpt('domain_name',
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100116 help="Domain name for authentication (Keystone V3)."
117 "The same domain applies to user and project"),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100118 cfg.StrOpt('alt_username',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100119 help="Username of alternate user to use for Nova API "
120 "requests."),
121 cfg.StrOpt('alt_tenant_name',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100122 help="Alternate user's Tenant name to use for Nova API "
123 "requests."),
124 cfg.StrOpt('alt_password',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100125 help="API key to use when authenticating as alternate user.",
126 secret=True),
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100127 cfg.StrOpt('alt_domain_name',
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100128 help="Alternate domain name for authentication (Keystone V3)."
129 "The same domain applies to user and project"),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100130 cfg.StrOpt('admin_username',
Dirk Mueller14bd5622014-01-14 19:33:05 +0100131 help="Administrative Username to use for "
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100132 "Keystone API requests."),
133 cfg.StrOpt('admin_tenant_name',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100134 help="Administrative Tenant name to use for Keystone API "
135 "requests."),
136 cfg.StrOpt('admin_password',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100137 help="API key to use when authenticating as admin.",
138 secret=True),
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100139 cfg.StrOpt('admin_domain_name',
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100140 help="Admin domain name for authentication (Keystone V3)."
141 "The same domain applies to user and project"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500142]
Jay Pipes3f981df2012-03-27 18:59:44 -0400143
Matthew Treinishd5021a72014-01-09 18:42:51 +0000144identity_feature_group = cfg.OptGroup(name='identity-feature-enabled',
145 title='Enabled Identity Features')
146
147IdentityFeatureGroup = [
148 cfg.BoolOpt('trust',
149 default=True,
150 help='Does the identity service have delegation and '
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000151 'impersonation enabled'),
152 cfg.BoolOpt('api_v2',
153 default=True,
154 help='Is the v2 identity API enabled'),
155 cfg.BoolOpt('api_v3',
156 default=True,
157 help='Is the v3 identity API enabled'),
Matthew Treinishd5021a72014-01-09 18:42:51 +0000158]
159
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500160compute_group = cfg.OptGroup(name='compute',
161 title='Compute Service Options')
Rohit Karajgie1b050d2011-12-02 16:13:18 -0800162
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500163ComputeGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500164 cfg.StrOpt('image_ref',
Matthew Treinishafcb6b42014-05-27 13:50:02 -0400165 help="Valid primary image reference to be used in tests. "
166 "This is a required option"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500167 cfg.StrOpt('image_ref_alt',
Matthew Treinishafcb6b42014-05-27 13:50:02 -0400168 help="Valid secondary image reference to be used in tests. "
169 "This is a required option, but if only one image is "
170 "available duplicate the value of image_ref above"),
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +0900171 cfg.StrOpt('flavor_ref',
172 default="1",
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500173 help="Valid primary flavor to use in tests."),
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +0900174 cfg.StrOpt('flavor_ref_alt',
175 default="2",
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500176 help='Valid secondary flavor to be used in tests.'),
Maru Newbyaf292e82013-05-20 21:32:28 +0000177 cfg.StrOpt('image_ssh_user',
178 default="root",
179 help="User name used to authenticate to an instance."),
Ryan Hsucb2e1252013-09-03 21:44:49 -0700180 cfg.StrOpt('image_ssh_password',
181 default="password",
182 help="Password used to authenticate to an instance."),
Maru Newbyaf292e82013-05-20 21:32:28 +0000183 cfg.StrOpt('image_alt_ssh_user',
184 default="root",
185 help="User name used to authenticate to an instance using "
186 "the alternate image."),
Ryan Hsucb2e1252013-09-03 21:44:49 -0700187 cfg.StrOpt('image_alt_ssh_password',
188 default="password",
189 help="Password used to authenticate to an instance using "
190 "the alternate image."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500191 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400192 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500193 help="Time in seconds between build status checks."),
194 cfg.IntOpt('build_timeout',
195 default=300,
Hugh Saunders5b139ad2014-12-15 09:08:41 +0000196 help="Timeout in seconds to wait for an instance to build. "
197 "Other services that do not define build_timeout will "
Lucian Petrut1cfe2982015-01-06 13:57:36 +0200198 "inherit this value."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500199 cfg.BoolOpt('run_ssh',
200 default=False,
Derek Higgins85cd5142013-12-17 17:10:11 +0000201 help="Should the tests ssh to instances?"),
Attila Fazekas423834d2014-03-14 17:33:13 +0100202 cfg.StrOpt('ssh_auth_method',
203 default='keypair',
204 help="Auth method used for authenticate to the instance. "
205 "Valid choices are: keypair, configured, adminpass. "
206 "keypair: start the servers with an ssh keypair. "
207 "configured: use the configured user and password. "
208 "adminpass: use the injected adminPass. "
209 "disabled: avoid using ssh when it is an option."),
210 cfg.StrOpt('ssh_connect_method',
211 default='fixed',
212 help="How to connect to the instance? "
213 "fixed: using the first ip belongs the fixed network "
214 "floating: creating and using a floating ip"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500215 cfg.StrOpt('ssh_user',
216 default='root',
217 help="User name used to authenticate to an instance."),
Nachi Ueno6d580be2013-07-24 10:58:11 -0700218 cfg.IntOpt('ping_timeout',
Darragh O'Reilly6b636672014-01-24 12:17:40 +0000219 default=120,
Nachi Ueno6d580be2013-07-24 10:58:11 -0700220 help="Timeout in seconds to wait for ping to "
221 "succeed."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500222 cfg.IntOpt('ssh_timeout',
223 default=300,
Chris Yeoh76916042013-02-27 16:25:25 +1030224 help="Timeout in seconds to wait for authentication to "
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500225 "succeed."),
Attila Fazekas0abbc952013-07-01 19:19:42 +0200226 cfg.IntOpt('ready_wait',
227 default=0,
DennyZhang8912d012013-09-25 18:08:34 -0500228 help="Additional wait time for clean state, when there is "
229 "no OS-EXT-STS extension available"),
Chris Yeoh76916042013-02-27 16:25:25 +1030230 cfg.IntOpt('ssh_channel_timeout',
231 default=60,
232 help="Timeout in seconds to wait for output from ssh "
233 "channel."),
Attila Fazekasb0661652013-05-08 13:01:36 +0200234 cfg.StrOpt('fixed_network_name',
Chris Hoge8f1401b2014-11-19 14:00:37 -0800235 help="Name of the fixed network that is visible to all test "
Matthew Treinish03feae02015-03-27 10:25:45 -0400236 "tenants. If multiple networks are available for a tenant"
237 " this is the network which will be used for creating "
238 "servers if tempest does not create a network or a "
239 "network is not specified elsewhere"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500240 cfg.StrOpt('network_for_ssh',
241 default='public',
Chris Hoge8f1401b2014-11-19 14:00:37 -0800242 help="Network used for SSH connections. Ignored if "
243 "use_floatingip_for_ssh=true or run_ssh=false."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500244 cfg.IntOpt('ip_version_for_ssh',
245 default=4,
246 help="IP version used for SSH connections."),
fujioka yuuichia11994e2013-07-09 11:19:51 +0900247 cfg.BoolOpt('use_floatingip_for_ssh',
248 default=True,
Tushar Kalra95a482d2014-03-25 14:24:43 -0700249 help="Does SSH use Floating IPs?"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500250 cfg.StrOpt('catalog_type',
251 default='compute',
252 help="Catalog type of the Compute service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900253 cfg.StrOpt('region',
254 default='',
255 help="The compute region name to use. If empty, the value "
256 "of identity.region is used instead. If no such region "
257 "is found in the service catalog, the first found one is "
258 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000259 cfg.StrOpt('endpoint_type',
260 default='publicURL',
261 choices=['public', 'admin', 'internal',
262 'publicURL', 'adminURL', 'internalURL'],
263 help="The endpoint type to use for the compute service."),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100264 cfg.StrOpt('path_to_private_key',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100265 help="Path to a private key file for SSH access to remote "
266 "hosts"),
Ryan Hsucb2e1252013-09-03 21:44:49 -0700267 cfg.StrOpt('volume_device_name',
268 default='vdb',
269 help="Expected device name when a volume is attached to "
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900270 "an instance"),
271 cfg.IntOpt('shelved_offload_time',
272 default=0,
273 help='Time in seconds before a shelved instance is eligible '
274 'for removing from a host. -1 never offload, 0 offload '
275 'when shelved. This time should be the same as the time '
276 'of nova.conf, and some tests will run for as long as the '
Ghanshyam06a5b4a2014-04-11 17:32:45 +0900277 'time.'),
278 cfg.StrOpt('floating_ip_range',
279 default='10.0.0.0/29',
280 help='Unallocated floating IP range, which will be used to '
Chris Hoge8f1401b2014-11-19 14:00:37 -0800281 'test the floating IP bulk feature for CRUD operation. '
282 'This block must not overlap an existing floating IP '
283 'pool.')
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500284]
Rohit Karajgie1b050d2011-12-02 16:13:18 -0800285
Matthew Treinishd5c96022013-10-17 21:51:23 +0000286compute_features_group = cfg.OptGroup(name='compute-feature-enabled',
287 title="Enabled Compute Service Features")
288
289ComputeFeaturesGroup = [
290 cfg.BoolOpt('disk_config',
291 default=True,
292 help="If false, skip disk config tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000293 cfg.ListOpt('api_extensions',
294 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800295 help='A list of enabled compute extensions with a special '
Ken'ichi Ohmichia7e68712014-05-06 10:47:26 +0900296 'entry all which indicates every extension is enabled. '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300297 'Each extension should be specified with alias name. '
298 'Empty list indicates all extensions are disabled'),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000299 cfg.BoolOpt('change_password',
300 default=False,
301 help="Does the test environment support changing the admin "
302 "password?"),
Adam Gandelmanc6eefb42014-07-15 16:44:08 -0700303 cfg.BoolOpt('console_output',
304 default=True,
305 help="Does the test environment support obtaining instance "
306 "serial console output?"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000307 cfg.BoolOpt('resize',
308 default=False,
309 help="Does the test environment support resizing?"),
Eric Windischb5538072014-03-09 23:47:35 -0400310 cfg.BoolOpt('pause',
311 default=True,
312 help="Does the test environment support pausing?"),
David Shrewsbury25f666f2014-07-22 12:17:59 -0400313 cfg.BoolOpt('shelve',
314 default=True,
315 help="Does the test environment support shelving/unshelving?"),
Eric Windischaeb7e842014-03-10 01:10:50 -0400316 cfg.BoolOpt('suspend',
317 default=True,
318 help="Does the test environment support suspend/resume?"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000319 cfg.BoolOpt('live_migration',
Joe Gordon31a139a2014-11-17 16:39:04 -0800320 default=True,
Matthew Treinishd5c96022013-10-17 21:51:23 +0000321 help="Does the test environment support live migration "
322 "available?"),
323 cfg.BoolOpt('block_migration_for_live_migration',
324 default=False,
325 help="Does the test environment use block devices for live "
326 "migration"),
327 cfg.BoolOpt('block_migrate_cinder_iscsi',
328 default=False,
329 help="Does the test environment block migration support "
Ghanshyam Mann41c17572014-02-27 18:52:56 +0900330 "cinder iSCSI volumes"),
331 cfg.BoolOpt('vnc_console',
332 default=False,
333 help='Enable VNC console. This configuration value should '
Ghanshyam70876d02014-03-11 11:40:18 +0900334 'be same as [nova.vnc]->vnc_enabled in nova.conf'),
335 cfg.BoolOpt('spice_console',
336 default=False,
337 help='Enable Spice console. This configuration value should '
338 'be same as [nova.spice]->enabled in nova.conf'),
339 cfg.BoolOpt('rdp_console',
340 default=False,
341 help='Enable RDP console. This configuration value should '
Adam Gandelman2e37b4f2014-06-18 17:34:21 -0700342 'be same as [nova.rdp]->enabled in nova.conf'),
343 cfg.BoolOpt('rescue',
344 default=True,
345 help='Does the test environment support instance rescue '
Ghanshyam9c2e50d2014-07-22 21:32:05 +0900346 'mode?'),
347 cfg.BoolOpt('enable_instance_password',
348 default=True,
349 help='Enables returning of the instance password by the '
350 'relevant server API calls such as create, rebuild '
Adam Gandelman7186f7a2014-07-23 09:28:56 -0400351 'or rescue.'),
352 cfg.BoolOpt('interface_attach',
353 default=True,
354 help='Does the test environment support dynamic network '
Adam Gandelmanfbc95ac2014-06-19 17:33:43 -0700355 'interface attachment?'),
356 cfg.BoolOpt('snapshot',
357 default=True,
358 help='Does the test environment support creating snapshot '
Matthew Treinishdfd7ac02015-02-09 17:47:31 -0500359 'images of running instances?'),
360 cfg.BoolOpt('ec2_api',
361 default=True,
Matt Riedemann17940732015-03-13 14:18:19 +0000362 help='Does the test environment have the ec2 api running?'),
363 # TODO(mriedem): Remove preserve_ports once juno-eol happens.
364 cfg.BoolOpt('preserve_ports',
365 default=False,
366 help='Does Nova preserve preexisting ports from Neutron '
367 'when deleting an instance? This should be set to True '
368 'if testing Kilo+ Nova.')
Matthew Treinishd5c96022013-10-17 21:51:23 +0000369]
370
371
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500372image_group = cfg.OptGroup(name='image',
373 title="Image Service Options")
Jay Pipesf38eaac2012-06-21 13:37:35 -0400374
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500375ImageGroup = [
Matthew Treinish72ea4422013-02-07 14:42:49 -0500376 cfg.StrOpt('catalog_type',
377 default='image',
Sean Dague83401992013-05-06 17:46:36 -0400378 help='Catalog type of the Image service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900379 cfg.StrOpt('region',
380 default='',
381 help="The image region name to use. If empty, the value "
382 "of identity.region is used instead. If no such region "
383 "is found in the service catalog, the first found one is "
384 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000385 cfg.StrOpt('endpoint_type',
386 default='publicURL',
387 choices=['public', 'admin', 'internal',
388 'publicURL', 'adminURL', 'internalURL'],
389 help="The endpoint type to use for the image service."),
Sean Dague83401992013-05-06 17:46:36 -0400390 cfg.StrOpt('http_image',
391 default='http://download.cirros-cloud.net/0.3.1/'
392 'cirros-0.3.1-x86_64-uec.tar.gz',
Lucian Petrut1cfe2982015-01-06 13:57:36 +0200393 help='http accessible image'),
394 cfg.IntOpt('build_timeout',
395 default=300,
396 help="Timeout in seconds to wait for an image to "
397 "become available."),
398 cfg.IntOpt('build_interval',
399 default=1,
400 help="Time in seconds between image operation status "
401 "checks.")
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500402]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400403
Matthew Treinish2b5287d2013-10-22 17:40:34 +0000404image_feature_group = cfg.OptGroup(name='image-feature-enabled',
405 title='Enabled image service features')
406
407ImageFeaturesGroup = [
408 cfg.BoolOpt('api_v2',
409 default=True,
410 help="Is the v2 image API enabled"),
411 cfg.BoolOpt('api_v1',
412 default=True,
413 help="Is the v1 image API enabled"),
414]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400415
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500416network_group = cfg.OptGroup(name='network',
417 title='Network Service Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600418
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500419NetworkGroup = [
420 cfg.StrOpt('catalog_type',
421 default='network',
Mark McClainf2982e82013-07-06 17:48:03 -0400422 help='Catalog type of the Neutron service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900423 cfg.StrOpt('region',
424 default='',
425 help="The network region name to use. If empty, the value "
426 "of identity.region is used instead. If no such region "
427 "is found in the service catalog, the first found one is "
428 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000429 cfg.StrOpt('endpoint_type',
430 default='publicURL',
431 choices=['public', 'admin', 'internal',
432 'publicURL', 'adminURL', 'internalURL'],
433 help="The endpoint type to use for the network service."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500434 cfg.StrOpt('tenant_network_cidr',
435 default="10.100.0.0/16",
Henry Gessauffda37a2014-01-16 11:17:55 -0500436 help="The cidr block to allocate tenant ipv4 subnets from"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500437 cfg.IntOpt('tenant_network_mask_bits',
Attila Fazekas8ea181b2013-07-13 16:26:14 +0200438 default=28,
Henry Gessauffda37a2014-01-16 11:17:55 -0500439 help="The mask bits for tenant ipv4 subnets"),
440 cfg.StrOpt('tenant_network_v6_cidr',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400441 default="2003::/48",
Henry Gessauffda37a2014-01-16 11:17:55 -0500442 help="The cidr block to allocate tenant ipv6 subnets from"),
443 cfg.IntOpt('tenant_network_v6_mask_bits',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400444 default=64,
Henry Gessauffda37a2014-01-16 11:17:55 -0500445 help="The mask bits for tenant ipv6 subnets"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500446 cfg.BoolOpt('tenant_networks_reachable',
447 default=False,
448 help="Whether tenant network connectivity should be "
449 "evaluated directly"),
450 cfg.StrOpt('public_network_id',
451 default="",
452 help="Id of the public network that provides external "
453 "connectivity"),
454 cfg.StrOpt('public_router_id',
455 default="",
456 help="Id of the public router that provides external "
Yair Fried1eb27f52014-11-10 15:24:19 +0200457 "connectivity. This should only be used when Neutron's "
458 "'allow_overlapping_ips' is set to 'False' in "
459 "neutron.conf. usually not needed past 'Grizzly' release"),
izikpensod9a01a62014-02-17 20:02:32 +0200460 cfg.IntOpt('build_timeout',
461 default=300,
462 help="Timeout in seconds to wait for network operation to "
463 "complete."),
464 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400465 default=1,
izikpensod9a01a62014-02-17 20:02:32 +0200466 help="Time in seconds between network operation status "
467 "checks."),
Attila Fazekas640392b2014-06-12 15:58:10 +0200468 cfg.ListOpt('dns_servers',
469 default=["8.8.8.8", "8.8.4.4"],
Itzik Brown5be44582014-12-24 09:05:13 +0200470 help="List of dns servers which should be used"
Itzik Brown2ca01cd2014-12-08 12:58:20 +0200471 " for subnet creation"),
472 cfg.StrOpt('port_vnic_type',
473 choices=[None, 'normal', 'direct', 'macvtap'],
474 help="vnic_type to use when Launching instances"
475 " with pre-configured ports."
476 " Supported ports are:"
477 " ['normal','direct','macvtap']"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500478]
Jay Pipes3f981df2012-03-27 18:59:44 -0400479
Matthew Treinishe3d26142013-11-26 19:14:58 +0000480network_feature_group = cfg.OptGroup(name='network-feature-enabled',
481 title='Enabled network service features')
482
483NetworkFeaturesGroup = [
Matthew Treinishe2e33cf2014-03-03 19:28:41 +0000484 cfg.BoolOpt('ipv6',
485 default=True,
486 help="Allow the execution of IPv6 tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000487 cfg.ListOpt('api_extensions',
488 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800489 help='A list of enabled network extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300490 'entry all which indicates every extension is enabled. '
491 'Empty list indicates all extensions are disabled'),
Sean M. Collinsdd27a4d2014-05-13 10:33:15 -0400492 cfg.BoolOpt('ipv6_subnet_attributes',
493 default=False,
494 help="Allow the execution of IPv6 subnet tests that use "
495 "the extended IPv6 attributes ipv6_ra_mode "
496 "and ipv6_address_mode"
Mark McClain6e07c0d2014-10-10 11:25:03 -0400497 ),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000498]
499
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300500messaging_group = cfg.OptGroup(name='messaging',
501 title='Messaging Service')
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500502
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300503MessagingGroup = [
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500504 cfg.StrOpt('catalog_type',
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300505 default='messaging',
506 help='Catalog type of the Messaging service.'),
Jorge Chai83ba4ee2014-04-15 18:58:08 +0000507 cfg.IntOpt('max_queues_per_page',
508 default=20,
509 help='The maximum number of queue records per page when '
510 'listing queues'),
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400511 cfg.IntOpt('max_queue_metadata',
512 default=65536,
513 help='The maximum metadata size for a queue'),
514 cfg.IntOpt('max_messages_per_page',
515 default=20,
516 help='The maximum number of queue message per page when '
517 'listing (or) posting messages'),
518 cfg.IntOpt('max_message_size',
519 default=262144,
520 help='The maximum size of a message body'),
521 cfg.IntOpt('max_messages_per_claim',
522 default=20,
523 help='The maximum number of messages per claim'),
524 cfg.IntOpt('max_message_ttl',
525 default=1209600,
526 help='The maximum ttl for a message'),
527 cfg.IntOpt('max_claim_ttl',
528 default=43200,
529 help='The maximum ttl for a claim'),
530 cfg.IntOpt('max_claim_grace',
531 default=43200,
532 help='The maximum grace period for a claim'),
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500533]
534
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500535volume_group = cfg.OptGroup(name='volume',
536 title='Block Storage Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600537
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500538VolumeGroup = [
539 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400540 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500541 help='Time in seconds between volume availability checks.'),
542 cfg.IntOpt('build_timeout',
543 default=300,
Eric Harney9b1f89c2014-10-14 14:40:19 -0400544 help='Timeout in seconds to wait for a volume to become '
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500545 'available.'),
546 cfg.StrOpt('catalog_type',
Matthew Treinisheb724512013-10-25 15:12:59 +0000547 default='volume',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500548 help="Catalog type of the Volume Service"),
Arata Notsu8f440392013-09-13 16:14:20 +0900549 cfg.StrOpt('region',
550 default='',
551 help="The volume region name to use. If empty, the value "
552 "of identity.region is used instead. If no such region "
553 "is found in the service catalog, the first found one is "
554 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000555 cfg.StrOpt('endpoint_type',
556 default='publicURL',
557 choices=['public', 'admin', 'internal',
558 'publicURL', 'adminURL', 'internalURL'],
559 help="The endpoint type to use for the volume service."),
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100560 cfg.StrOpt('backend1_name',
Giulio Fidentef4fa8942013-05-28 18:48:03 +0200561 default='BACKEND_1',
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100562 help="Name of the backend1 (must be declared in cinder.conf)"),
563 cfg.StrOpt('backend2_name',
Giulio Fidentef4fa8942013-05-28 18:48:03 +0200564 default='BACKEND_2',
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100565 help="Name of the backend2 (must be declared in cinder.conf)"),
Adam Gandelman827ad332013-06-24 17:04:09 -0700566 cfg.StrOpt('storage_protocol',
567 default='iSCSI',
568 help='Backend protocol to target when creating volume types'),
569 cfg.StrOpt('vendor_name',
570 default='Open Source',
571 help='Backend vendor to target when creating volume types'),
Ryan Hsua67f4632013-08-29 16:03:06 -0700572 cfg.StrOpt('disk_format',
573 default='raw',
574 help='Disk format to use when copying a volume to image'),
Jerry Cai9733d0e2014-03-19 15:50:49 +0800575 cfg.IntOpt('volume_size',
576 default=1,
577 help='Default size in GB for volumes created by volumes tests'),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500578]
K Jonathan Harkerd6ba4b42012-12-18 13:50:47 -0800579
Matthew Treinishd5c96022013-10-17 21:51:23 +0000580volume_feature_group = cfg.OptGroup(name='volume-feature-enabled',
581 title='Enabled Cinder Features')
582
583VolumeFeaturesGroup = [
584 cfg.BoolOpt('multi_backend',
585 default=False,
Matthew Treinishe3d26142013-11-26 19:14:58 +0000586 help="Runs Cinder multi-backend test (requires 2 backends)"),
Giulio Fidente74b08ad2014-01-18 04:02:51 +0100587 cfg.BoolOpt('backup',
588 default=True,
589 help='Runs Cinder volumes backup test'),
JordanPbce55532014-03-19 12:10:32 +0100590 cfg.BoolOpt('snapshot',
591 default=True,
592 help='Runs Cinder volume snapshot test'),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000593 cfg.ListOpt('api_extensions',
594 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800595 help='A list of enabled volume extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300596 'entry all which indicates every extension is enabled. '
597 'Empty list indicates all extensions are disabled'),
Zhi Kun Liubb363a22013-11-28 18:47:39 +0800598 cfg.BoolOpt('api_v1',
599 default=True,
600 help="Is the v1 volume API enabled"),
Zhi Kun Liu8cc3c842014-01-07 10:44:34 +0800601 cfg.BoolOpt('api_v2',
602 default=True,
603 help="Is the v2 volume API enabled"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000604]
605
Daryl Walleck587385b2012-03-03 13:00:26 -0600606
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500607object_storage_group = cfg.OptGroup(name='object-storage',
608 title='Object Storage Service Options')
Attila Fazekasa23f5002012-10-23 19:32:45 +0200609
DennyZhang1e71b612013-09-26 12:35:40 -0500610ObjectStoreGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500611 cfg.StrOpt('catalog_type',
612 default='object-store',
613 help="Catalog type of the Object-Storage service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900614 cfg.StrOpt('region',
615 default='',
616 help="The object-storage region name to use. If empty, the "
617 "value of identity.region is used instead. If no such "
618 "region is found in the service catalog, the first found "
619 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000620 cfg.StrOpt('endpoint_type',
621 default='publicURL',
622 choices=['public', 'admin', 'internal',
623 'publicURL', 'adminURL', 'internalURL'],
624 help="The endpoint type to use for the object-store service."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000625 cfg.IntOpt('container_sync_timeout',
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900626 default=600,
Fabien Boucher2178d312013-12-31 15:38:57 +0100627 help="Number of seconds to time on waiting for a container "
nayna-patelb4989b32013-01-09 06:25:13 +0000628 "to container synchronization complete."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000629 cfg.IntOpt('container_sync_interval',
nayna-patelb4989b32013-01-09 06:25:13 +0000630 default=5,
Fabien Boucher2178d312013-12-31 15:38:57 +0100631 help="Number of seconds to wait while looping to check the "
nayna-patelb4989b32013-01-09 06:25:13 +0000632 "status of a container to container synchronization"),
Matthew Treinish3fdb80c2013-08-15 11:13:19 -0400633 cfg.StrOpt('operator_role',
634 default='Member',
635 help="Role to add to users created for swift tests to "
636 "enable creating containers"),
Matthew Treinish998c91d2014-03-01 12:39:49 -0500637 cfg.StrOpt('reseller_admin_role',
638 default='ResellerAdmin',
639 help="User role that has reseller admin"),
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900640 cfg.StrOpt('realm_name',
641 default='realm1',
642 help="Name of sync realm. A sync realm is a set of clusters "
643 "that have agreed to allow container syncing with each "
644 "other. Set the same realm name as Swift's "
645 "container-sync-realms.conf"),
646 cfg.StrOpt('cluster_name',
647 default='name1',
648 help="One name of cluster which is set in the realm whose name "
649 "is set in 'realm_name' item in this file. Set the "
650 "same cluster name as Swift's container-sync-realms.conf"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500651]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200652
Matthew Treinishd5c96022013-10-17 21:51:23 +0000653object_storage_feature_group = cfg.OptGroup(
654 name='object-storage-feature-enabled',
655 title='Enabled object-storage features')
656
657ObjectStoreFeaturesGroup = [
Matthew Treinish20345382013-12-13 17:04:23 +0000658 cfg.ListOpt('discoverable_apis',
659 default=['all'],
660 help="A list of the enabled optional discoverable apis. "
661 "A single entry, all, indicates that all of these "
662 "features are expected to be enabled"),
Daisuke Morita20a183f2014-08-25 14:43:36 +0900663 cfg.BoolOpt('container_sync',
664 default=True,
665 help="Execute (old style) container-sync tests"),
666 cfg.BoolOpt('object_versioning',
667 default=True,
668 help="Execute object-versioning tests"),
669 cfg.BoolOpt('discoverability',
670 default=True,
671 help="Execute discoverability tests"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000672]
673
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800674database_group = cfg.OptGroup(name='database',
675 title='Database Service Options')
676
677DatabaseGroup = [
678 cfg.StrOpt('catalog_type',
679 default='database',
680 help="Catalog type of the Database service."),
681 cfg.StrOpt('db_flavor_ref',
682 default="1",
683 help="Valid primary flavor to use in database tests."),
Peter Stachowski320f9c72014-04-21 16:13:23 -0400684 cfg.StrOpt('db_current_version',
685 default="v1.0",
686 help="Current database version to use in database tests."),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800687]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200688
Steve Bakerc60e4e32013-05-06 15:22:41 +1200689orchestration_group = cfg.OptGroup(name='orchestration',
690 title='Orchestration Service Options')
691
692OrchestrationGroup = [
693 cfg.StrOpt('catalog_type',
694 default='orchestration',
695 help="Catalog type of the Orchestration service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900696 cfg.StrOpt('region',
697 default='',
698 help="The orchestration region name to use. If empty, the "
699 "value of identity.region is used instead. If no such "
700 "region is found in the service catalog, the first found "
701 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000702 cfg.StrOpt('endpoint_type',
703 default='publicURL',
704 choices=['public', 'admin', 'internal',
705 'publicURL', 'adminURL', 'internalURL'],
706 help="The endpoint type to use for the orchestration service."),
Matthew Treinishdb9721d2015-03-18 14:21:28 -0400707 cfg.StrOpt('stack_owner_role', default='heat_stack_owner',
708 help='Role required for users to be able to manage stacks'),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200709 cfg.IntOpt('build_interval',
710 default=1,
711 help="Time in seconds between build status checks."),
712 cfg.IntOpt('build_timeout',
Matthew Treinisha2dfd492014-04-15 11:15:34 -0400713 default=1200,
Steve Bakerc60e4e32013-05-06 15:22:41 +1200714 help="Timeout in seconds to wait for a stack to build."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200715 cfg.StrOpt('instance_type',
Steve Baker9e86b832013-05-22 15:40:28 +1200716 default='m1.micro',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200717 help="Instance type for tests. Needs to be big enough for a "
718 "full OS plus the test workload"),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200719 cfg.StrOpt('keypair_name',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200720 help="Name of existing keypair to launch servers with."),
Clint Byrum71f27632013-09-09 11:41:32 -0700721 cfg.IntOpt('max_template_size',
Joe Gordon0e51b222013-10-24 14:11:10 +0100722 default=524288,
Clint Byrum71f27632013-09-09 11:41:32 -0700723 help="Value must match heat configuration of the same name."),
Steven Hardyfdc6bd72014-03-21 16:56:04 +0000724 cfg.IntOpt('max_resources_per_stack',
725 default=1000,
726 help="Value must match heat configuration of the same name."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200727]
728
729
Yassine Lamgarchalb158d412013-12-27 19:29:42 +0100730telemetry_group = cfg.OptGroup(name='telemetry',
731 title='Telemetry Service Options')
732
733TelemetryGroup = [
734 cfg.StrOpt('catalog_type',
735 default='metering',
736 help="Catalog type of the Telemetry service."),
JordanPfc62c902014-02-26 14:47:28 +0000737 cfg.StrOpt('endpoint_type',
738 default='publicURL',
739 choices=['public', 'admin', 'internal',
740 'publicURL', 'adminURL', 'internalURL'],
741 help="The endpoint type to use for the telemetry service."),
Vadim Rovachev7bcea352013-12-26 15:56:17 +0400742 cfg.BoolOpt('too_slow_to_test',
743 default=True,
744 help="This variable is used as flag to enable "
745 "notification tests")
Yassine Lamgarchalb158d412013-12-27 19:29:42 +0100746]
747
748
Julie Pichond1017642013-07-24 16:37:23 +0100749dashboard_group = cfg.OptGroup(name="dashboard",
750 title="Dashboard options")
751
752DashboardGroup = [
753 cfg.StrOpt('dashboard_url',
754 default='http://localhost/',
755 help="Where the dashboard can be found"),
756 cfg.StrOpt('login_url',
757 default='http://localhost/auth/login/',
758 help="Login page for the dashboard"),
759]
760
761
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400762data_processing_group = cfg.OptGroup(name="data_processing",
763 title="Data Processing options")
764
765DataProcessingGroup = [
766 cfg.StrOpt('catalog_type',
767 default='data_processing',
JordanPfc62c902014-02-26 14:47:28 +0000768 help="Catalog type of the data processing service."),
769 cfg.StrOpt('endpoint_type',
770 default='publicURL',
771 choices=['public', 'admin', 'internal',
772 'publicURL', 'adminURL', 'internalURL'],
773 help="The endpoint type to use for the data processing "
774 "service."),
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400775]
776
777
Luigi Toscano14d172d2015-01-23 16:37:47 +0100778data_processing_feature_group = cfg.OptGroup(
779 name="data_processing-feature-enabled",
780 title="Enabled Data Processing features")
781
782DataProcessingFeaturesGroup = [
783 cfg.ListOpt('plugins',
784 default=["vanilla", "hdp"],
785 help="List of enabled data processing plugins")
786]
787
788
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500789boto_group = cfg.OptGroup(name='boto',
790 title='EC2/S3 options')
DennyZhang1e71b612013-09-26 12:35:40 -0500791BotoGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500792 cfg.StrOpt('ec2_url',
793 default="http://localhost:8773/services/Cloud",
794 help="EC2 URL"),
795 cfg.StrOpt('s3_url',
796 default="http://localhost:8080",
797 help="S3 URL"),
798 cfg.StrOpt('aws_secret',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500799 help="AWS Secret Key",
800 secret=True),
801 cfg.StrOpt('aws_access',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500802 help="AWS Access Key"),
Attila Fazekas27dd92e2014-02-21 14:49:40 +0100803 cfg.StrOpt('aws_zone',
804 default="nova",
805 help="AWS Zone for EC2 tests"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500806 cfg.StrOpt('s3_materials_path',
807 default="/opt/stack/devstack/files/images/"
808 "s3-materials/cirros-0.3.0",
809 help="S3 Materials Path"),
810 cfg.StrOpt('ari_manifest',
811 default="cirros-0.3.0-x86_64-initrd.manifest.xml",
812 help="ARI Ramdisk Image manifest"),
813 cfg.StrOpt('ami_manifest',
814 default="cirros-0.3.0-x86_64-blank.img.manifest.xml",
815 help="AMI Machine Image manifest"),
816 cfg.StrOpt('aki_manifest',
817 default="cirros-0.3.0-x86_64-vmlinuz.manifest.xml",
818 help="AKI Kernel Image manifest"),
819 cfg.StrOpt('instance_type',
820 default="m1.tiny",
821 help="Instance type"),
822 cfg.IntOpt('http_socket_timeout',
823 default=3,
824 help="boto Http socket timeout"),
825 cfg.IntOpt('num_retries',
826 default=1,
827 help="boto num_retries on error"),
828 cfg.IntOpt('build_timeout',
829 default=60,
830 help="Status Change Timeout"),
831 cfg.IntOpt('build_interval',
832 default=1,
833 help="Status Change Test Interval"),
834]
Attila Fazekasf7f2d932012-12-13 09:14:38 +0100835
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500836stress_group = cfg.OptGroup(name='stress', title='Stress Test Options')
837
838StressGroup = [
839 cfg.StrOpt('nova_logdir',
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500840 help='Directory containing log files on the compute nodes'),
841 cfg.IntOpt('max_instances',
842 default=16,
843 help='Maximum number of instances to create during test.'),
844 cfg.StrOpt('controller',
David Kranzb9d97502013-05-01 15:55:04 -0400845 help='Controller host.'),
846 # new stress options
847 cfg.StrOpt('target_controller',
David Kranzb9d97502013-05-01 15:55:04 -0400848 help='Controller host.'),
849 cfg.StrOpt('target_ssh_user',
David Kranzb9d97502013-05-01 15:55:04 -0400850 help='ssh user.'),
851 cfg.StrOpt('target_private_key_path',
David Kranzb9d97502013-05-01 15:55:04 -0400852 help='Path to private key.'),
853 cfg.StrOpt('target_logfiles',
David Kranzb9d97502013-05-01 15:55:04 -0400854 help='regexp for list of log files.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000855 cfg.IntOpt('log_check_interval',
David Kranzb9d97502013-05-01 15:55:04 -0400856 default=60,
Marc Koderer32221b8e2013-08-23 13:57:50 +0200857 help='time (in seconds) between log file error checks.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000858 cfg.IntOpt('default_thread_number_per_action',
Marc Koderer32221b8e2013-08-23 13:57:50 +0200859 default=4,
Julien Leloup04d40f72014-01-28 11:17:18 +0100860 help='The number of threads created while stress test.'),
861 cfg.BoolOpt('leave_dirty_stack',
862 default=False,
863 help='Prevent the cleaning (tearDownClass()) between'
864 ' each stress test run if an exception occurs'
Julien Leloupa5ee5422014-02-13 14:29:02 +0100865 ' during this run.'),
866 cfg.BoolOpt('full_clean_stack',
867 default=False,
868 help='Allows a full cleaning process after a stress test.'
869 ' Caution : this cleanup will remove every objects of'
870 ' every tenant.')
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500871]
872
873
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900874scenario_group = cfg.OptGroup(name='scenario', title='Scenario Test Options')
875
876ScenarioGroup = [
877 cfg.StrOpt('img_dir',
878 default='/opt/stack/new/devstack/files/images/'
879 'cirros-0.3.1-x86_64-uec',
880 help='Directory containing image files'),
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300881 cfg.StrOpt('img_file', deprecated_name='qcow2_img_file',
Masayuki Igawa4f71bf02014-02-21 14:02:29 +0900882 default='cirros-0.3.1-x86_64-disk.img',
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300883 help='Image file name'),
884 cfg.StrOpt('img_disk_format',
885 default='qcow2',
886 help='Image disk format'),
887 cfg.StrOpt('img_container_format',
888 default='bare',
889 help='Image container format'),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900890 cfg.StrOpt('ami_img_file',
891 default='cirros-0.3.1-x86_64-blank.img',
892 help='AMI image file name'),
893 cfg.StrOpt('ari_img_file',
894 default='cirros-0.3.1-x86_64-initrd',
895 help='ARI image file name'),
896 cfg.StrOpt('aki_img_file',
897 default='cirros-0.3.1-x86_64-vmlinuz',
898 help='AKI image file name'),
899 cfg.StrOpt('ssh_user',
900 default='cirros',
Joe Gordonb5e10cd2013-07-10 15:51:12 +0000901 help='ssh username for the image file'),
902 cfg.IntOpt(
903 'large_ops_number',
904 default=0,
905 help="specifies how many resources to request at once. Used "
Yair Fried413bf2d2014-11-19 17:07:11 +0200906 "for large operations testing."),
907 # TODO(yfried): add support for dhcpcd
908 cfg.StrOpt('dhcp_client',
909 default='udhcpc',
910 choices=["udhcpc", "dhclient"],
911 help='DHCP client used by images to renew DCHP lease. '
912 'If left empty, update operation will be skipped. '
913 'Supported clients: "udhcpc", "dhclient"')
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900914]
915
916
Matthew Treinish4c412922013-07-16 15:27:42 -0400917service_available_group = cfg.OptGroup(name="service_available",
918 title="Available OpenStack Services")
919
920ServiceAvailableGroup = [
921 cfg.BoolOpt('cinder',
922 default=True,
923 help="Whether or not cinder is expected to be available"),
Matthew Treinishfaa340d2013-07-19 16:26:21 -0400924 cfg.BoolOpt('neutron',
925 default=False,
926 help="Whether or not neutron is expected to be available"),
Matthew Treinish853ae442013-07-19 16:36:07 -0400927 cfg.BoolOpt('glance',
928 default=True,
929 help="Whether or not glance is expected to be available"),
Matthew Treinish61e332b2013-07-19 16:42:31 -0400930 cfg.BoolOpt('swift',
931 default=True,
932 help="Whether or not swift is expected to be available"),
Matthew Treinish6b41e242013-07-19 16:49:28 -0400933 cfg.BoolOpt('nova',
934 default=True,
935 help="Whether or not nova is expected to be available"),
Matthew Treinisha9d43882013-07-19 16:54:52 -0400936 cfg.BoolOpt('heat',
937 default=False,
938 help="Whether or not Heat is expected to be available"),
Mehdi Abaakouk8581c0b2013-10-04 10:45:42 +0200939 cfg.BoolOpt('ceilometer',
940 default=True,
941 help="Whether or not Ceilometer is expected to be available"),
Julie Pichond1017642013-07-24 16:37:23 +0100942 cfg.BoolOpt('horizon',
943 default=True,
944 help="Whether or not Horizon is expected to be available"),
Sergey Lukjanov9c95a252014-03-13 23:59:22 +0400945 cfg.BoolOpt('sahara',
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400946 default=False,
Sergey Lukjanov9c95a252014-03-13 23:59:22 +0400947 help="Whether or not Sahara is expected to be available"),
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +0300948 cfg.BoolOpt('ironic',
949 default=False,
950 help="Whether or not Ironic is expected to be available"),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800951 cfg.BoolOpt('trove',
952 default=False,
953 help="Whether or not Trove is expected to be available"),
Malini Kamalambal8681e922014-08-18 10:10:45 -0400954 cfg.BoolOpt('zaqar',
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500955 default=False,
Malini Kamalambal8681e922014-08-18 10:10:45 -0400956 help="Whether or not Zaqar is expected to be available"),
Matthew Treinish4c412922013-07-16 15:27:42 -0400957]
958
Attila Fazekasaeeeefd2013-08-06 17:01:56 +0200959debug_group = cfg.OptGroup(name="debug",
960 title="Debug System")
961
962DebugGroup = [
Sean Daguec522c092014-03-24 10:43:22 -0400963 cfg.StrOpt('trace_requests',
964 default='',
965 help="""A regex to determine which requests should be traced.
966
967This is a regex to match the caller for rest client requests to be able to
968selectively trace calls out of specific classes and methods. It largely
969exists for test development, and is not expected to be used in a real deploy
970of tempest. This will be matched against the discovered ClassName:method
971in the test environment.
972
973Expected values for this field are:
974
975 * ClassName:test_method_name - traces one test_method
976 * ClassName:setUp(Class) - traces specific setup functions
977 * ClassName:tearDown(Class) - traces specific teardown functions
978 * ClassName:_run_cleanups - traces the cleanup functions
979
980If nothing is specified, this feature is not enabled. To trace everything
981specify .* as the regex.
982""")
Attila Fazekasaeeeefd2013-08-06 17:01:56 +0200983]
984
Andrea Frittolif5da28b2013-12-06 07:08:07 +0000985input_scenario_group = cfg.OptGroup(name="input-scenario",
986 title="Filters and values for"
987 " input scenarios")
988
989InputScenarioGroup = [
990 cfg.StrOpt('image_regex',
991 default='^cirros-0.3.1-x86_64-uec$',
992 help="Matching images become parameters for scenario tests"),
993 cfg.StrOpt('flavor_regex',
Andrea Frittoli99901c02014-01-30 18:06:49 +0000994 default='^m1.nano$',
Andrea Frittolif5da28b2013-12-06 07:08:07 +0000995 help="Matching flavors become parameters for scenario tests"),
996 cfg.StrOpt('non_ssh_image_regex',
997 default='^.*[Ww]in.*$',
998 help="SSH verification in tests is skipped"
999 "for matching images"),
1000 cfg.StrOpt('ssh_user_regex',
1001 default="[[\"^.*[Cc]irros.*$\", \"root\"]]",
1002 help="List of user mapped to regex "
1003 "to matching image names."),
1004]
1005
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001006
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001007baremetal_group = cfg.OptGroup(name='baremetal',
Chris Hoge8f1401b2014-11-19 14:00:37 -08001008 title='Baremetal provisioning service options',
1009 help='When enabling baremetal tests, Nova '
1010 'must be configured to use the Ironic '
1011 'driver. The following paremeters for the '
1012 '[compute] section must be disabled: '
1013 'console_output, interface_attach, '
1014 'live_migration, pause, rescue, resize '
1015 'shelve, snapshot, and suspend')
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001016
1017BaremetalGroup = [
1018 cfg.StrOpt('catalog_type',
1019 default='baremetal',
Adam Gandelman4a48a602014-03-20 18:23:18 -07001020 help="Catalog type of the baremetal provisioning service"),
1021 cfg.BoolOpt('driver_enabled',
1022 default=False,
1023 help="Whether the Ironic nova-compute driver is enabled"),
Yuiko Takada1ee1b322014-07-04 09:55:30 +09001024 cfg.StrOpt('driver',
1025 default='fake',
1026 help="Driver name which Ironic uses"),
JordanPfc62c902014-02-26 14:47:28 +00001027 cfg.StrOpt('endpoint_type',
1028 default='publicURL',
1029 choices=['public', 'admin', 'internal',
1030 'publicURL', 'adminURL', 'internalURL'],
1031 help="The endpoint type to use for the baremetal provisioning "
Adam Gandelman4a48a602014-03-20 18:23:18 -07001032 "service"),
1033 cfg.IntOpt('active_timeout',
1034 default=300,
1035 help="Timeout for Ironic node to completely provision"),
1036 cfg.IntOpt('association_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001037 default=30,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001038 help="Timeout for association of Nova instance and Ironic "
1039 "node"),
1040 cfg.IntOpt('power_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001041 default=60,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001042 help="Timeout for Ironic power transitions."),
1043 cfg.IntOpt('unprovision_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001044 default=60,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001045 help="Timeout for unprovisioning an Ironic node.")
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001046]
1047
Matthew Treinishe2b56b52014-01-29 19:25:50 +00001048cli_group = cfg.OptGroup(name='cli', title="cli Configuration Options")
1049
1050CLIGroup = [
1051 cfg.BoolOpt('enabled',
1052 default=True,
1053 help="enable cli tests"),
1054 cfg.StrOpt('cli_dir',
1055 default='/usr/local/bin',
1056 help="directory where python client binaries are located"),
Sean Dague44b24682014-02-20 19:08:24 -05001057 cfg.BoolOpt('has_manage',
1058 default=True,
1059 help=("Whether the tempest run location has access to the "
1060 "*-manage commands. In a pure blackbox environment "
1061 "it will not.")),
Matthew Treinishe2b56b52014-01-29 19:25:50 +00001062 cfg.IntOpt('timeout',
1063 default=15,
1064 help="Number of seconds to wait on a CLI timeout"),
1065]
1066
Marc Koderer6ee82dc2014-02-17 10:26:29 +01001067negative_group = cfg.OptGroup(name='negative', title="Negative Test Options")
1068
1069NegativeGroup = [
1070 cfg.StrOpt('test_generator',
1071 default='tempest.common.' +
1072 'generator.negative_generator.NegativeTestGenerator',
1073 help="Test generator class for all negative tests"),
1074]
1075
Jon Grimm270bd7f2014-08-05 18:11:29 +00001076_opts = [
1077 (auth_group, AuthGroup),
1078 (compute_group, ComputeGroup),
1079 (compute_features_group, ComputeFeaturesGroup),
1080 (identity_group, IdentityGroup),
1081 (identity_feature_group, IdentityFeatureGroup),
1082 (image_group, ImageGroup),
1083 (image_feature_group, ImageFeaturesGroup),
1084 (network_group, NetworkGroup),
1085 (network_feature_group, NetworkFeaturesGroup),
1086 (messaging_group, MessagingGroup),
1087 (volume_group, VolumeGroup),
1088 (volume_feature_group, VolumeFeaturesGroup),
1089 (object_storage_group, ObjectStoreGroup),
1090 (object_storage_feature_group, ObjectStoreFeaturesGroup),
1091 (database_group, DatabaseGroup),
1092 (orchestration_group, OrchestrationGroup),
1093 (telemetry_group, TelemetryGroup),
1094 (dashboard_group, DashboardGroup),
1095 (data_processing_group, DataProcessingGroup),
Luigi Toscano14d172d2015-01-23 16:37:47 +01001096 (data_processing_feature_group, DataProcessingFeaturesGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001097 (boto_group, BotoGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001098 (stress_group, StressGroup),
1099 (scenario_group, ScenarioGroup),
1100 (service_available_group, ServiceAvailableGroup),
1101 (debug_group, DebugGroup),
1102 (baremetal_group, BaremetalGroup),
1103 (input_scenario_group, InputScenarioGroup),
1104 (cli_group, CLIGroup),
1105 (negative_group, NegativeGroup)
1106]
1107
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001108
Matthew Treinish43b296a2014-02-28 15:23:00 -05001109def register_opts():
Jon Grimm270bd7f2014-08-05 18:11:29 +00001110 for g, o in _opts:
1111 register_opt_group(cfg.CONF, g, o)
1112
1113
1114def list_opts():
1115 """Return a list of oslo.config options available.
1116
1117 The purpose of this is to allow tools like the Oslo sample config file
1118 generator to discover the options exposed to users.
1119 """
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001120 return [(g.name, o) for g, o in _opts]
Matthew Treinish43b296a2014-02-28 15:23:00 -05001121
1122
Sean Dague3b9b1f32013-12-20 17:04:54 -05001123# this should never be called outside of this class
1124class TempestConfigPrivate(object):
Daryl Walleck1465d612011-11-02 02:22:15 -05001125 """Provides OpenStack configuration information."""
1126
Brian Waldon738cd632011-12-12 18:45:09 -05001127 DEFAULT_CONFIG_DIR = os.path.join(
Zhongyue Luoa1343de2013-01-04 16:21:35 +08001128 os.path.abspath(os.path.dirname(os.path.dirname(__file__))),
Brian Waldon738cd632011-12-12 18:45:09 -05001129 "etc")
Daryl Walleck1465d612011-11-02 02:22:15 -05001130
Brian Waldon738cd632011-12-12 18:45:09 -05001131 DEFAULT_CONFIG_FILE = "tempest.conf"
1132
Andrea Frittolia96ee212014-08-15 18:34:20 +01001133 def __getattr__(self, attr):
1134 # Handles config options from the default group
1135 return getattr(cfg.CONF, attr)
1136
Matthew Treinish43b296a2014-02-28 15:23:00 -05001137 def _set_attrs(self):
Matthew Treinishc791ac42014-07-16 09:15:23 -04001138 self.auth = cfg.CONF.auth
Matthew Treinish39e48ef2012-12-21 13:36:15 -05001139 self.compute = cfg.CONF.compute
Matthew Treinishd5c96022013-10-17 21:51:23 +00001140 self.compute_feature_enabled = cfg.CONF['compute-feature-enabled']
Matthew Treinish39e48ef2012-12-21 13:36:15 -05001141 self.identity = cfg.CONF.identity
Matthew Treinishd5021a72014-01-09 18:42:51 +00001142 self.identity_feature_enabled = cfg.CONF['identity-feature-enabled']
Matt Riedemannd3efe902014-02-10 06:46:38 -08001143 self.image = cfg.CONF.image
Matthew Treinish2b5287d2013-10-22 17:40:34 +00001144 self.image_feature_enabled = cfg.CONF['image-feature-enabled']
Matthew Treinish39e48ef2012-12-21 13:36:15 -05001145 self.network = cfg.CONF.network
Matthew Treinishe3d26142013-11-26 19:14:58 +00001146 self.network_feature_enabled = cfg.CONF['network-feature-enabled']
Matthew Treinish39e48ef2012-12-21 13:36:15 -05001147 self.volume = cfg.CONF.volume
Matthew Treinishd5c96022013-10-17 21:51:23 +00001148 self.volume_feature_enabled = cfg.CONF['volume-feature-enabled']
Matthew Treinish39e48ef2012-12-21 13:36:15 -05001149 self.object_storage = cfg.CONF['object-storage']
Matthew Treinishd5c96022013-10-17 21:51:23 +00001150 self.object_storage_feature_enabled = cfg.CONF[
1151 'object-storage-feature-enabled']
Nikhil Manchandadd6886f2014-03-03 01:58:45 -08001152 self.database = cfg.CONF.database
Steve Bakerc60e4e32013-05-06 15:22:41 +12001153 self.orchestration = cfg.CONF.orchestration
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -03001154 self.messaging = cfg.CONF.messaging
Yassine Lamgarchalb158d412013-12-27 19:29:42 +01001155 self.telemetry = cfg.CONF.telemetry
Julie Pichond1017642013-07-24 16:37:23 +01001156 self.dashboard = cfg.CONF.dashboard
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +04001157 self.data_processing = cfg.CONF.data_processing
Luigi Toscano14d172d2015-01-23 16:37:47 +01001158 self.data_processing_feature_enabled = cfg.CONF[
1159 'data_processing-feature-enabled']
Matthew Treinish39e48ef2012-12-21 13:36:15 -05001160 self.boto = cfg.CONF.boto
Matthew Treinish615ea6a2013-02-25 17:26:59 -05001161 self.stress = cfg.CONF.stress
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +09001162 self.scenario = cfg.CONF.scenario
Matthew Treinish4c412922013-07-16 15:27:42 -04001163 self.service_available = cfg.CONF.service_available
Attila Fazekas5fae7a32013-09-25 16:52:44 +02001164 self.debug = cfg.CONF.debug
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001165 self.baremetal = cfg.CONF.baremetal
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001166 self.input_scenario = cfg.CONF['input-scenario']
Matthew Treinishe2b56b52014-01-29 19:25:50 +00001167 self.cli = cfg.CONF.cli
Marc Koderer6ee82dc2014-02-17 10:26:29 +01001168 self.negative = cfg.CONF.negative
Andrea Frittolib1b04bb2014-04-06 11:57:07 +01001169 cfg.CONF.set_default('domain_name', self.identity.admin_domain_name,
1170 group='identity')
1171 cfg.CONF.set_default('alt_domain_name',
1172 self.identity.admin_domain_name,
1173 group='identity')
Sean Dague86bd8422013-12-20 09:56:44 -05001174
Joe Gordon28a84ae2014-07-17 15:38:28 +00001175 def __init__(self, parse_conf=True, config_path=None):
Matthew Treinish43b296a2014-02-28 15:23:00 -05001176 """Initialize a configuration from a conf directory and conf file."""
1177 super(TempestConfigPrivate, self).__init__()
1178 config_files = []
1179 failsafe_path = "/etc/tempest/" + self.DEFAULT_CONFIG_FILE
1180
Joe Gordon28a84ae2014-07-17 15:38:28 +00001181 if config_path:
1182 path = config_path
1183 else:
1184 # Environment variables override defaults...
1185 conf_dir = os.environ.get('TEMPEST_CONFIG_DIR',
1186 self.DEFAULT_CONFIG_DIR)
1187 conf_file = os.environ.get('TEMPEST_CONFIG',
1188 self.DEFAULT_CONFIG_FILE)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001189
Joe Gordon28a84ae2014-07-17 15:38:28 +00001190 path = os.path.join(conf_dir, conf_file)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001191
1192 if not os.path.isfile(path):
1193 path = failsafe_path
1194
1195 # only parse the config file if we expect one to exist. This is needed
1196 # to remove an issue with the config file up to date checker.
1197 if parse_conf:
1198 config_files.append(path)
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001199 logging.register_options(cfg.CONF)
Matthew Treinish5440a402014-10-02 14:36:16 -04001200 if os.path.isfile(path):
1201 cfg.CONF([], project='tempest', default_config_files=config_files)
1202 else:
1203 cfg.CONF([], project='tempest')
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001204 logging.setup(cfg.CONF, 'tempest')
Matthew Treinish43b296a2014-02-28 15:23:00 -05001205 LOG = logging.getLogger('tempest')
1206 LOG.info("Using tempest config file %s" % path)
1207 register_opts()
1208 self._set_attrs()
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001209 if parse_conf:
1210 cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)
1211
Sean Dague86bd8422013-12-20 09:56:44 -05001212
1213class TempestConfigProxy(object):
1214 _config = None
Joe Gordon28a84ae2014-07-17 15:38:28 +00001215 _path = None
Sean Dague86bd8422013-12-20 09:56:44 -05001216
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001217 _extra_log_defaults = [
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001218 ('paramiko.transport', std_logging.INFO),
1219 ('requests.packages.urllib3.connectionpool', std_logging.WARN),
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001220 ]
1221
1222 def _fix_log_levels(self):
1223 """Tweak the oslo log defaults."""
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001224 for name, level in self._extra_log_defaults:
1225 std_logging.getLogger(name).setLevel(level)
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001226
Sean Dague86bd8422013-12-20 09:56:44 -05001227 def __getattr__(self, attr):
1228 if not self._config:
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001229 self._fix_log_levels()
Joe Gordon28a84ae2014-07-17 15:38:28 +00001230 self._config = TempestConfigPrivate(config_path=self._path)
Sean Dague86bd8422013-12-20 09:56:44 -05001231
1232 return getattr(self._config, attr)
1233
Joe Gordon28a84ae2014-07-17 15:38:28 +00001234 def set_config_path(self, path):
1235 self._path = path
1236
Sean Dague86bd8422013-12-20 09:56:44 -05001237
1238CONF = TempestConfigProxy()