blob: 9ef6c53a381269dbc8375c7ffc310aed8e941735 [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',
235 default='private',
Chris Hoge8f1401b2014-11-19 14:00:37 -0800236 help="Name of the fixed network that is visible to all test "
237 "tenants."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500238 cfg.StrOpt('network_for_ssh',
239 default='public',
Chris Hoge8f1401b2014-11-19 14:00:37 -0800240 help="Network used for SSH connections. Ignored if "
241 "use_floatingip_for_ssh=true or run_ssh=false."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500242 cfg.IntOpt('ip_version_for_ssh',
243 default=4,
244 help="IP version used for SSH connections."),
fujioka yuuichia11994e2013-07-09 11:19:51 +0900245 cfg.BoolOpt('use_floatingip_for_ssh',
246 default=True,
Tushar Kalra95a482d2014-03-25 14:24:43 -0700247 help="Does SSH use Floating IPs?"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500248 cfg.StrOpt('catalog_type',
249 default='compute',
250 help="Catalog type of the Compute service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900251 cfg.StrOpt('region',
252 default='',
253 help="The compute region name to use. If empty, the value "
254 "of identity.region is used instead. If no such region "
255 "is found in the service catalog, the first found one is "
256 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000257 cfg.StrOpt('endpoint_type',
258 default='publicURL',
259 choices=['public', 'admin', 'internal',
260 'publicURL', 'adminURL', 'internalURL'],
261 help="The endpoint type to use for the compute service."),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100262 cfg.StrOpt('path_to_private_key',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100263 help="Path to a private key file for SSH access to remote "
264 "hosts"),
Ryan Hsucb2e1252013-09-03 21:44:49 -0700265 cfg.StrOpt('volume_device_name',
266 default='vdb',
267 help="Expected device name when a volume is attached to "
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900268 "an instance"),
269 cfg.IntOpt('shelved_offload_time',
270 default=0,
271 help='Time in seconds before a shelved instance is eligible '
272 'for removing from a host. -1 never offload, 0 offload '
273 'when shelved. This time should be the same as the time '
274 'of nova.conf, and some tests will run for as long as the '
Ghanshyam06a5b4a2014-04-11 17:32:45 +0900275 'time.'),
276 cfg.StrOpt('floating_ip_range',
277 default='10.0.0.0/29',
278 help='Unallocated floating IP range, which will be used to '
Chris Hoge8f1401b2014-11-19 14:00:37 -0800279 'test the floating IP bulk feature for CRUD operation. '
280 'This block must not overlap an existing floating IP '
281 'pool.')
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500282]
Rohit Karajgie1b050d2011-12-02 16:13:18 -0800283
Matthew Treinishd5c96022013-10-17 21:51:23 +0000284compute_features_group = cfg.OptGroup(name='compute-feature-enabled',
285 title="Enabled Compute Service Features")
286
287ComputeFeaturesGroup = [
288 cfg.BoolOpt('disk_config',
289 default=True,
290 help="If false, skip disk config tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000291 cfg.ListOpt('api_extensions',
292 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800293 help='A list of enabled compute extensions with a special '
Ken'ichi Ohmichia7e68712014-05-06 10:47:26 +0900294 'entry all which indicates every extension is enabled. '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300295 'Each extension should be specified with alias name. '
296 'Empty list indicates all extensions are disabled'),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000297 cfg.BoolOpt('change_password',
298 default=False,
299 help="Does the test environment support changing the admin "
300 "password?"),
Adam Gandelmanc6eefb42014-07-15 16:44:08 -0700301 cfg.BoolOpt('console_output',
302 default=True,
303 help="Does the test environment support obtaining instance "
304 "serial console output?"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000305 cfg.BoolOpt('resize',
306 default=False,
307 help="Does the test environment support resizing?"),
Eric Windischb5538072014-03-09 23:47:35 -0400308 cfg.BoolOpt('pause',
309 default=True,
310 help="Does the test environment support pausing?"),
David Shrewsbury25f666f2014-07-22 12:17:59 -0400311 cfg.BoolOpt('shelve',
312 default=True,
313 help="Does the test environment support shelving/unshelving?"),
Eric Windischaeb7e842014-03-10 01:10:50 -0400314 cfg.BoolOpt('suspend',
315 default=True,
316 help="Does the test environment support suspend/resume?"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000317 cfg.BoolOpt('live_migration',
Joe Gordon31a139a2014-11-17 16:39:04 -0800318 default=True,
Matthew Treinishd5c96022013-10-17 21:51:23 +0000319 help="Does the test environment support live migration "
320 "available?"),
321 cfg.BoolOpt('block_migration_for_live_migration',
322 default=False,
323 help="Does the test environment use block devices for live "
324 "migration"),
325 cfg.BoolOpt('block_migrate_cinder_iscsi',
326 default=False,
327 help="Does the test environment block migration support "
Joe Gordon0a5788f2015-03-17 11:29:38 -0700328 "cinder iSCSI volumes. Note, libvirt doesn't support this, "
329 "see https://bugs.launchpad.net/nova/+bug/1398999"),
Ghanshyam Mann41c17572014-02-27 18:52:56 +0900330 cfg.BoolOpt('vnc_console',
331 default=False,
332 help='Enable VNC console. This configuration value should '
Ghanshyam70876d02014-03-11 11:40:18 +0900333 'be same as [nova.vnc]->vnc_enabled in nova.conf'),
334 cfg.BoolOpt('spice_console',
335 default=False,
336 help='Enable Spice console. This configuration value should '
337 'be same as [nova.spice]->enabled in nova.conf'),
338 cfg.BoolOpt('rdp_console',
339 default=False,
340 help='Enable RDP console. This configuration value should '
Adam Gandelman2e37b4f2014-06-18 17:34:21 -0700341 'be same as [nova.rdp]->enabled in nova.conf'),
342 cfg.BoolOpt('rescue',
343 default=True,
344 help='Does the test environment support instance rescue '
Ghanshyam9c2e50d2014-07-22 21:32:05 +0900345 'mode?'),
346 cfg.BoolOpt('enable_instance_password',
347 default=True,
348 help='Enables returning of the instance password by the '
349 'relevant server API calls such as create, rebuild '
Adam Gandelman7186f7a2014-07-23 09:28:56 -0400350 'or rescue.'),
351 cfg.BoolOpt('interface_attach',
352 default=True,
353 help='Does the test environment support dynamic network '
Adam Gandelmanfbc95ac2014-06-19 17:33:43 -0700354 'interface attachment?'),
355 cfg.BoolOpt('snapshot',
356 default=True,
357 help='Does the test environment support creating snapshot '
Matthew Treinishdfd7ac02015-02-09 17:47:31 -0500358 'images of running instances?'),
359 cfg.BoolOpt('ec2_api',
360 default=True,
Matt Riedemann17940732015-03-13 14:18:19 +0000361 help='Does the test environment have the ec2 api running?'),
362 # TODO(mriedem): Remove preserve_ports once juno-eol happens.
363 cfg.BoolOpt('preserve_ports',
364 default=False,
365 help='Does Nova preserve preexisting ports from Neutron '
366 'when deleting an instance? This should be set to True '
367 'if testing Kilo+ Nova.')
Matthew Treinishd5c96022013-10-17 21:51:23 +0000368]
369
370
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500371image_group = cfg.OptGroup(name='image',
372 title="Image Service Options")
Jay Pipesf38eaac2012-06-21 13:37:35 -0400373
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500374ImageGroup = [
Matthew Treinish72ea4422013-02-07 14:42:49 -0500375 cfg.StrOpt('catalog_type',
376 default='image',
Sean Dague83401992013-05-06 17:46:36 -0400377 help='Catalog type of the Image service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900378 cfg.StrOpt('region',
379 default='',
380 help="The image region name to use. If empty, the value "
381 "of identity.region is used instead. If no such region "
382 "is found in the service catalog, the first found one is "
383 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000384 cfg.StrOpt('endpoint_type',
385 default='publicURL',
386 choices=['public', 'admin', 'internal',
387 'publicURL', 'adminURL', 'internalURL'],
388 help="The endpoint type to use for the image service."),
Sean Dague83401992013-05-06 17:46:36 -0400389 cfg.StrOpt('http_image',
390 default='http://download.cirros-cloud.net/0.3.1/'
391 'cirros-0.3.1-x86_64-uec.tar.gz',
Lucian Petrut1cfe2982015-01-06 13:57:36 +0200392 help='http accessible image'),
393 cfg.IntOpt('build_timeout',
394 default=300,
395 help="Timeout in seconds to wait for an image to "
396 "become available."),
397 cfg.IntOpt('build_interval',
398 default=1,
399 help="Time in seconds between image operation status "
400 "checks.")
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500401]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400402
Matthew Treinish2b5287d2013-10-22 17:40:34 +0000403image_feature_group = cfg.OptGroup(name='image-feature-enabled',
404 title='Enabled image service features')
405
406ImageFeaturesGroup = [
407 cfg.BoolOpt('api_v2',
408 default=True,
409 help="Is the v2 image API enabled"),
410 cfg.BoolOpt('api_v1',
411 default=True,
412 help="Is the v1 image API enabled"),
413]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400414
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500415network_group = cfg.OptGroup(name='network',
416 title='Network Service Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600417
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500418NetworkGroup = [
419 cfg.StrOpt('catalog_type',
420 default='network',
Mark McClainf2982e82013-07-06 17:48:03 -0400421 help='Catalog type of the Neutron service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900422 cfg.StrOpt('region',
423 default='',
424 help="The network region name to use. If empty, the value "
425 "of identity.region is used instead. If no such region "
426 "is found in the service catalog, the first found one is "
427 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000428 cfg.StrOpt('endpoint_type',
429 default='publicURL',
430 choices=['public', 'admin', 'internal',
431 'publicURL', 'adminURL', 'internalURL'],
432 help="The endpoint type to use for the network service."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500433 cfg.StrOpt('tenant_network_cidr',
434 default="10.100.0.0/16",
Henry Gessauffda37a2014-01-16 11:17:55 -0500435 help="The cidr block to allocate tenant ipv4 subnets from"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500436 cfg.IntOpt('tenant_network_mask_bits',
Attila Fazekas8ea181b2013-07-13 16:26:14 +0200437 default=28,
Henry Gessauffda37a2014-01-16 11:17:55 -0500438 help="The mask bits for tenant ipv4 subnets"),
439 cfg.StrOpt('tenant_network_v6_cidr',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400440 default="2003::/48",
Henry Gessauffda37a2014-01-16 11:17:55 -0500441 help="The cidr block to allocate tenant ipv6 subnets from"),
442 cfg.IntOpt('tenant_network_v6_mask_bits',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400443 default=64,
Henry Gessauffda37a2014-01-16 11:17:55 -0500444 help="The mask bits for tenant ipv6 subnets"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500445 cfg.BoolOpt('tenant_networks_reachable',
446 default=False,
447 help="Whether tenant network connectivity should be "
448 "evaluated directly"),
449 cfg.StrOpt('public_network_id',
450 default="",
451 help="Id of the public network that provides external "
452 "connectivity"),
453 cfg.StrOpt('public_router_id',
454 default="",
455 help="Id of the public router that provides external "
Yair Fried1eb27f52014-11-10 15:24:19 +0200456 "connectivity. This should only be used when Neutron's "
457 "'allow_overlapping_ips' is set to 'False' in "
458 "neutron.conf. usually not needed past 'Grizzly' release"),
izikpensod9a01a62014-02-17 20:02:32 +0200459 cfg.IntOpt('build_timeout',
460 default=300,
461 help="Timeout in seconds to wait for network operation to "
462 "complete."),
463 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400464 default=1,
izikpensod9a01a62014-02-17 20:02:32 +0200465 help="Time in seconds between network operation status "
466 "checks."),
Attila Fazekas640392b2014-06-12 15:58:10 +0200467 cfg.ListOpt('dns_servers',
468 default=["8.8.8.8", "8.8.4.4"],
Itzik Brown5be44582014-12-24 09:05:13 +0200469 help="List of dns servers which should be used"
Itzik Brown2ca01cd2014-12-08 12:58:20 +0200470 " for subnet creation"),
471 cfg.StrOpt('port_vnic_type',
472 choices=[None, 'normal', 'direct', 'macvtap'],
473 help="vnic_type to use when Launching instances"
474 " with pre-configured ports."
475 " Supported ports are:"
476 " ['normal','direct','macvtap']"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500477]
Jay Pipes3f981df2012-03-27 18:59:44 -0400478
Matthew Treinishe3d26142013-11-26 19:14:58 +0000479network_feature_group = cfg.OptGroup(name='network-feature-enabled',
480 title='Enabled network service features')
481
482NetworkFeaturesGroup = [
Matthew Treinishe2e33cf2014-03-03 19:28:41 +0000483 cfg.BoolOpt('ipv6',
484 default=True,
485 help="Allow the execution of IPv6 tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000486 cfg.ListOpt('api_extensions',
487 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800488 help='A list of enabled network extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300489 'entry all which indicates every extension is enabled. '
490 'Empty list indicates all extensions are disabled'),
Sean M. Collinsdd27a4d2014-05-13 10:33:15 -0400491 cfg.BoolOpt('ipv6_subnet_attributes',
492 default=False,
493 help="Allow the execution of IPv6 subnet tests that use "
494 "the extended IPv6 attributes ipv6_ra_mode "
495 "and ipv6_address_mode"
Mark McClain6e07c0d2014-10-10 11:25:03 -0400496 ),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000497]
498
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300499messaging_group = cfg.OptGroup(name='messaging',
500 title='Messaging Service')
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500501
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300502MessagingGroup = [
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500503 cfg.StrOpt('catalog_type',
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300504 default='messaging',
505 help='Catalog type of the Messaging service.'),
Jorge Chai83ba4ee2014-04-15 18:58:08 +0000506 cfg.IntOpt('max_queues_per_page',
507 default=20,
508 help='The maximum number of queue records per page when '
509 'listing queues'),
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400510 cfg.IntOpt('max_queue_metadata',
511 default=65536,
512 help='The maximum metadata size for a queue'),
513 cfg.IntOpt('max_messages_per_page',
514 default=20,
515 help='The maximum number of queue message per page when '
516 'listing (or) posting messages'),
517 cfg.IntOpt('max_message_size',
518 default=262144,
519 help='The maximum size of a message body'),
520 cfg.IntOpt('max_messages_per_claim',
521 default=20,
522 help='The maximum number of messages per claim'),
523 cfg.IntOpt('max_message_ttl',
524 default=1209600,
525 help='The maximum ttl for a message'),
526 cfg.IntOpt('max_claim_ttl',
527 default=43200,
528 help='The maximum ttl for a claim'),
529 cfg.IntOpt('max_claim_grace',
530 default=43200,
531 help='The maximum grace period for a claim'),
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500532]
533
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500534volume_group = cfg.OptGroup(name='volume',
535 title='Block Storage Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600536
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500537VolumeGroup = [
538 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400539 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500540 help='Time in seconds between volume availability checks.'),
541 cfg.IntOpt('build_timeout',
542 default=300,
Eric Harney9b1f89c2014-10-14 14:40:19 -0400543 help='Timeout in seconds to wait for a volume to become '
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500544 'available.'),
545 cfg.StrOpt('catalog_type',
Matthew Treinisheb724512013-10-25 15:12:59 +0000546 default='volume',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500547 help="Catalog type of the Volume Service"),
Arata Notsu8f440392013-09-13 16:14:20 +0900548 cfg.StrOpt('region',
549 default='',
550 help="The volume region name to use. If empty, the value "
551 "of identity.region is used instead. If no such region "
552 "is found in the service catalog, the first found one is "
553 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000554 cfg.StrOpt('endpoint_type',
555 default='publicURL',
556 choices=['public', 'admin', 'internal',
557 'publicURL', 'adminURL', 'internalURL'],
558 help="The endpoint type to use for the volume service."),
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100559 cfg.StrOpt('backend1_name',
Giulio Fidentef4fa8942013-05-28 18:48:03 +0200560 default='BACKEND_1',
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100561 help="Name of the backend1 (must be declared in cinder.conf)"),
562 cfg.StrOpt('backend2_name',
Giulio Fidentef4fa8942013-05-28 18:48:03 +0200563 default='BACKEND_2',
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100564 help="Name of the backend2 (must be declared in cinder.conf)"),
Adam Gandelman827ad332013-06-24 17:04:09 -0700565 cfg.StrOpt('storage_protocol',
566 default='iSCSI',
567 help='Backend protocol to target when creating volume types'),
568 cfg.StrOpt('vendor_name',
569 default='Open Source',
570 help='Backend vendor to target when creating volume types'),
Ryan Hsua67f4632013-08-29 16:03:06 -0700571 cfg.StrOpt('disk_format',
572 default='raw',
573 help='Disk format to use when copying a volume to image'),
Jerry Cai9733d0e2014-03-19 15:50:49 +0800574 cfg.IntOpt('volume_size',
575 default=1,
576 help='Default size in GB for volumes created by volumes tests'),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500577]
K Jonathan Harkerd6ba4b42012-12-18 13:50:47 -0800578
Matthew Treinishd5c96022013-10-17 21:51:23 +0000579volume_feature_group = cfg.OptGroup(name='volume-feature-enabled',
580 title='Enabled Cinder Features')
581
582VolumeFeaturesGroup = [
583 cfg.BoolOpt('multi_backend',
584 default=False,
Matthew Treinishe3d26142013-11-26 19:14:58 +0000585 help="Runs Cinder multi-backend test (requires 2 backends)"),
Giulio Fidente74b08ad2014-01-18 04:02:51 +0100586 cfg.BoolOpt('backup',
587 default=True,
588 help='Runs Cinder volumes backup test'),
JordanPbce55532014-03-19 12:10:32 +0100589 cfg.BoolOpt('snapshot',
590 default=True,
591 help='Runs Cinder volume snapshot test'),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000592 cfg.ListOpt('api_extensions',
593 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800594 help='A list of enabled volume extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300595 'entry all which indicates every extension is enabled. '
596 'Empty list indicates all extensions are disabled'),
Zhi Kun Liubb363a22013-11-28 18:47:39 +0800597 cfg.BoolOpt('api_v1',
598 default=True,
599 help="Is the v1 volume API enabled"),
Zhi Kun Liu8cc3c842014-01-07 10:44:34 +0800600 cfg.BoolOpt('api_v2',
601 default=True,
602 help="Is the v2 volume API enabled"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000603]
604
Daryl Walleck587385b2012-03-03 13:00:26 -0600605
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500606object_storage_group = cfg.OptGroup(name='object-storage',
607 title='Object Storage Service Options')
Attila Fazekasa23f5002012-10-23 19:32:45 +0200608
DennyZhang1e71b612013-09-26 12:35:40 -0500609ObjectStoreGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500610 cfg.StrOpt('catalog_type',
611 default='object-store',
612 help="Catalog type of the Object-Storage service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900613 cfg.StrOpt('region',
614 default='',
615 help="The object-storage region name to use. If empty, the "
616 "value of identity.region is used instead. If no such "
617 "region is found in the service catalog, the first found "
618 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000619 cfg.StrOpt('endpoint_type',
620 default='publicURL',
621 choices=['public', 'admin', 'internal',
622 'publicURL', 'adminURL', 'internalURL'],
623 help="The endpoint type to use for the object-store service."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000624 cfg.IntOpt('container_sync_timeout',
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900625 default=600,
Fabien Boucher2178d312013-12-31 15:38:57 +0100626 help="Number of seconds to time on waiting for a container "
nayna-patelb4989b32013-01-09 06:25:13 +0000627 "to container synchronization complete."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000628 cfg.IntOpt('container_sync_interval',
nayna-patelb4989b32013-01-09 06:25:13 +0000629 default=5,
Fabien Boucher2178d312013-12-31 15:38:57 +0100630 help="Number of seconds to wait while looping to check the "
nayna-patelb4989b32013-01-09 06:25:13 +0000631 "status of a container to container synchronization"),
Matthew Treinish3fdb80c2013-08-15 11:13:19 -0400632 cfg.StrOpt('operator_role',
633 default='Member',
634 help="Role to add to users created for swift tests to "
635 "enable creating containers"),
Matthew Treinish998c91d2014-03-01 12:39:49 -0500636 cfg.StrOpt('reseller_admin_role',
637 default='ResellerAdmin',
638 help="User role that has reseller admin"),
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900639 cfg.StrOpt('realm_name',
640 default='realm1',
641 help="Name of sync realm. A sync realm is a set of clusters "
642 "that have agreed to allow container syncing with each "
643 "other. Set the same realm name as Swift's "
644 "container-sync-realms.conf"),
645 cfg.StrOpt('cluster_name',
646 default='name1',
647 help="One name of cluster which is set in the realm whose name "
648 "is set in 'realm_name' item in this file. Set the "
649 "same cluster name as Swift's container-sync-realms.conf"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500650]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200651
Matthew Treinishd5c96022013-10-17 21:51:23 +0000652object_storage_feature_group = cfg.OptGroup(
653 name='object-storage-feature-enabled',
654 title='Enabled object-storage features')
655
656ObjectStoreFeaturesGroup = [
Matthew Treinish20345382013-12-13 17:04:23 +0000657 cfg.ListOpt('discoverable_apis',
658 default=['all'],
659 help="A list of the enabled optional discoverable apis. "
660 "A single entry, all, indicates that all of these "
661 "features are expected to be enabled"),
Daisuke Morita20a183f2014-08-25 14:43:36 +0900662 cfg.BoolOpt('container_sync',
663 default=True,
664 help="Execute (old style) container-sync tests"),
665 cfg.BoolOpt('object_versioning',
666 default=True,
667 help="Execute object-versioning tests"),
668 cfg.BoolOpt('discoverability',
669 default=True,
670 help="Execute discoverability tests"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000671]
672
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800673database_group = cfg.OptGroup(name='database',
674 title='Database Service Options')
675
676DatabaseGroup = [
677 cfg.StrOpt('catalog_type',
678 default='database',
679 help="Catalog type of the Database service."),
680 cfg.StrOpt('db_flavor_ref',
681 default="1",
682 help="Valid primary flavor to use in database tests."),
Peter Stachowski320f9c72014-04-21 16:13:23 -0400683 cfg.StrOpt('db_current_version',
684 default="v1.0",
685 help="Current database version to use in database tests."),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800686]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200687
Steve Bakerc60e4e32013-05-06 15:22:41 +1200688orchestration_group = cfg.OptGroup(name='orchestration',
689 title='Orchestration Service Options')
690
691OrchestrationGroup = [
692 cfg.StrOpt('catalog_type',
693 default='orchestration',
694 help="Catalog type of the Orchestration service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900695 cfg.StrOpt('region',
696 default='',
697 help="The orchestration region name to use. If empty, the "
698 "value of identity.region is used instead. If no such "
699 "region is found in the service catalog, the first found "
700 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000701 cfg.StrOpt('endpoint_type',
702 default='publicURL',
703 choices=['public', 'admin', 'internal',
704 'publicURL', 'adminURL', 'internalURL'],
705 help="The endpoint type to use for the orchestration service."),
Matthew Treinishdb9721d2015-03-18 14:21:28 -0400706 cfg.StrOpt('stack_owner_role', default='heat_stack_owner',
707 help='Role required for users to be able to manage stacks'),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200708 cfg.IntOpt('build_interval',
709 default=1,
710 help="Time in seconds between build status checks."),
711 cfg.IntOpt('build_timeout',
Matthew Treinisha2dfd492014-04-15 11:15:34 -0400712 default=1200,
Steve Bakerc60e4e32013-05-06 15:22:41 +1200713 help="Timeout in seconds to wait for a stack to build."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200714 cfg.StrOpt('instance_type',
Steve Baker9e86b832013-05-22 15:40:28 +1200715 default='m1.micro',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200716 help="Instance type for tests. Needs to be big enough for a "
717 "full OS plus the test workload"),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200718 cfg.StrOpt('keypair_name',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200719 help="Name of existing keypair to launch servers with."),
Clint Byrum71f27632013-09-09 11:41:32 -0700720 cfg.IntOpt('max_template_size',
Joe Gordon0e51b222013-10-24 14:11:10 +0100721 default=524288,
Clint Byrum71f27632013-09-09 11:41:32 -0700722 help="Value must match heat configuration of the same name."),
Steven Hardyfdc6bd72014-03-21 16:56:04 +0000723 cfg.IntOpt('max_resources_per_stack',
724 default=1000,
725 help="Value must match heat configuration of the same name."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200726]
727
728
Yassine Lamgarchalb158d412013-12-27 19:29:42 +0100729telemetry_group = cfg.OptGroup(name='telemetry',
730 title='Telemetry Service Options')
731
732TelemetryGroup = [
733 cfg.StrOpt('catalog_type',
734 default='metering',
735 help="Catalog type of the Telemetry service."),
JordanPfc62c902014-02-26 14:47:28 +0000736 cfg.StrOpt('endpoint_type',
737 default='publicURL',
738 choices=['public', 'admin', 'internal',
739 'publicURL', 'adminURL', 'internalURL'],
740 help="The endpoint type to use for the telemetry service."),
Vadim Rovachev7bcea352013-12-26 15:56:17 +0400741 cfg.BoolOpt('too_slow_to_test',
742 default=True,
743 help="This variable is used as flag to enable "
744 "notification tests")
Yassine Lamgarchalb158d412013-12-27 19:29:42 +0100745]
746
747
Julie Pichond1017642013-07-24 16:37:23 +0100748dashboard_group = cfg.OptGroup(name="dashboard",
749 title="Dashboard options")
750
751DashboardGroup = [
752 cfg.StrOpt('dashboard_url',
753 default='http://localhost/',
754 help="Where the dashboard can be found"),
755 cfg.StrOpt('login_url',
756 default='http://localhost/auth/login/',
757 help="Login page for the dashboard"),
758]
759
760
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400761data_processing_group = cfg.OptGroup(name="data_processing",
762 title="Data Processing options")
763
764DataProcessingGroup = [
765 cfg.StrOpt('catalog_type',
766 default='data_processing',
JordanPfc62c902014-02-26 14:47:28 +0000767 help="Catalog type of the data processing service."),
768 cfg.StrOpt('endpoint_type',
769 default='publicURL',
770 choices=['public', 'admin', 'internal',
771 'publicURL', 'adminURL', 'internalURL'],
772 help="The endpoint type to use for the data processing "
773 "service."),
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400774]
775
776
Luigi Toscano14d172d2015-01-23 16:37:47 +0100777data_processing_feature_group = cfg.OptGroup(
778 name="data_processing-feature-enabled",
779 title="Enabled Data Processing features")
780
781DataProcessingFeaturesGroup = [
782 cfg.ListOpt('plugins',
783 default=["vanilla", "hdp"],
784 help="List of enabled data processing plugins")
785]
786
787
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500788boto_group = cfg.OptGroup(name='boto',
789 title='EC2/S3 options')
DennyZhang1e71b612013-09-26 12:35:40 -0500790BotoGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500791 cfg.StrOpt('ec2_url',
792 default="http://localhost:8773/services/Cloud",
793 help="EC2 URL"),
794 cfg.StrOpt('s3_url',
795 default="http://localhost:8080",
796 help="S3 URL"),
797 cfg.StrOpt('aws_secret',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500798 help="AWS Secret Key",
799 secret=True),
800 cfg.StrOpt('aws_access',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500801 help="AWS Access Key"),
Attila Fazekas27dd92e2014-02-21 14:49:40 +0100802 cfg.StrOpt('aws_zone',
803 default="nova",
804 help="AWS Zone for EC2 tests"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500805 cfg.StrOpt('s3_materials_path',
806 default="/opt/stack/devstack/files/images/"
807 "s3-materials/cirros-0.3.0",
808 help="S3 Materials Path"),
809 cfg.StrOpt('ari_manifest',
810 default="cirros-0.3.0-x86_64-initrd.manifest.xml",
811 help="ARI Ramdisk Image manifest"),
812 cfg.StrOpt('ami_manifest',
813 default="cirros-0.3.0-x86_64-blank.img.manifest.xml",
814 help="AMI Machine Image manifest"),
815 cfg.StrOpt('aki_manifest',
816 default="cirros-0.3.0-x86_64-vmlinuz.manifest.xml",
817 help="AKI Kernel Image manifest"),
818 cfg.StrOpt('instance_type',
819 default="m1.tiny",
820 help="Instance type"),
821 cfg.IntOpt('http_socket_timeout',
822 default=3,
823 help="boto Http socket timeout"),
824 cfg.IntOpt('num_retries',
825 default=1,
826 help="boto num_retries on error"),
827 cfg.IntOpt('build_timeout',
828 default=60,
829 help="Status Change Timeout"),
830 cfg.IntOpt('build_interval',
831 default=1,
832 help="Status Change Test Interval"),
833]
Attila Fazekasf7f2d932012-12-13 09:14:38 +0100834
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500835stress_group = cfg.OptGroup(name='stress', title='Stress Test Options')
836
837StressGroup = [
838 cfg.StrOpt('nova_logdir',
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500839 help='Directory containing log files on the compute nodes'),
840 cfg.IntOpt('max_instances',
841 default=16,
842 help='Maximum number of instances to create during test.'),
843 cfg.StrOpt('controller',
David Kranzb9d97502013-05-01 15:55:04 -0400844 help='Controller host.'),
845 # new stress options
846 cfg.StrOpt('target_controller',
David Kranzb9d97502013-05-01 15:55:04 -0400847 help='Controller host.'),
848 cfg.StrOpt('target_ssh_user',
David Kranzb9d97502013-05-01 15:55:04 -0400849 help='ssh user.'),
850 cfg.StrOpt('target_private_key_path',
David Kranzb9d97502013-05-01 15:55:04 -0400851 help='Path to private key.'),
852 cfg.StrOpt('target_logfiles',
David Kranzb9d97502013-05-01 15:55:04 -0400853 help='regexp for list of log files.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000854 cfg.IntOpt('log_check_interval',
David Kranzb9d97502013-05-01 15:55:04 -0400855 default=60,
Marc Koderer32221b8e2013-08-23 13:57:50 +0200856 help='time (in seconds) between log file error checks.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000857 cfg.IntOpt('default_thread_number_per_action',
Marc Koderer32221b8e2013-08-23 13:57:50 +0200858 default=4,
Julien Leloup04d40f72014-01-28 11:17:18 +0100859 help='The number of threads created while stress test.'),
860 cfg.BoolOpt('leave_dirty_stack',
861 default=False,
862 help='Prevent the cleaning (tearDownClass()) between'
863 ' each stress test run if an exception occurs'
Julien Leloupa5ee5422014-02-13 14:29:02 +0100864 ' during this run.'),
865 cfg.BoolOpt('full_clean_stack',
866 default=False,
867 help='Allows a full cleaning process after a stress test.'
868 ' Caution : this cleanup will remove every objects of'
869 ' every tenant.')
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500870]
871
872
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900873scenario_group = cfg.OptGroup(name='scenario', title='Scenario Test Options')
874
875ScenarioGroup = [
876 cfg.StrOpt('img_dir',
877 default='/opt/stack/new/devstack/files/images/'
878 'cirros-0.3.1-x86_64-uec',
879 help='Directory containing image files'),
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300880 cfg.StrOpt('img_file', deprecated_name='qcow2_img_file',
Masayuki Igawa4f71bf02014-02-21 14:02:29 +0900881 default='cirros-0.3.1-x86_64-disk.img',
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300882 help='Image file name'),
883 cfg.StrOpt('img_disk_format',
884 default='qcow2',
885 help='Image disk format'),
886 cfg.StrOpt('img_container_format',
887 default='bare',
888 help='Image container format'),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900889 cfg.StrOpt('ami_img_file',
890 default='cirros-0.3.1-x86_64-blank.img',
891 help='AMI image file name'),
892 cfg.StrOpt('ari_img_file',
893 default='cirros-0.3.1-x86_64-initrd',
894 help='ARI image file name'),
895 cfg.StrOpt('aki_img_file',
896 default='cirros-0.3.1-x86_64-vmlinuz',
897 help='AKI image file name'),
898 cfg.StrOpt('ssh_user',
899 default='cirros',
Joe Gordonb5e10cd2013-07-10 15:51:12 +0000900 help='ssh username for the image file'),
901 cfg.IntOpt(
902 'large_ops_number',
903 default=0,
904 help="specifies how many resources to request at once. Used "
Yair Fried413bf2d2014-11-19 17:07:11 +0200905 "for large operations testing."),
906 # TODO(yfried): add support for dhcpcd
907 cfg.StrOpt('dhcp_client',
908 default='udhcpc',
909 choices=["udhcpc", "dhclient"],
910 help='DHCP client used by images to renew DCHP lease. '
911 'If left empty, update operation will be skipped. '
912 'Supported clients: "udhcpc", "dhclient"')
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900913]
914
915
Matthew Treinish4c412922013-07-16 15:27:42 -0400916service_available_group = cfg.OptGroup(name="service_available",
917 title="Available OpenStack Services")
918
919ServiceAvailableGroup = [
920 cfg.BoolOpt('cinder',
921 default=True,
922 help="Whether or not cinder is expected to be available"),
Matthew Treinishfaa340d2013-07-19 16:26:21 -0400923 cfg.BoolOpt('neutron',
924 default=False,
925 help="Whether or not neutron is expected to be available"),
Matthew Treinish853ae442013-07-19 16:36:07 -0400926 cfg.BoolOpt('glance',
927 default=True,
928 help="Whether or not glance is expected to be available"),
Matthew Treinish61e332b2013-07-19 16:42:31 -0400929 cfg.BoolOpt('swift',
930 default=True,
931 help="Whether or not swift is expected to be available"),
Matthew Treinish6b41e242013-07-19 16:49:28 -0400932 cfg.BoolOpt('nova',
933 default=True,
934 help="Whether or not nova is expected to be available"),
Matthew Treinisha9d43882013-07-19 16:54:52 -0400935 cfg.BoolOpt('heat',
936 default=False,
937 help="Whether or not Heat is expected to be available"),
Mehdi Abaakouk8581c0b2013-10-04 10:45:42 +0200938 cfg.BoolOpt('ceilometer',
939 default=True,
940 help="Whether or not Ceilometer is expected to be available"),
Julie Pichond1017642013-07-24 16:37:23 +0100941 cfg.BoolOpt('horizon',
942 default=True,
943 help="Whether or not Horizon is expected to be available"),
Sergey Lukjanov9c95a252014-03-13 23:59:22 +0400944 cfg.BoolOpt('sahara',
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400945 default=False,
Sergey Lukjanov9c95a252014-03-13 23:59:22 +0400946 help="Whether or not Sahara is expected to be available"),
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +0300947 cfg.BoolOpt('ironic',
948 default=False,
949 help="Whether or not Ironic is expected to be available"),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800950 cfg.BoolOpt('trove',
951 default=False,
952 help="Whether or not Trove is expected to be available"),
Malini Kamalambal8681e922014-08-18 10:10:45 -0400953 cfg.BoolOpt('zaqar',
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500954 default=False,
Malini Kamalambal8681e922014-08-18 10:10:45 -0400955 help="Whether or not Zaqar is expected to be available"),
Matthew Treinish4c412922013-07-16 15:27:42 -0400956]
957
Attila Fazekasaeeeefd2013-08-06 17:01:56 +0200958debug_group = cfg.OptGroup(name="debug",
959 title="Debug System")
960
961DebugGroup = [
Sean Daguec522c092014-03-24 10:43:22 -0400962 cfg.StrOpt('trace_requests',
963 default='',
964 help="""A regex to determine which requests should be traced.
965
966This is a regex to match the caller for rest client requests to be able to
967selectively trace calls out of specific classes and methods. It largely
968exists for test development, and is not expected to be used in a real deploy
969of tempest. This will be matched against the discovered ClassName:method
970in the test environment.
971
972Expected values for this field are:
973
974 * ClassName:test_method_name - traces one test_method
975 * ClassName:setUp(Class) - traces specific setup functions
976 * ClassName:tearDown(Class) - traces specific teardown functions
977 * ClassName:_run_cleanups - traces the cleanup functions
978
979If nothing is specified, this feature is not enabled. To trace everything
980specify .* as the regex.
981""")
Attila Fazekasaeeeefd2013-08-06 17:01:56 +0200982]
983
Andrea Frittolif5da28b2013-12-06 07:08:07 +0000984input_scenario_group = cfg.OptGroup(name="input-scenario",
985 title="Filters and values for"
986 " input scenarios")
987
988InputScenarioGroup = [
989 cfg.StrOpt('image_regex',
990 default='^cirros-0.3.1-x86_64-uec$',
991 help="Matching images become parameters for scenario tests"),
992 cfg.StrOpt('flavor_regex',
Andrea Frittoli99901c02014-01-30 18:06:49 +0000993 default='^m1.nano$',
Andrea Frittolif5da28b2013-12-06 07:08:07 +0000994 help="Matching flavors become parameters for scenario tests"),
995 cfg.StrOpt('non_ssh_image_regex',
996 default='^.*[Ww]in.*$',
997 help="SSH verification in tests is skipped"
998 "for matching images"),
999 cfg.StrOpt('ssh_user_regex',
1000 default="[[\"^.*[Cc]irros.*$\", \"root\"]]",
1001 help="List of user mapped to regex "
1002 "to matching image names."),
1003]
1004
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001005
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001006baremetal_group = cfg.OptGroup(name='baremetal',
Chris Hoge8f1401b2014-11-19 14:00:37 -08001007 title='Baremetal provisioning service options',
1008 help='When enabling baremetal tests, Nova '
1009 'must be configured to use the Ironic '
1010 'driver. The following paremeters for the '
1011 '[compute] section must be disabled: '
1012 'console_output, interface_attach, '
1013 'live_migration, pause, rescue, resize '
1014 'shelve, snapshot, and suspend')
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001015
1016BaremetalGroup = [
1017 cfg.StrOpt('catalog_type',
1018 default='baremetal',
Adam Gandelman4a48a602014-03-20 18:23:18 -07001019 help="Catalog type of the baremetal provisioning service"),
1020 cfg.BoolOpt('driver_enabled',
1021 default=False,
1022 help="Whether the Ironic nova-compute driver is enabled"),
Yuiko Takada1ee1b322014-07-04 09:55:30 +09001023 cfg.StrOpt('driver',
1024 default='fake',
1025 help="Driver name which Ironic uses"),
JordanPfc62c902014-02-26 14:47:28 +00001026 cfg.StrOpt('endpoint_type',
1027 default='publicURL',
1028 choices=['public', 'admin', 'internal',
1029 'publicURL', 'adminURL', 'internalURL'],
1030 help="The endpoint type to use for the baremetal provisioning "
Adam Gandelman4a48a602014-03-20 18:23:18 -07001031 "service"),
1032 cfg.IntOpt('active_timeout',
1033 default=300,
1034 help="Timeout for Ironic node to completely provision"),
1035 cfg.IntOpt('association_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001036 default=30,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001037 help="Timeout for association of Nova instance and Ironic "
1038 "node"),
1039 cfg.IntOpt('power_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001040 default=60,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001041 help="Timeout for Ironic power transitions."),
1042 cfg.IntOpt('unprovision_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001043 default=60,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001044 help="Timeout for unprovisioning an Ironic node.")
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001045]
1046
Matthew Treinishe2b56b52014-01-29 19:25:50 +00001047cli_group = cfg.OptGroup(name='cli', title="cli Configuration Options")
1048
1049CLIGroup = [
1050 cfg.BoolOpt('enabled',
1051 default=True,
1052 help="enable cli tests"),
1053 cfg.StrOpt('cli_dir',
1054 default='/usr/local/bin',
1055 help="directory where python client binaries are located"),
Sean Dague44b24682014-02-20 19:08:24 -05001056 cfg.BoolOpt('has_manage',
1057 default=True,
1058 help=("Whether the tempest run location has access to the "
1059 "*-manage commands. In a pure blackbox environment "
1060 "it will not.")),
Matthew Treinishe2b56b52014-01-29 19:25:50 +00001061 cfg.IntOpt('timeout',
1062 default=15,
1063 help="Number of seconds to wait on a CLI timeout"),
1064]
1065
Marc Koderer6ee82dc2014-02-17 10:26:29 +01001066negative_group = cfg.OptGroup(name='negative', title="Negative Test Options")
1067
1068NegativeGroup = [
1069 cfg.StrOpt('test_generator',
1070 default='tempest.common.' +
1071 'generator.negative_generator.NegativeTestGenerator',
1072 help="Test generator class for all negative tests"),
1073]
1074
Jon Grimm270bd7f2014-08-05 18:11:29 +00001075_opts = [
1076 (auth_group, AuthGroup),
1077 (compute_group, ComputeGroup),
1078 (compute_features_group, ComputeFeaturesGroup),
1079 (identity_group, IdentityGroup),
1080 (identity_feature_group, IdentityFeatureGroup),
1081 (image_group, ImageGroup),
1082 (image_feature_group, ImageFeaturesGroup),
1083 (network_group, NetworkGroup),
1084 (network_feature_group, NetworkFeaturesGroup),
1085 (messaging_group, MessagingGroup),
1086 (volume_group, VolumeGroup),
1087 (volume_feature_group, VolumeFeaturesGroup),
1088 (object_storage_group, ObjectStoreGroup),
1089 (object_storage_feature_group, ObjectStoreFeaturesGroup),
1090 (database_group, DatabaseGroup),
1091 (orchestration_group, OrchestrationGroup),
1092 (telemetry_group, TelemetryGroup),
1093 (dashboard_group, DashboardGroup),
1094 (data_processing_group, DataProcessingGroup),
Luigi Toscano14d172d2015-01-23 16:37:47 +01001095 (data_processing_feature_group, DataProcessingFeaturesGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001096 (boto_group, BotoGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001097 (stress_group, StressGroup),
1098 (scenario_group, ScenarioGroup),
1099 (service_available_group, ServiceAvailableGroup),
1100 (debug_group, DebugGroup),
1101 (baremetal_group, BaremetalGroup),
1102 (input_scenario_group, InputScenarioGroup),
1103 (cli_group, CLIGroup),
1104 (negative_group, NegativeGroup)
1105]
1106
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001107
Matthew Treinish43b296a2014-02-28 15:23:00 -05001108def register_opts():
Jon Grimm270bd7f2014-08-05 18:11:29 +00001109 for g, o in _opts:
1110 register_opt_group(cfg.CONF, g, o)
1111
1112
1113def list_opts():
1114 """Return a list of oslo.config options available.
1115
1116 The purpose of this is to allow tools like the Oslo sample config file
1117 generator to discover the options exposed to users.
1118 """
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001119 return [(g.name, o) for g, o in _opts]
Matthew Treinish43b296a2014-02-28 15:23:00 -05001120
1121
Sean Dague3b9b1f32013-12-20 17:04:54 -05001122# this should never be called outside of this class
1123class TempestConfigPrivate(object):
Daryl Walleck1465d612011-11-02 02:22:15 -05001124 """Provides OpenStack configuration information."""
1125
Brian Waldon738cd632011-12-12 18:45:09 -05001126 DEFAULT_CONFIG_DIR = os.path.join(
Zhongyue Luoa1343de2013-01-04 16:21:35 +08001127 os.path.abspath(os.path.dirname(os.path.dirname(__file__))),
Brian Waldon738cd632011-12-12 18:45:09 -05001128 "etc")
Daryl Walleck1465d612011-11-02 02:22:15 -05001129
Brian Waldon738cd632011-12-12 18:45:09 -05001130 DEFAULT_CONFIG_FILE = "tempest.conf"
1131
Andrea Frittolia96ee212014-08-15 18:34:20 +01001132 def __getattr__(self, attr):
1133 # Handles config options from the default group
1134 return getattr(cfg.CONF, attr)
1135
Matthew Treinish43b296a2014-02-28 15:23:00 -05001136 def _set_attrs(self):
Matthew Treinishc791ac42014-07-16 09:15:23 -04001137 self.auth = cfg.CONF.auth
Matthew Treinish39e48ef2012-12-21 13:36:15 -05001138 self.compute = cfg.CONF.compute
Matthew Treinishd5c96022013-10-17 21:51:23 +00001139 self.compute_feature_enabled = cfg.CONF['compute-feature-enabled']
Matthew Treinish39e48ef2012-12-21 13:36:15 -05001140 self.identity = cfg.CONF.identity
Matthew Treinishd5021a72014-01-09 18:42:51 +00001141 self.identity_feature_enabled = cfg.CONF['identity-feature-enabled']
Matt Riedemannd3efe902014-02-10 06:46:38 -08001142 self.image = cfg.CONF.image
Matthew Treinish2b5287d2013-10-22 17:40:34 +00001143 self.image_feature_enabled = cfg.CONF['image-feature-enabled']
Matthew Treinish39e48ef2012-12-21 13:36:15 -05001144 self.network = cfg.CONF.network
Matthew Treinishe3d26142013-11-26 19:14:58 +00001145 self.network_feature_enabled = cfg.CONF['network-feature-enabled']
Matthew Treinish39e48ef2012-12-21 13:36:15 -05001146 self.volume = cfg.CONF.volume
Matthew Treinishd5c96022013-10-17 21:51:23 +00001147 self.volume_feature_enabled = cfg.CONF['volume-feature-enabled']
Matthew Treinish39e48ef2012-12-21 13:36:15 -05001148 self.object_storage = cfg.CONF['object-storage']
Matthew Treinishd5c96022013-10-17 21:51:23 +00001149 self.object_storage_feature_enabled = cfg.CONF[
1150 'object-storage-feature-enabled']
Nikhil Manchandadd6886f2014-03-03 01:58:45 -08001151 self.database = cfg.CONF.database
Steve Bakerc60e4e32013-05-06 15:22:41 +12001152 self.orchestration = cfg.CONF.orchestration
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -03001153 self.messaging = cfg.CONF.messaging
Yassine Lamgarchalb158d412013-12-27 19:29:42 +01001154 self.telemetry = cfg.CONF.telemetry
Julie Pichond1017642013-07-24 16:37:23 +01001155 self.dashboard = cfg.CONF.dashboard
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +04001156 self.data_processing = cfg.CONF.data_processing
Luigi Toscano14d172d2015-01-23 16:37:47 +01001157 self.data_processing_feature_enabled = cfg.CONF[
1158 'data_processing-feature-enabled']
Matthew Treinish39e48ef2012-12-21 13:36:15 -05001159 self.boto = cfg.CONF.boto
Matthew Treinish615ea6a2013-02-25 17:26:59 -05001160 self.stress = cfg.CONF.stress
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +09001161 self.scenario = cfg.CONF.scenario
Matthew Treinish4c412922013-07-16 15:27:42 -04001162 self.service_available = cfg.CONF.service_available
Attila Fazekas5fae7a32013-09-25 16:52:44 +02001163 self.debug = cfg.CONF.debug
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001164 self.baremetal = cfg.CONF.baremetal
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001165 self.input_scenario = cfg.CONF['input-scenario']
Matthew Treinishe2b56b52014-01-29 19:25:50 +00001166 self.cli = cfg.CONF.cli
Marc Koderer6ee82dc2014-02-17 10:26:29 +01001167 self.negative = cfg.CONF.negative
Andrea Frittolib1b04bb2014-04-06 11:57:07 +01001168 cfg.CONF.set_default('domain_name', self.identity.admin_domain_name,
1169 group='identity')
1170 cfg.CONF.set_default('alt_domain_name',
1171 self.identity.admin_domain_name,
1172 group='identity')
Sean Dague86bd8422013-12-20 09:56:44 -05001173
Joe Gordon28a84ae2014-07-17 15:38:28 +00001174 def __init__(self, parse_conf=True, config_path=None):
Matthew Treinish43b296a2014-02-28 15:23:00 -05001175 """Initialize a configuration from a conf directory and conf file."""
1176 super(TempestConfigPrivate, self).__init__()
1177 config_files = []
1178 failsafe_path = "/etc/tempest/" + self.DEFAULT_CONFIG_FILE
1179
Joe Gordon28a84ae2014-07-17 15:38:28 +00001180 if config_path:
1181 path = config_path
1182 else:
1183 # Environment variables override defaults...
1184 conf_dir = os.environ.get('TEMPEST_CONFIG_DIR',
1185 self.DEFAULT_CONFIG_DIR)
1186 conf_file = os.environ.get('TEMPEST_CONFIG',
1187 self.DEFAULT_CONFIG_FILE)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001188
Joe Gordon28a84ae2014-07-17 15:38:28 +00001189 path = os.path.join(conf_dir, conf_file)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001190
1191 if not os.path.isfile(path):
1192 path = failsafe_path
1193
1194 # only parse the config file if we expect one to exist. This is needed
1195 # to remove an issue with the config file up to date checker.
1196 if parse_conf:
1197 config_files.append(path)
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001198 logging.register_options(cfg.CONF)
Matthew Treinish5440a402014-10-02 14:36:16 -04001199 if os.path.isfile(path):
1200 cfg.CONF([], project='tempest', default_config_files=config_files)
1201 else:
1202 cfg.CONF([], project='tempest')
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001203 logging.setup(cfg.CONF, 'tempest')
Matthew Treinish43b296a2014-02-28 15:23:00 -05001204 LOG = logging.getLogger('tempest')
1205 LOG.info("Using tempest config file %s" % path)
1206 register_opts()
1207 self._set_attrs()
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001208 if parse_conf:
1209 cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)
1210
Sean Dague86bd8422013-12-20 09:56:44 -05001211
1212class TempestConfigProxy(object):
1213 _config = None
Joe Gordon28a84ae2014-07-17 15:38:28 +00001214 _path = None
Sean Dague86bd8422013-12-20 09:56:44 -05001215
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001216 _extra_log_defaults = [
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001217 ('paramiko.transport', std_logging.INFO),
1218 ('requests.packages.urllib3.connectionpool', std_logging.WARN),
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001219 ]
1220
1221 def _fix_log_levels(self):
1222 """Tweak the oslo log defaults."""
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001223 for name, level in self._extra_log_defaults:
1224 std_logging.getLogger(name).setLevel(level)
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001225
Sean Dague86bd8422013-12-20 09:56:44 -05001226 def __getattr__(self, attr):
1227 if not self._config:
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001228 self._fix_log_levels()
Joe Gordon28a84ae2014-07-17 15:38:28 +00001229 self._config = TempestConfigPrivate(config_path=self._path)
Sean Dague86bd8422013-12-20 09:56:44 -05001230
1231 return getattr(self._config, attr)
1232
Joe Gordon28a84ae2014-07-17 15:38:28 +00001233 def set_config_path(self, path):
1234 self._path = path
1235
Sean Dague86bd8422013-12-20 09:56:44 -05001236
1237CONF = TempestConfigProxy()