blob: 720632737e91b25401598ed1e6d8ce0b50de12bb [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
Maru Newbyf440c292015-03-31 15:58:47 +000026# TODO(marun) Replace use of oslo_config's global ConfigOpts
27# (cfg.CONF) instance with a local instance (cfg.ConfigOpts()) once
28# the cli tests move to the clients. The cli tests rely on oslo
29# incubator modules that use the global cfg.CONF.
30_CONF = cfg.CONF
31
32
DennyZhang88a2dd82013-10-07 12:55:35 -050033def register_opt_group(conf, opt_group, options):
34 conf.register_group(opt_group)
35 for opt in options:
36 conf.register_opt(opt, group=opt_group.name)
37
38
Matthew Treinishc791ac42014-07-16 09:15:23 -040039auth_group = cfg.OptGroup(name='auth',
40 title="Options for authentication and credentials")
41
42
43AuthGroup = [
44 cfg.StrOpt('test_accounts_file',
Matthew Treinishc791ac42014-07-16 09:15:23 -040045 help="Path to the yaml file that contains the list of "
Matthew Treinishfc7cd8f2015-03-30 11:51:55 -040046 "credentials to use for running tests. If used when "
47 "running in parallel you have to make sure sufficient "
48 "credentials are provided in the accounts file. For "
49 "example if no tests with roles are being run it requires "
50 "at least `2 * CONC` distinct accounts configured in "
51 " the `test_accounts_file`, with CONC == the "
52 "number of concurrent test processes."),
Andrea Frittoli8283b4e2014-07-17 13:28:58 +010053 cfg.BoolOpt('allow_tenant_isolation',
Attila Fazekas5dda1582015-02-18 17:16:02 +010054 default=True,
Andrea Frittoli8283b4e2014-07-17 13:28:58 +010055 help="Allows test cases to create/destroy tenants and "
56 "users. This option requires that OpenStack Identity "
57 "API admin credentials are known. If false, isolated "
58 "test cases and parallel execution, can still be "
59 "achieved configuring a list of test accounts",
60 deprecated_opts=[cfg.DeprecatedOpt('allow_tenant_isolation',
61 group='compute'),
62 cfg.DeprecatedOpt('allow_tenant_isolation',
63 group='orchestration')]),
Matthew Treinish167b2be2015-01-15 17:20:27 -050064 cfg.ListOpt('tempest_roles',
65 help="Roles to assign to all users created by tempest",
Andrea Frittolic3280152015-02-26 12:42:34 +000066 default=[]),
67 cfg.StrOpt('tenant_isolation_domain_name',
68 default=None,
69 help="Only applicable when identity.auth_version is v3."
70 "Domain within which isolated credentials are provisioned."
71 "The default \"None\" means that the domain from the"
Matthew Treinish2219d382015-04-24 10:33:04 -040072 "admin user is used instead."),
73 cfg.BoolOpt('create_isolated_networks',
74 default=True,
75 help="If allow_tenant_isolation is set to True and Neutron is "
76 "enabled Tempest will try to create a useable network, "
77 "subnet, and router when needed for each tenant it "
78 "creates. However in some neutron configurations, like "
79 "with VLAN provider networks, this doesn't work. So if "
80 "set to False the isolated networks will not be created"),
Matthew Treinishc791ac42014-07-16 09:15:23 -040081]
82
Matthew Treinish39e48ef2012-12-21 13:36:15 -050083identity_group = cfg.OptGroup(name='identity',
84 title="Keystone Configuration Options")
Daryl Walleck1465d612011-11-02 02:22:15 -050085
Matthew Treinish39e48ef2012-12-21 13:36:15 -050086IdentityGroup = [
87 cfg.StrOpt('catalog_type',
88 default='identity',
89 help="Catalog type of the Identity service."),
Jay Pipescd8eaec2013-01-16 21:03:48 -050090 cfg.BoolOpt('disable_ssl_certificate_validation',
91 default=False,
92 help="Set to True if using self-signed SSL certificates."),
Rob Crittendena7db6692014-11-23 18:44:38 -050093 cfg.StrOpt('ca_certificates_file',
94 default=None,
95 help='Specify a CA bundle file to use in verifying a '
96 'TLS (https) server certificate.'),
Jay Pipes7c88eb22013-01-16 21:32:43 -050097 cfg.StrOpt('uri',
Brant Knudsonc7ca3342013-03-28 21:08:50 -050098 help="Full URI of the OpenStack Identity API (Keystone), v2"),
99 cfg.StrOpt('uri_v3',
100 help='Full URI of the OpenStack Identity API (Keystone), v3'),
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000101 cfg.StrOpt('auth_version',
102 default='v2',
103 help="Identity API version to be used for authentication "
Andrea Frittoli77f9da42014-02-06 11:18:19 +0000104 "for API tests."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500105 cfg.StrOpt('region',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100106 default='RegionOne',
Arata Notsu8f440392013-09-13 16:14:20 +0900107 help="The identity region name to use. Also used as the other "
108 "services' region name unless they are set explicitly. "
109 "If no such region is found in the service catalog, the "
110 "first found one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000111 cfg.StrOpt('endpoint_type',
112 default='publicURL',
113 choices=['public', 'admin', 'internal',
114 'publicURL', 'adminURL', 'internalURL'],
115 help="The endpoint type to use for the identity service."),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100116 cfg.StrOpt('username',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100117 help="Username to use for Nova API requests."),
118 cfg.StrOpt('tenant_name',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100119 help="Tenant name to use for Nova API requests."),
Russell Sim7f894a52013-09-13 10:35:21 +1000120 cfg.StrOpt('admin_role',
121 default='admin',
122 help="Role required to administrate keystone."),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100123 cfg.StrOpt('password',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100124 help="API key to use when authenticating.",
125 secret=True),
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100126 cfg.StrOpt('domain_name',
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100127 help="Domain name for authentication (Keystone V3)."
128 "The same domain applies to user and project"),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100129 cfg.StrOpt('alt_username',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100130 help="Username of alternate user to use for Nova API "
131 "requests."),
132 cfg.StrOpt('alt_tenant_name',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100133 help="Alternate user's Tenant name to use for Nova API "
134 "requests."),
135 cfg.StrOpt('alt_password',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100136 help="API key to use when authenticating as alternate user.",
137 secret=True),
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100138 cfg.StrOpt('alt_domain_name',
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100139 help="Alternate domain name for authentication (Keystone V3)."
140 "The same domain applies to user and project"),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100141 cfg.StrOpt('admin_username',
Dirk Mueller14bd5622014-01-14 19:33:05 +0100142 help="Administrative Username to use for "
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100143 "Keystone API requests."),
144 cfg.StrOpt('admin_tenant_name',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100145 help="Administrative Tenant name to use for Keystone API "
146 "requests."),
147 cfg.StrOpt('admin_password',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100148 help="API key to use when authenticating as admin.",
149 secret=True),
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100150 cfg.StrOpt('admin_domain_name',
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100151 help="Admin domain name for authentication (Keystone V3)."
152 "The same domain applies to user and project"),
Martin Pavlasek4c3f2ab2014-04-15 17:15:15 +0200153 cfg.StrOpt('default_domain_id',
154 default='default',
155 help="ID of the default domain"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500156]
Jay Pipes3f981df2012-03-27 18:59:44 -0400157
Matthew Treinishd5021a72014-01-09 18:42:51 +0000158identity_feature_group = cfg.OptGroup(name='identity-feature-enabled',
159 title='Enabled Identity Features')
160
161IdentityFeatureGroup = [
162 cfg.BoolOpt('trust',
163 default=True,
164 help='Does the identity service have delegation and '
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000165 'impersonation enabled'),
166 cfg.BoolOpt('api_v2',
167 default=True,
168 help='Is the v2 identity API enabled'),
169 cfg.BoolOpt('api_v3',
170 default=True,
171 help='Is the v3 identity API enabled'),
Matthew Treinishd5021a72014-01-09 18:42:51 +0000172]
173
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500174compute_group = cfg.OptGroup(name='compute',
175 title='Compute Service Options')
Rohit Karajgie1b050d2011-12-02 16:13:18 -0800176
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500177ComputeGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500178 cfg.StrOpt('image_ref',
Matthew Treinishafcb6b42014-05-27 13:50:02 -0400179 help="Valid primary image reference to be used in tests. "
180 "This is a required option"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500181 cfg.StrOpt('image_ref_alt',
Matthew Treinishafcb6b42014-05-27 13:50:02 -0400182 help="Valid secondary image reference to be used in tests. "
183 "This is a required option, but if only one image is "
184 "available duplicate the value of image_ref above"),
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +0900185 cfg.StrOpt('flavor_ref',
186 default="1",
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500187 help="Valid primary flavor to use in tests."),
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +0900188 cfg.StrOpt('flavor_ref_alt',
189 default="2",
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500190 help='Valid secondary flavor to be used in tests.'),
Maru Newbyaf292e82013-05-20 21:32:28 +0000191 cfg.StrOpt('image_ssh_user',
192 default="root",
193 help="User name used to authenticate to an instance."),
Ryan Hsucb2e1252013-09-03 21:44:49 -0700194 cfg.StrOpt('image_ssh_password',
195 default="password",
196 help="Password used to authenticate to an instance."),
Maru Newbyaf292e82013-05-20 21:32:28 +0000197 cfg.StrOpt('image_alt_ssh_user',
198 default="root",
199 help="User name used to authenticate to an instance using "
200 "the alternate image."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500201 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400202 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500203 help="Time in seconds between build status checks."),
204 cfg.IntOpt('build_timeout',
205 default=300,
Hugh Saunders5b139ad2014-12-15 09:08:41 +0000206 help="Timeout in seconds to wait for an instance to build. "
207 "Other services that do not define build_timeout will "
Lucian Petrut1cfe2982015-01-06 13:57:36 +0200208 "inherit this value."),
David Kranz968f1b32015-06-18 16:58:18 -0400209 cfg.StrOpt('ssh_shell_prologue',
210 default="set -eu -o pipefail; PATH=$$PATH:/sbin;",
211 help="Shell fragments to use before executing a command "
212 "when sshing to a guest."),
Attila Fazekas423834d2014-03-14 17:33:13 +0100213 cfg.StrOpt('ssh_auth_method',
214 default='keypair',
215 help="Auth method used for authenticate to the instance. "
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000216 "Valid choices are: keypair, configured, adminpass "
217 "and disabled. "
218 "Keypair: start the servers with a ssh keypair. "
219 "Configured: use the configured user and password. "
220 "Adminpass: use the injected adminPass. "
221 "Disabled: avoid using ssh when it is an option."),
Attila Fazekas423834d2014-03-14 17:33:13 +0100222 cfg.StrOpt('ssh_connect_method',
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000223 default='floating',
Attila Fazekas423834d2014-03-14 17:33:13 +0100224 help="How to connect to the instance? "
225 "fixed: using the first ip belongs the fixed network "
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000226 "floating: creating and using a floating ip."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500227 cfg.StrOpt('ssh_user',
228 default='root',
229 help="User name used to authenticate to an instance."),
Nachi Ueno6d580be2013-07-24 10:58:11 -0700230 cfg.IntOpt('ping_timeout',
Darragh O'Reilly6b636672014-01-24 12:17:40 +0000231 default=120,
Nachi Ueno6d580be2013-07-24 10:58:11 -0700232 help="Timeout in seconds to wait for ping to "
233 "succeed."),
Richard Wintersf87059b2015-02-17 11:46:54 -0500234 cfg.IntOpt('ping_size',
235 default=56,
236 help="The packet size for ping packets originating "
237 "from remote linux hosts"),
238 cfg.IntOpt('ping_count',
239 default=1,
240 help="The number of ping packets originating from remote "
241 "linux hosts"),
Attila Fazekas0abbc952013-07-01 19:19:42 +0200242 cfg.IntOpt('ready_wait',
243 default=0,
DennyZhang8912d012013-09-25 18:08:34 -0500244 help="Additional wait time for clean state, when there is "
245 "no OS-EXT-STS extension available"),
Attila Fazekasb0661652013-05-08 13:01:36 +0200246 cfg.StrOpt('fixed_network_name',
Chris Hoge8f1401b2014-11-19 14:00:37 -0800247 help="Name of the fixed network that is visible to all test "
Matthew Treinish03feae02015-03-27 10:25:45 -0400248 "tenants. If multiple networks are available for a tenant"
249 " this is the network which will be used for creating "
250 "servers if tempest does not create a network or a "
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000251 "network is not specified elsewhere. It may be used for "
252 "ssh validation only if floating IPs are disabled."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500253 cfg.StrOpt('network_for_ssh',
254 default='public',
Chris Hoge8f1401b2014-11-19 14:00:37 -0800255 help="Network used for SSH connections. Ignored if "
Matthew Treinishe5cca002015-05-11 15:36:50 -0400256 "use_floatingip_for_ssh=true or run_validation=false."),
fujioka yuuichia11994e2013-07-09 11:19:51 +0900257 cfg.BoolOpt('use_floatingip_for_ssh',
258 default=True,
Tushar Kalra95a482d2014-03-25 14:24:43 -0700259 help="Does SSH use Floating IPs?"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500260 cfg.StrOpt('catalog_type',
261 default='compute',
262 help="Catalog type of the Compute service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900263 cfg.StrOpt('region',
264 default='',
265 help="The compute region name to use. If empty, the value "
266 "of identity.region is used instead. If no such region "
267 "is found in the service catalog, the first found one is "
268 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000269 cfg.StrOpt('endpoint_type',
270 default='publicURL',
271 choices=['public', 'admin', 'internal',
272 'publicURL', 'adminURL', 'internalURL'],
273 help="The endpoint type to use for the compute service."),
Ryan Hsucb2e1252013-09-03 21:44:49 -0700274 cfg.StrOpt('volume_device_name',
275 default='vdb',
276 help="Expected device name when a volume is attached to "
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900277 "an instance"),
278 cfg.IntOpt('shelved_offload_time',
279 default=0,
280 help='Time in seconds before a shelved instance is eligible '
281 'for removing from a host. -1 never offload, 0 offload '
282 'when shelved. This time should be the same as the time '
283 'of nova.conf, and some tests will run for as long as the '
Ghanshyam06a5b4a2014-04-11 17:32:45 +0900284 'time.'),
285 cfg.StrOpt('floating_ip_range',
286 default='10.0.0.0/29',
287 help='Unallocated floating IP range, which will be used to '
Chris Hoge8f1401b2014-11-19 14:00:37 -0800288 'test the floating IP bulk feature for CRUD operation. '
289 'This block must not overlap an existing floating IP '
290 'pool.')
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500291]
Rohit Karajgie1b050d2011-12-02 16:13:18 -0800292
Matthew Treinishd5c96022013-10-17 21:51:23 +0000293compute_features_group = cfg.OptGroup(name='compute-feature-enabled',
294 title="Enabled Compute Service Features")
295
296ComputeFeaturesGroup = [
297 cfg.BoolOpt('disk_config',
298 default=True,
299 help="If false, skip disk config tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000300 cfg.ListOpt('api_extensions',
301 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800302 help='A list of enabled compute extensions with a special '
Ken'ichi Ohmichia7e68712014-05-06 10:47:26 +0900303 'entry all which indicates every extension is enabled. '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300304 'Each extension should be specified with alias name. '
305 'Empty list indicates all extensions are disabled'),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000306 cfg.BoolOpt('change_password',
307 default=False,
308 help="Does the test environment support changing the admin "
309 "password?"),
Adam Gandelmanc6eefb42014-07-15 16:44:08 -0700310 cfg.BoolOpt('console_output',
311 default=True,
312 help="Does the test environment support obtaining instance "
313 "serial console output?"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000314 cfg.BoolOpt('resize',
315 default=False,
316 help="Does the test environment support resizing?"),
Eric Windischb5538072014-03-09 23:47:35 -0400317 cfg.BoolOpt('pause',
318 default=True,
319 help="Does the test environment support pausing?"),
David Shrewsbury25f666f2014-07-22 12:17:59 -0400320 cfg.BoolOpt('shelve',
321 default=True,
322 help="Does the test environment support shelving/unshelving?"),
Eric Windischaeb7e842014-03-10 01:10:50 -0400323 cfg.BoolOpt('suspend',
324 default=True,
325 help="Does the test environment support suspend/resume?"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000326 cfg.BoolOpt('live_migration',
Joe Gordon31a139a2014-11-17 16:39:04 -0800327 default=True,
Matthew Treinishd5c96022013-10-17 21:51:23 +0000328 help="Does the test environment support live migration "
329 "available?"),
330 cfg.BoolOpt('block_migration_for_live_migration',
331 default=False,
332 help="Does the test environment use block devices for live "
333 "migration"),
334 cfg.BoolOpt('block_migrate_cinder_iscsi',
335 default=False,
336 help="Does the test environment block migration support "
Joe Gordon0a5788f2015-03-17 11:29:38 -0700337 "cinder iSCSI volumes. Note, libvirt doesn't support this, "
338 "see https://bugs.launchpad.net/nova/+bug/1398999"),
Matt Riedemannbb9f7042015-03-03 08:53:11 -0800339 # TODO(gilliard): Remove live_migrate_paused_instances at juno-eol.
340 cfg.BoolOpt('live_migrate_paused_instances',
341 default=False,
342 help="Does the test system allow live-migration of paused "
343 "instances? Note, this is more than just the ANDing of "
344 "paused and live_migrate, but all 3 should be set to True "
345 "to run those tests"),
Ghanshyam Mann41c17572014-02-27 18:52:56 +0900346 cfg.BoolOpt('vnc_console',
347 default=False,
348 help='Enable VNC console. This configuration value should '
Ghanshyam70876d02014-03-11 11:40:18 +0900349 'be same as [nova.vnc]->vnc_enabled in nova.conf'),
350 cfg.BoolOpt('spice_console',
351 default=False,
352 help='Enable Spice console. This configuration value should '
353 'be same as [nova.spice]->enabled in nova.conf'),
354 cfg.BoolOpt('rdp_console',
355 default=False,
356 help='Enable RDP console. This configuration value should '
Adam Gandelman2e37b4f2014-06-18 17:34:21 -0700357 'be same as [nova.rdp]->enabled in nova.conf'),
358 cfg.BoolOpt('rescue',
359 default=True,
360 help='Does the test environment support instance rescue '
Ghanshyam9c2e50d2014-07-22 21:32:05 +0900361 'mode?'),
362 cfg.BoolOpt('enable_instance_password',
363 default=True,
364 help='Enables returning of the instance password by the '
365 'relevant server API calls such as create, rebuild '
Adam Gandelman7186f7a2014-07-23 09:28:56 -0400366 'or rescue.'),
367 cfg.BoolOpt('interface_attach',
368 default=True,
369 help='Does the test environment support dynamic network '
Adam Gandelmanfbc95ac2014-06-19 17:33:43 -0700370 'interface attachment?'),
371 cfg.BoolOpt('snapshot',
372 default=True,
373 help='Does the test environment support creating snapshot '
Matthew Treinishdfd7ac02015-02-09 17:47:31 -0500374 'images of running instances?'),
375 cfg.BoolOpt('ec2_api',
376 default=True,
Matt Riedemann17940732015-03-13 14:18:19 +0000377 help='Does the test environment have the ec2 api running?'),
378 # TODO(mriedem): Remove preserve_ports once juno-eol happens.
379 cfg.BoolOpt('preserve_ports',
380 default=False,
381 help='Does Nova preserve preexisting ports from Neutron '
382 'when deleting an instance? This should be set to True '
383 'if testing Kilo+ Nova.')
Matthew Treinishd5c96022013-10-17 21:51:23 +0000384]
385
386
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500387image_group = cfg.OptGroup(name='image',
388 title="Image Service Options")
Jay Pipesf38eaac2012-06-21 13:37:35 -0400389
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500390ImageGroup = [
Matthew Treinish72ea4422013-02-07 14:42:49 -0500391 cfg.StrOpt('catalog_type',
392 default='image',
Sean Dague83401992013-05-06 17:46:36 -0400393 help='Catalog type of the Image service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900394 cfg.StrOpt('region',
395 default='',
396 help="The image region name to use. If empty, the value "
397 "of identity.region is used instead. If no such region "
398 "is found in the service catalog, the first found one is "
399 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000400 cfg.StrOpt('endpoint_type',
401 default='publicURL',
402 choices=['public', 'admin', 'internal',
403 'publicURL', 'adminURL', 'internalURL'],
404 help="The endpoint type to use for the image service."),
Sean Dague83401992013-05-06 17:46:36 -0400405 cfg.StrOpt('http_image',
406 default='http://download.cirros-cloud.net/0.3.1/'
407 'cirros-0.3.1-x86_64-uec.tar.gz',
Lucian Petrut1cfe2982015-01-06 13:57:36 +0200408 help='http accessible image'),
409 cfg.IntOpt('build_timeout',
410 default=300,
411 help="Timeout in seconds to wait for an image to "
412 "become available."),
413 cfg.IntOpt('build_interval',
414 default=1,
415 help="Time in seconds between image operation status "
416 "checks.")
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500417]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400418
Matthew Treinish2b5287d2013-10-22 17:40:34 +0000419image_feature_group = cfg.OptGroup(name='image-feature-enabled',
420 title='Enabled image service features')
421
422ImageFeaturesGroup = [
423 cfg.BoolOpt('api_v2',
424 default=True,
425 help="Is the v2 image API enabled"),
426 cfg.BoolOpt('api_v1',
427 default=True,
428 help="Is the v1 image API enabled"),
bkopilov81aaae72015-05-15 23:46:25 +0300429 cfg.BoolOpt('deactivate_image',
430 default=False,
431 help="Is the deactivate-image feature enabled."
432 " The feature has been integrated since Kilo."),
Matthew Treinish2b5287d2013-10-22 17:40:34 +0000433]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400434
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500435network_group = cfg.OptGroup(name='network',
436 title='Network Service Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600437
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500438NetworkGroup = [
439 cfg.StrOpt('catalog_type',
440 default='network',
Mark McClainf2982e82013-07-06 17:48:03 -0400441 help='Catalog type of the Neutron service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900442 cfg.StrOpt('region',
443 default='',
444 help="The network region name to use. If empty, the value "
445 "of identity.region is used instead. If no such region "
446 "is found in the service catalog, the first found one is "
447 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000448 cfg.StrOpt('endpoint_type',
449 default='publicURL',
450 choices=['public', 'admin', 'internal',
451 'publicURL', 'adminURL', 'internalURL'],
452 help="The endpoint type to use for the network service."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500453 cfg.StrOpt('tenant_network_cidr',
454 default="10.100.0.0/16",
Henry Gessauffda37a2014-01-16 11:17:55 -0500455 help="The cidr block to allocate tenant ipv4 subnets from"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500456 cfg.IntOpt('tenant_network_mask_bits',
Attila Fazekas8ea181b2013-07-13 16:26:14 +0200457 default=28,
Henry Gessauffda37a2014-01-16 11:17:55 -0500458 help="The mask bits for tenant ipv4 subnets"),
459 cfg.StrOpt('tenant_network_v6_cidr',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400460 default="2003::/48",
Henry Gessauffda37a2014-01-16 11:17:55 -0500461 help="The cidr block to allocate tenant ipv6 subnets from"),
462 cfg.IntOpt('tenant_network_v6_mask_bits',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400463 default=64,
Henry Gessauffda37a2014-01-16 11:17:55 -0500464 help="The mask bits for tenant ipv6 subnets"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500465 cfg.BoolOpt('tenant_networks_reachable',
466 default=False,
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000467 help="Whether tenant networks can be reached directly from "
468 "the test client. This must be set to True when the "
469 "'fixed' ssh_connect_method is selected."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500470 cfg.StrOpt('public_network_id',
471 default="",
472 help="Id of the public network that provides external "
473 "connectivity"),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000474 cfg.StrOpt('floating_network_name',
475 help="Default floating network name. Used to allocate floating "
476 "IPs when neutron is enabled."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500477 cfg.StrOpt('public_router_id',
478 default="",
479 help="Id of the public router that provides external "
Yair Fried1eb27f52014-11-10 15:24:19 +0200480 "connectivity. This should only be used when Neutron's "
481 "'allow_overlapping_ips' is set to 'False' in "
482 "neutron.conf. usually not needed past 'Grizzly' release"),
izikpensod9a01a62014-02-17 20:02:32 +0200483 cfg.IntOpt('build_timeout',
484 default=300,
485 help="Timeout in seconds to wait for network operation to "
486 "complete."),
487 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400488 default=1,
izikpensod9a01a62014-02-17 20:02:32 +0200489 help="Time in seconds between network operation status "
490 "checks."),
Attila Fazekas640392b2014-06-12 15:58:10 +0200491 cfg.ListOpt('dns_servers',
492 default=["8.8.8.8", "8.8.4.4"],
Itzik Brown5be44582014-12-24 09:05:13 +0200493 help="List of dns servers which should be used"
Itzik Brown2ca01cd2014-12-08 12:58:20 +0200494 " for subnet creation"),
495 cfg.StrOpt('port_vnic_type',
496 choices=[None, 'normal', 'direct', 'macvtap'],
497 help="vnic_type to use when Launching instances"
498 " with pre-configured ports."
499 " Supported ports are:"
500 " ['normal','direct','macvtap']"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500501]
Jay Pipes3f981df2012-03-27 18:59:44 -0400502
Matthew Treinishe3d26142013-11-26 19:14:58 +0000503network_feature_group = cfg.OptGroup(name='network-feature-enabled',
504 title='Enabled network service features')
505
506NetworkFeaturesGroup = [
Matthew Treinishe2e33cf2014-03-03 19:28:41 +0000507 cfg.BoolOpt('ipv6',
508 default=True,
509 help="Allow the execution of IPv6 tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000510 cfg.ListOpt('api_extensions',
511 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800512 help='A list of enabled network extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300513 'entry all which indicates every extension is enabled. '
514 'Empty list indicates all extensions are disabled'),
Sean M. Collinsdd27a4d2014-05-13 10:33:15 -0400515 cfg.BoolOpt('ipv6_subnet_attributes',
516 default=False,
517 help="Allow the execution of IPv6 subnet tests that use "
518 "the extended IPv6 attributes ipv6_ra_mode "
519 "and ipv6_address_mode"
Mark McClain6e07c0d2014-10-10 11:25:03 -0400520 ),
Itzik Brownbeb30d32015-03-29 09:42:54 +0300521 cfg.BoolOpt('port_admin_state_change',
522 default=True,
523 help="Does the test environment support changing"
524 " port admin state"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000525]
526
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300527messaging_group = cfg.OptGroup(name='messaging',
528 title='Messaging Service')
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500529
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300530MessagingGroup = [
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500531 cfg.StrOpt('catalog_type',
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300532 default='messaging',
533 help='Catalog type of the Messaging service.'),
Jorge Chai83ba4ee2014-04-15 18:58:08 +0000534 cfg.IntOpt('max_queues_per_page',
535 default=20,
536 help='The maximum number of queue records per page when '
537 'listing queues'),
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400538 cfg.IntOpt('max_queue_metadata',
539 default=65536,
540 help='The maximum metadata size for a queue'),
541 cfg.IntOpt('max_messages_per_page',
542 default=20,
543 help='The maximum number of queue message per page when '
544 'listing (or) posting messages'),
545 cfg.IntOpt('max_message_size',
546 default=262144,
547 help='The maximum size of a message body'),
548 cfg.IntOpt('max_messages_per_claim',
549 default=20,
550 help='The maximum number of messages per claim'),
551 cfg.IntOpt('max_message_ttl',
552 default=1209600,
553 help='The maximum ttl for a message'),
554 cfg.IntOpt('max_claim_ttl',
555 default=43200,
556 help='The maximum ttl for a claim'),
557 cfg.IntOpt('max_claim_grace',
558 default=43200,
559 help='The maximum grace period for a claim'),
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500560]
561
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000562validation_group = cfg.OptGroup(name='validation',
563 title='SSH Validation options')
564
565ValidationGroup = [
Matthew Treinishe5cca002015-05-11 15:36:50 -0400566 cfg.BoolOpt('run_validation',
567 default=False,
568 help='Enable ssh on created servers and creation of additional'
569 ' validation resources to enable remote access',
570 deprecated_opts=[cfg.DeprecatedOpt('run_ssh',
571 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000572 cfg.StrOpt('connect_method',
573 default='floating',
574 choices=['fixed', 'floating'],
575 help='Default IP type used for validation: '
576 '-fixed: uses the first IP belonging to the fixed network '
577 '-floating: creates and uses a floating IP'),
578 cfg.StrOpt('auth_method',
579 default='keypair',
580 choices=['keypair'],
581 help='Default authentication method to the instance. '
582 'Only ssh via keypair is supported for now. '
583 'Additional methods will be handled in a separate spec.'),
584 cfg.IntOpt('ip_version_for_ssh',
585 default=4,
nithya-ganesan67da2872015-02-08 23:13:48 +0000586 help='Default IP version for ssh connections.',
587 deprecated_opts=[cfg.DeprecatedOpt('ip_version_for_ssh',
588 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000589 cfg.IntOpt('ping_timeout',
590 default=120,
591 help='Timeout in seconds to wait for ping to succeed.'),
592 cfg.IntOpt('connect_timeout',
593 default=60,
594 help='Timeout in seconds to wait for the TCP connection to be '
nithya-ganesan67da2872015-02-08 23:13:48 +0000595 'successful.',
596 deprecated_opts=[cfg.DeprecatedOpt('ssh_channel_timeout',
597 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000598 cfg.IntOpt('ssh_timeout',
599 default=300,
nithya-ganesan67da2872015-02-08 23:13:48 +0000600 help='Timeout in seconds to wait for the ssh banner.',
601 deprecated_opts=[cfg.DeprecatedOpt('ssh_timeout',
602 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000603]
604
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500605volume_group = cfg.OptGroup(name='volume',
606 title='Block Storage Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600607
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500608VolumeGroup = [
609 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400610 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500611 help='Time in seconds between volume availability checks.'),
612 cfg.IntOpt('build_timeout',
613 default=300,
Eric Harney9b1f89c2014-10-14 14:40:19 -0400614 help='Timeout in seconds to wait for a volume to become '
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500615 'available.'),
616 cfg.StrOpt('catalog_type',
Matthew Treinisheb724512013-10-25 15:12:59 +0000617 default='volume',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500618 help="Catalog type of the Volume Service"),
Arata Notsu8f440392013-09-13 16:14:20 +0900619 cfg.StrOpt('region',
620 default='',
621 help="The volume region name to use. If empty, the value "
622 "of identity.region is used instead. If no such region "
623 "is found in the service catalog, the first found one is "
624 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000625 cfg.StrOpt('endpoint_type',
626 default='publicURL',
627 choices=['public', 'admin', 'internal',
628 'publicURL', 'adminURL', 'internalURL'],
629 help="The endpoint type to use for the volume service."),
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100630 cfg.StrOpt('backend1_name',
Giulio Fidentef4fa8942013-05-28 18:48:03 +0200631 default='BACKEND_1',
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100632 help="Name of the backend1 (must be declared in cinder.conf)"),
633 cfg.StrOpt('backend2_name',
Giulio Fidentef4fa8942013-05-28 18:48:03 +0200634 default='BACKEND_2',
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100635 help="Name of the backend2 (must be declared in cinder.conf)"),
Adam Gandelman827ad332013-06-24 17:04:09 -0700636 cfg.StrOpt('storage_protocol',
637 default='iSCSI',
638 help='Backend protocol to target when creating volume types'),
639 cfg.StrOpt('vendor_name',
640 default='Open Source',
641 help='Backend vendor to target when creating volume types'),
Ryan Hsua67f4632013-08-29 16:03:06 -0700642 cfg.StrOpt('disk_format',
643 default='raw',
644 help='Disk format to use when copying a volume to image'),
Jerry Cai9733d0e2014-03-19 15:50:49 +0800645 cfg.IntOpt('volume_size',
646 default=1,
647 help='Default size in GB for volumes created by volumes tests'),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500648]
K Jonathan Harkerd6ba4b42012-12-18 13:50:47 -0800649
Matthew Treinishd5c96022013-10-17 21:51:23 +0000650volume_feature_group = cfg.OptGroup(name='volume-feature-enabled',
651 title='Enabled Cinder Features')
652
653VolumeFeaturesGroup = [
654 cfg.BoolOpt('multi_backend',
655 default=False,
Matthew Treinishe3d26142013-11-26 19:14:58 +0000656 help="Runs Cinder multi-backend test (requires 2 backends)"),
Giulio Fidente74b08ad2014-01-18 04:02:51 +0100657 cfg.BoolOpt('backup',
658 default=True,
659 help='Runs Cinder volumes backup test'),
JordanPbce55532014-03-19 12:10:32 +0100660 cfg.BoolOpt('snapshot',
661 default=True,
662 help='Runs Cinder volume snapshot test'),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000663 cfg.ListOpt('api_extensions',
664 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800665 help='A list of enabled volume extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300666 'entry all which indicates every extension is enabled. '
667 'Empty list indicates all extensions are disabled'),
Zhi Kun Liubb363a22013-11-28 18:47:39 +0800668 cfg.BoolOpt('api_v1',
669 default=True,
670 help="Is the v1 volume API enabled"),
Zhi Kun Liu8cc3c842014-01-07 10:44:34 +0800671 cfg.BoolOpt('api_v2',
672 default=True,
673 help="Is the v2 volume API enabled"),
bkopilov8a657ae2015-05-11 11:45:23 +0300674 cfg.BoolOpt('bootable',
675 default=False,
676 help='Update bootable status of a volume '
677 'Not implemented on icehouse ')
Matthew Treinishd5c96022013-10-17 21:51:23 +0000678]
679
Daryl Walleck587385b2012-03-03 13:00:26 -0600680
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500681object_storage_group = cfg.OptGroup(name='object-storage',
682 title='Object Storage Service Options')
Attila Fazekasa23f5002012-10-23 19:32:45 +0200683
DennyZhang1e71b612013-09-26 12:35:40 -0500684ObjectStoreGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500685 cfg.StrOpt('catalog_type',
686 default='object-store',
687 help="Catalog type of the Object-Storage service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900688 cfg.StrOpt('region',
689 default='',
690 help="The object-storage region name to use. If empty, the "
691 "value of identity.region is used instead. If no such "
692 "region is found in the service catalog, the first found "
693 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000694 cfg.StrOpt('endpoint_type',
695 default='publicURL',
696 choices=['public', 'admin', 'internal',
697 'publicURL', 'adminURL', 'internalURL'],
698 help="The endpoint type to use for the object-store service."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000699 cfg.IntOpt('container_sync_timeout',
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900700 default=600,
Fabien Boucher2178d312013-12-31 15:38:57 +0100701 help="Number of seconds to time on waiting for a container "
nayna-patelb4989b32013-01-09 06:25:13 +0000702 "to container synchronization complete."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000703 cfg.IntOpt('container_sync_interval',
nayna-patelb4989b32013-01-09 06:25:13 +0000704 default=5,
Fabien Boucher2178d312013-12-31 15:38:57 +0100705 help="Number of seconds to wait while looping to check the "
nayna-patelb4989b32013-01-09 06:25:13 +0000706 "status of a container to container synchronization"),
Matthew Treinish3fdb80c2013-08-15 11:13:19 -0400707 cfg.StrOpt('operator_role',
708 default='Member',
709 help="Role to add to users created for swift tests to "
710 "enable creating containers"),
Matthew Treinish998c91d2014-03-01 12:39:49 -0500711 cfg.StrOpt('reseller_admin_role',
712 default='ResellerAdmin',
713 help="User role that has reseller admin"),
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900714 cfg.StrOpt('realm_name',
715 default='realm1',
716 help="Name of sync realm. A sync realm is a set of clusters "
717 "that have agreed to allow container syncing with each "
718 "other. Set the same realm name as Swift's "
719 "container-sync-realms.conf"),
720 cfg.StrOpt('cluster_name',
721 default='name1',
722 help="One name of cluster which is set in the realm whose name "
723 "is set in 'realm_name' item in this file. Set the "
724 "same cluster name as Swift's container-sync-realms.conf"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500725]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200726
Matthew Treinishd5c96022013-10-17 21:51:23 +0000727object_storage_feature_group = cfg.OptGroup(
728 name='object-storage-feature-enabled',
729 title='Enabled object-storage features')
730
731ObjectStoreFeaturesGroup = [
Matthew Treinish20345382013-12-13 17:04:23 +0000732 cfg.ListOpt('discoverable_apis',
733 default=['all'],
734 help="A list of the enabled optional discoverable apis. "
735 "A single entry, all, indicates that all of these "
736 "features are expected to be enabled"),
Daisuke Morita20a183f2014-08-25 14:43:36 +0900737 cfg.BoolOpt('container_sync',
738 default=True,
739 help="Execute (old style) container-sync tests"),
740 cfg.BoolOpt('object_versioning',
741 default=True,
742 help="Execute object-versioning tests"),
743 cfg.BoolOpt('discoverability',
744 default=True,
745 help="Execute discoverability tests"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000746]
747
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800748database_group = cfg.OptGroup(name='database',
749 title='Database Service Options')
750
751DatabaseGroup = [
752 cfg.StrOpt('catalog_type',
753 default='database',
754 help="Catalog type of the Database service."),
755 cfg.StrOpt('db_flavor_ref',
756 default="1",
757 help="Valid primary flavor to use in database tests."),
Peter Stachowski320f9c72014-04-21 16:13:23 -0400758 cfg.StrOpt('db_current_version',
759 default="v1.0",
760 help="Current database version to use in database tests."),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800761]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200762
Steve Bakerc60e4e32013-05-06 15:22:41 +1200763orchestration_group = cfg.OptGroup(name='orchestration',
764 title='Orchestration Service Options')
765
766OrchestrationGroup = [
767 cfg.StrOpt('catalog_type',
768 default='orchestration',
769 help="Catalog type of the Orchestration service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900770 cfg.StrOpt('region',
771 default='',
772 help="The orchestration region name to use. If empty, the "
773 "value of identity.region is used instead. If no such "
774 "region is found in the service catalog, the first found "
775 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000776 cfg.StrOpt('endpoint_type',
777 default='publicURL',
778 choices=['public', 'admin', 'internal',
779 'publicURL', 'adminURL', 'internalURL'],
780 help="The endpoint type to use for the orchestration service."),
Matthew Treinishdb9721d2015-03-18 14:21:28 -0400781 cfg.StrOpt('stack_owner_role', default='heat_stack_owner',
782 help='Role required for users to be able to manage stacks'),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200783 cfg.IntOpt('build_interval',
784 default=1,
785 help="Time in seconds between build status checks."),
786 cfg.IntOpt('build_timeout',
Matthew Treinisha2dfd492014-04-15 11:15:34 -0400787 default=1200,
Steve Bakerc60e4e32013-05-06 15:22:41 +1200788 help="Timeout in seconds to wait for a stack to build."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200789 cfg.StrOpt('instance_type',
Steve Baker9e86b832013-05-22 15:40:28 +1200790 default='m1.micro',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200791 help="Instance type for tests. Needs to be big enough for a "
792 "full OS plus the test workload"),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200793 cfg.StrOpt('keypair_name',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200794 help="Name of existing keypair to launch servers with."),
Clint Byrum71f27632013-09-09 11:41:32 -0700795 cfg.IntOpt('max_template_size',
Joe Gordon0e51b222013-10-24 14:11:10 +0100796 default=524288,
Clint Byrum71f27632013-09-09 11:41:32 -0700797 help="Value must match heat configuration of the same name."),
Steven Hardyfdc6bd72014-03-21 16:56:04 +0000798 cfg.IntOpt('max_resources_per_stack',
799 default=1000,
800 help="Value must match heat configuration of the same name."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200801]
802
803
Yassine Lamgarchalb158d412013-12-27 19:29:42 +0100804telemetry_group = cfg.OptGroup(name='telemetry',
805 title='Telemetry Service Options')
806
807TelemetryGroup = [
808 cfg.StrOpt('catalog_type',
809 default='metering',
810 help="Catalog type of the Telemetry service."),
JordanPfc62c902014-02-26 14:47:28 +0000811 cfg.StrOpt('endpoint_type',
812 default='publicURL',
813 choices=['public', 'admin', 'internal',
814 'publicURL', 'adminURL', 'internalURL'],
815 help="The endpoint type to use for the telemetry service."),
Vadim Rovachev7bcea352013-12-26 15:56:17 +0400816 cfg.BoolOpt('too_slow_to_test',
817 default=True,
818 help="This variable is used as flag to enable "
819 "notification tests")
Yassine Lamgarchalb158d412013-12-27 19:29:42 +0100820]
821
822
Julie Pichond1017642013-07-24 16:37:23 +0100823dashboard_group = cfg.OptGroup(name="dashboard",
824 title="Dashboard options")
825
826DashboardGroup = [
827 cfg.StrOpt('dashboard_url',
828 default='http://localhost/',
829 help="Where the dashboard can be found"),
830 cfg.StrOpt('login_url',
831 default='http://localhost/auth/login/',
832 help="Login page for the dashboard"),
833]
834
835
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400836data_processing_group = cfg.OptGroup(name="data_processing",
837 title="Data Processing options")
838
839DataProcessingGroup = [
840 cfg.StrOpt('catalog_type',
841 default='data_processing',
JordanPfc62c902014-02-26 14:47:28 +0000842 help="Catalog type of the data processing service."),
843 cfg.StrOpt('endpoint_type',
844 default='publicURL',
845 choices=['public', 'admin', 'internal',
846 'publicURL', 'adminURL', 'internalURL'],
847 help="The endpoint type to use for the data processing "
848 "service."),
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400849]
850
851
Luigi Toscano14d172d2015-01-23 16:37:47 +0100852data_processing_feature_group = cfg.OptGroup(
853 name="data_processing-feature-enabled",
854 title="Enabled Data Processing features")
855
856DataProcessingFeaturesGroup = [
857 cfg.ListOpt('plugins',
858 default=["vanilla", "hdp"],
859 help="List of enabled data processing plugins")
860]
861
862
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500863boto_group = cfg.OptGroup(name='boto',
864 title='EC2/S3 options')
DennyZhang1e71b612013-09-26 12:35:40 -0500865BotoGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500866 cfg.StrOpt('ec2_url',
867 default="http://localhost:8773/services/Cloud",
868 help="EC2 URL"),
869 cfg.StrOpt('s3_url',
870 default="http://localhost:8080",
871 help="S3 URL"),
872 cfg.StrOpt('aws_secret',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500873 help="AWS Secret Key",
874 secret=True),
875 cfg.StrOpt('aws_access',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500876 help="AWS Access Key"),
Attila Fazekas27dd92e2014-02-21 14:49:40 +0100877 cfg.StrOpt('aws_zone',
878 default="nova",
879 help="AWS Zone for EC2 tests"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500880 cfg.StrOpt('s3_materials_path',
881 default="/opt/stack/devstack/files/images/"
882 "s3-materials/cirros-0.3.0",
883 help="S3 Materials Path"),
884 cfg.StrOpt('ari_manifest',
885 default="cirros-0.3.0-x86_64-initrd.manifest.xml",
886 help="ARI Ramdisk Image manifest"),
887 cfg.StrOpt('ami_manifest',
888 default="cirros-0.3.0-x86_64-blank.img.manifest.xml",
889 help="AMI Machine Image manifest"),
890 cfg.StrOpt('aki_manifest',
891 default="cirros-0.3.0-x86_64-vmlinuz.manifest.xml",
892 help="AKI Kernel Image manifest"),
893 cfg.StrOpt('instance_type',
894 default="m1.tiny",
895 help="Instance type"),
896 cfg.IntOpt('http_socket_timeout',
897 default=3,
898 help="boto Http socket timeout"),
899 cfg.IntOpt('num_retries',
900 default=1,
901 help="boto num_retries on error"),
902 cfg.IntOpt('build_timeout',
903 default=60,
904 help="Status Change Timeout"),
905 cfg.IntOpt('build_interval',
906 default=1,
907 help="Status Change Test Interval"),
908]
Attila Fazekasf7f2d932012-12-13 09:14:38 +0100909
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500910stress_group = cfg.OptGroup(name='stress', title='Stress Test Options')
911
912StressGroup = [
913 cfg.StrOpt('nova_logdir',
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500914 help='Directory containing log files on the compute nodes'),
915 cfg.IntOpt('max_instances',
916 default=16,
917 help='Maximum number of instances to create during test.'),
918 cfg.StrOpt('controller',
David Kranzb9d97502013-05-01 15:55:04 -0400919 help='Controller host.'),
920 # new stress options
921 cfg.StrOpt('target_controller',
David Kranzb9d97502013-05-01 15:55:04 -0400922 help='Controller host.'),
923 cfg.StrOpt('target_ssh_user',
David Kranzb9d97502013-05-01 15:55:04 -0400924 help='ssh user.'),
925 cfg.StrOpt('target_private_key_path',
David Kranzb9d97502013-05-01 15:55:04 -0400926 help='Path to private key.'),
927 cfg.StrOpt('target_logfiles',
David Kranzb9d97502013-05-01 15:55:04 -0400928 help='regexp for list of log files.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000929 cfg.IntOpt('log_check_interval',
David Kranzb9d97502013-05-01 15:55:04 -0400930 default=60,
Marc Koderer32221b8e2013-08-23 13:57:50 +0200931 help='time (in seconds) between log file error checks.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000932 cfg.IntOpt('default_thread_number_per_action',
Marc Koderer32221b8e2013-08-23 13:57:50 +0200933 default=4,
Julien Leloup04d40f72014-01-28 11:17:18 +0100934 help='The number of threads created while stress test.'),
935 cfg.BoolOpt('leave_dirty_stack',
936 default=False,
937 help='Prevent the cleaning (tearDownClass()) between'
938 ' each stress test run if an exception occurs'
Julien Leloupa5ee5422014-02-13 14:29:02 +0100939 ' during this run.'),
940 cfg.BoolOpt('full_clean_stack',
941 default=False,
942 help='Allows a full cleaning process after a stress test.'
943 ' Caution : this cleanup will remove every objects of'
944 ' every tenant.')
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500945]
946
947
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900948scenario_group = cfg.OptGroup(name='scenario', title='Scenario Test Options')
949
950ScenarioGroup = [
951 cfg.StrOpt('img_dir',
952 default='/opt/stack/new/devstack/files/images/'
953 'cirros-0.3.1-x86_64-uec',
954 help='Directory containing image files'),
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300955 cfg.StrOpt('img_file', deprecated_name='qcow2_img_file',
Masayuki Igawa4f71bf02014-02-21 14:02:29 +0900956 default='cirros-0.3.1-x86_64-disk.img',
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300957 help='Image file name'),
958 cfg.StrOpt('img_disk_format',
959 default='qcow2',
960 help='Image disk format'),
961 cfg.StrOpt('img_container_format',
962 default='bare',
963 help='Image container format'),
Evgeny Antyshev7ba0d5f2015-04-28 13:18:07 +0000964 cfg.DictOpt('img_properties', help='Glance image properties. '
965 'Use for custom images which require them'),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900966 cfg.StrOpt('ami_img_file',
967 default='cirros-0.3.1-x86_64-blank.img',
968 help='AMI image file name'),
969 cfg.StrOpt('ari_img_file',
970 default='cirros-0.3.1-x86_64-initrd',
971 help='ARI image file name'),
972 cfg.StrOpt('aki_img_file',
973 default='cirros-0.3.1-x86_64-vmlinuz',
974 help='AKI image file name'),
975 cfg.StrOpt('ssh_user',
976 default='cirros',
Joe Gordonb5e10cd2013-07-10 15:51:12 +0000977 help='ssh username for the image file'),
978 cfg.IntOpt(
979 'large_ops_number',
980 default=0,
981 help="specifies how many resources to request at once. Used "
Yair Fried413bf2d2014-11-19 17:07:11 +0200982 "for large operations testing."),
983 # TODO(yfried): add support for dhcpcd
984 cfg.StrOpt('dhcp_client',
985 default='udhcpc',
986 choices=["udhcpc", "dhclient"],
987 help='DHCP client used by images to renew DCHP lease. '
988 'If left empty, update operation will be skipped. '
989 'Supported clients: "udhcpc", "dhclient"')
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900990]
991
992
Matthew Treinish4c412922013-07-16 15:27:42 -0400993service_available_group = cfg.OptGroup(name="service_available",
994 title="Available OpenStack Services")
995
996ServiceAvailableGroup = [
997 cfg.BoolOpt('cinder',
998 default=True,
999 help="Whether or not cinder is expected to be available"),
Matthew Treinishfaa340d2013-07-19 16:26:21 -04001000 cfg.BoolOpt('neutron',
1001 default=False,
1002 help="Whether or not neutron is expected to be available"),
Matthew Treinish853ae442013-07-19 16:36:07 -04001003 cfg.BoolOpt('glance',
1004 default=True,
1005 help="Whether or not glance is expected to be available"),
Matthew Treinish61e332b2013-07-19 16:42:31 -04001006 cfg.BoolOpt('swift',
1007 default=True,
1008 help="Whether or not swift is expected to be available"),
Matthew Treinish6b41e242013-07-19 16:49:28 -04001009 cfg.BoolOpt('nova',
1010 default=True,
1011 help="Whether or not nova is expected to be available"),
Matthew Treinisha9d43882013-07-19 16:54:52 -04001012 cfg.BoolOpt('heat',
1013 default=False,
1014 help="Whether or not Heat is expected to be available"),
Mehdi Abaakouk8581c0b2013-10-04 10:45:42 +02001015 cfg.BoolOpt('ceilometer',
1016 default=True,
1017 help="Whether or not Ceilometer is expected to be available"),
Julie Pichond1017642013-07-24 16:37:23 +01001018 cfg.BoolOpt('horizon',
1019 default=True,
1020 help="Whether or not Horizon is expected to be available"),
Sergey Lukjanov9c95a252014-03-13 23:59:22 +04001021 cfg.BoolOpt('sahara',
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +04001022 default=False,
Sergey Lukjanov9c95a252014-03-13 23:59:22 +04001023 help="Whether or not Sahara is expected to be available"),
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001024 cfg.BoolOpt('ironic',
1025 default=False,
1026 help="Whether or not Ironic is expected to be available"),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -08001027 cfg.BoolOpt('trove',
1028 default=False,
1029 help="Whether or not Trove is expected to be available"),
Malini Kamalambal8681e922014-08-18 10:10:45 -04001030 cfg.BoolOpt('zaqar',
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -05001031 default=False,
Malini Kamalambal8681e922014-08-18 10:10:45 -04001032 help="Whether or not Zaqar is expected to be available"),
Matthew Treinish4c412922013-07-16 15:27:42 -04001033]
1034
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001035debug_group = cfg.OptGroup(name="debug",
1036 title="Debug System")
1037
1038DebugGroup = [
Sean Daguec522c092014-03-24 10:43:22 -04001039 cfg.StrOpt('trace_requests',
1040 default='',
1041 help="""A regex to determine which requests should be traced.
1042
1043This is a regex to match the caller for rest client requests to be able to
1044selectively trace calls out of specific classes and methods. It largely
1045exists for test development, and is not expected to be used in a real deploy
1046of tempest. This will be matched against the discovered ClassName:method
1047in the test environment.
1048
1049Expected values for this field are:
1050
1051 * ClassName:test_method_name - traces one test_method
1052 * ClassName:setUp(Class) - traces specific setup functions
1053 * ClassName:tearDown(Class) - traces specific teardown functions
1054 * ClassName:_run_cleanups - traces the cleanup functions
1055
1056If nothing is specified, this feature is not enabled. To trace everything
1057specify .* as the regex.
1058""")
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001059]
1060
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001061input_scenario_group = cfg.OptGroup(name="input-scenario",
1062 title="Filters and values for"
1063 " input scenarios")
1064
1065InputScenarioGroup = [
1066 cfg.StrOpt('image_regex',
1067 default='^cirros-0.3.1-x86_64-uec$',
1068 help="Matching images become parameters for scenario tests"),
1069 cfg.StrOpt('flavor_regex',
Andrea Frittoli99901c02014-01-30 18:06:49 +00001070 default='^m1.nano$',
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001071 help="Matching flavors become parameters for scenario tests"),
1072 cfg.StrOpt('non_ssh_image_regex',
1073 default='^.*[Ww]in.*$',
1074 help="SSH verification in tests is skipped"
1075 "for matching images"),
1076 cfg.StrOpt('ssh_user_regex',
Marc Koderer07f5a522015-03-27 15:02:41 +01001077 default="[[\"^.*[Cc]irros.*$\", \"cirros\"]]",
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001078 help="List of user mapped to regex "
1079 "to matching image names."),
1080]
1081
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001082
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001083baremetal_group = cfg.OptGroup(name='baremetal',
Chris Hoge8f1401b2014-11-19 14:00:37 -08001084 title='Baremetal provisioning service options',
1085 help='When enabling baremetal tests, Nova '
1086 'must be configured to use the Ironic '
1087 'driver. The following paremeters for the '
1088 '[compute] section must be disabled: '
1089 'console_output, interface_attach, '
1090 'live_migration, pause, rescue, resize '
1091 'shelve, snapshot, and suspend')
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001092
1093BaremetalGroup = [
1094 cfg.StrOpt('catalog_type',
1095 default='baremetal',
Adam Gandelman4a48a602014-03-20 18:23:18 -07001096 help="Catalog type of the baremetal provisioning service"),
1097 cfg.BoolOpt('driver_enabled',
1098 default=False,
1099 help="Whether the Ironic nova-compute driver is enabled"),
Yuiko Takada1ee1b322014-07-04 09:55:30 +09001100 cfg.StrOpt('driver',
1101 default='fake',
1102 help="Driver name which Ironic uses"),
JordanPfc62c902014-02-26 14:47:28 +00001103 cfg.StrOpt('endpoint_type',
1104 default='publicURL',
1105 choices=['public', 'admin', 'internal',
1106 'publicURL', 'adminURL', 'internalURL'],
1107 help="The endpoint type to use for the baremetal provisioning "
Adam Gandelman4a48a602014-03-20 18:23:18 -07001108 "service"),
1109 cfg.IntOpt('active_timeout',
1110 default=300,
1111 help="Timeout for Ironic node to completely provision"),
1112 cfg.IntOpt('association_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001113 default=30,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001114 help="Timeout for association of Nova instance and Ironic "
1115 "node"),
1116 cfg.IntOpt('power_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001117 default=60,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001118 help="Timeout for Ironic power transitions."),
1119 cfg.IntOpt('unprovision_timeout',
Devananda van der Veend1e52a92015-04-13 12:58:49 -07001120 default=300,
1121 help="Timeout for unprovisioning an Ironic node. "
1122 "Takes longer since Kilo as Ironic performs an extra "
1123 "step in Node cleaning.")
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001124]
1125
Marc Koderer6ee82dc2014-02-17 10:26:29 +01001126negative_group = cfg.OptGroup(name='negative', title="Negative Test Options")
1127
1128NegativeGroup = [
1129 cfg.StrOpt('test_generator',
1130 default='tempest.common.' +
1131 'generator.negative_generator.NegativeTestGenerator',
1132 help="Test generator class for all negative tests"),
1133]
1134
Jon Grimm270bd7f2014-08-05 18:11:29 +00001135_opts = [
1136 (auth_group, AuthGroup),
1137 (compute_group, ComputeGroup),
1138 (compute_features_group, ComputeFeaturesGroup),
1139 (identity_group, IdentityGroup),
1140 (identity_feature_group, IdentityFeatureGroup),
1141 (image_group, ImageGroup),
1142 (image_feature_group, ImageFeaturesGroup),
1143 (network_group, NetworkGroup),
1144 (network_feature_group, NetworkFeaturesGroup),
1145 (messaging_group, MessagingGroup),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +00001146 (validation_group, ValidationGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001147 (volume_group, VolumeGroup),
1148 (volume_feature_group, VolumeFeaturesGroup),
1149 (object_storage_group, ObjectStoreGroup),
1150 (object_storage_feature_group, ObjectStoreFeaturesGroup),
1151 (database_group, DatabaseGroup),
1152 (orchestration_group, OrchestrationGroup),
1153 (telemetry_group, TelemetryGroup),
1154 (dashboard_group, DashboardGroup),
1155 (data_processing_group, DataProcessingGroup),
Luigi Toscano14d172d2015-01-23 16:37:47 +01001156 (data_processing_feature_group, DataProcessingFeaturesGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001157 (boto_group, BotoGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001158 (stress_group, StressGroup),
1159 (scenario_group, ScenarioGroup),
1160 (service_available_group, ServiceAvailableGroup),
1161 (debug_group, DebugGroup),
1162 (baremetal_group, BaremetalGroup),
1163 (input_scenario_group, InputScenarioGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001164 (negative_group, NegativeGroup)
1165]
1166
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001167
Matthew Treinish43b296a2014-02-28 15:23:00 -05001168def register_opts():
Jon Grimm270bd7f2014-08-05 18:11:29 +00001169 for g, o in _opts:
Maru Newbyf440c292015-03-31 15:58:47 +00001170 register_opt_group(_CONF, g, o)
Jon Grimm270bd7f2014-08-05 18:11:29 +00001171
1172
1173def list_opts():
1174 """Return a list of oslo.config options available.
1175
1176 The purpose of this is to allow tools like the Oslo sample config file
1177 generator to discover the options exposed to users.
1178 """
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001179 return [(g.name, o) for g, o in _opts]
Matthew Treinish43b296a2014-02-28 15:23:00 -05001180
1181
Sean Dague3b9b1f32013-12-20 17:04:54 -05001182# this should never be called outside of this class
1183class TempestConfigPrivate(object):
Daryl Walleck1465d612011-11-02 02:22:15 -05001184 """Provides OpenStack configuration information."""
1185
Brian Waldon738cd632011-12-12 18:45:09 -05001186 DEFAULT_CONFIG_DIR = os.path.join(
Zhongyue Luoa1343de2013-01-04 16:21:35 +08001187 os.path.abspath(os.path.dirname(os.path.dirname(__file__))),
Brian Waldon738cd632011-12-12 18:45:09 -05001188 "etc")
Daryl Walleck1465d612011-11-02 02:22:15 -05001189
Brian Waldon738cd632011-12-12 18:45:09 -05001190 DEFAULT_CONFIG_FILE = "tempest.conf"
1191
Andrea Frittolia96ee212014-08-15 18:34:20 +01001192 def __getattr__(self, attr):
1193 # Handles config options from the default group
Maru Newbyf440c292015-03-31 15:58:47 +00001194 return getattr(_CONF, attr)
Andrea Frittolia96ee212014-08-15 18:34:20 +01001195
Matthew Treinish43b296a2014-02-28 15:23:00 -05001196 def _set_attrs(self):
Maru Newbyf440c292015-03-31 15:58:47 +00001197 self.auth = _CONF.auth
1198 self.compute = _CONF.compute
1199 self.compute_feature_enabled = _CONF['compute-feature-enabled']
1200 self.identity = _CONF.identity
1201 self.identity_feature_enabled = _CONF['identity-feature-enabled']
1202 self.image = _CONF.image
1203 self.image_feature_enabled = _CONF['image-feature-enabled']
1204 self.network = _CONF.network
1205 self.network_feature_enabled = _CONF['network-feature-enabled']
Joseph Lanoux2f81cc12015-01-12 16:01:20 +00001206 self.validation = _CONF.validation
Maru Newbyf440c292015-03-31 15:58:47 +00001207 self.volume = _CONF.volume
1208 self.volume_feature_enabled = _CONF['volume-feature-enabled']
1209 self.object_storage = _CONF['object-storage']
1210 self.object_storage_feature_enabled = _CONF[
Matthew Treinishd5c96022013-10-17 21:51:23 +00001211 'object-storage-feature-enabled']
Maru Newbyf440c292015-03-31 15:58:47 +00001212 self.database = _CONF.database
1213 self.orchestration = _CONF.orchestration
1214 self.messaging = _CONF.messaging
1215 self.telemetry = _CONF.telemetry
1216 self.dashboard = _CONF.dashboard
1217 self.data_processing = _CONF.data_processing
1218 self.data_processing_feature_enabled = _CONF[
Luigi Toscano14d172d2015-01-23 16:37:47 +01001219 'data_processing-feature-enabled']
Maru Newbyf440c292015-03-31 15:58:47 +00001220 self.boto = _CONF.boto
1221 self.stress = _CONF.stress
1222 self.scenario = _CONF.scenario
1223 self.service_available = _CONF.service_available
1224 self.debug = _CONF.debug
1225 self.baremetal = _CONF.baremetal
1226 self.input_scenario = _CONF['input-scenario']
Maru Newbyf440c292015-03-31 15:58:47 +00001227 self.negative = _CONF.negative
1228 _CONF.set_default('domain_name', self.identity.admin_domain_name,
1229 group='identity')
1230 _CONF.set_default('alt_domain_name', self.identity.admin_domain_name,
1231 group='identity')
Sean Dague86bd8422013-12-20 09:56:44 -05001232
Joe Gordon28a84ae2014-07-17 15:38:28 +00001233 def __init__(self, parse_conf=True, config_path=None):
Matthew Treinish43b296a2014-02-28 15:23:00 -05001234 """Initialize a configuration from a conf directory and conf file."""
1235 super(TempestConfigPrivate, self).__init__()
1236 config_files = []
1237 failsafe_path = "/etc/tempest/" + self.DEFAULT_CONFIG_FILE
1238
Joe Gordon28a84ae2014-07-17 15:38:28 +00001239 if config_path:
1240 path = config_path
1241 else:
1242 # Environment variables override defaults...
1243 conf_dir = os.environ.get('TEMPEST_CONFIG_DIR',
1244 self.DEFAULT_CONFIG_DIR)
1245 conf_file = os.environ.get('TEMPEST_CONFIG',
1246 self.DEFAULT_CONFIG_FILE)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001247
Joe Gordon28a84ae2014-07-17 15:38:28 +00001248 path = os.path.join(conf_dir, conf_file)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001249
1250 if not os.path.isfile(path):
1251 path = failsafe_path
1252
1253 # only parse the config file if we expect one to exist. This is needed
1254 # to remove an issue with the config file up to date checker.
1255 if parse_conf:
1256 config_files.append(path)
Maru Newbyf440c292015-03-31 15:58:47 +00001257 logging.register_options(_CONF)
Matthew Treinish5440a402014-10-02 14:36:16 -04001258 if os.path.isfile(path):
Maru Newbyf440c292015-03-31 15:58:47 +00001259 _CONF([], project='tempest', default_config_files=config_files)
Matthew Treinish5440a402014-10-02 14:36:16 -04001260 else:
Maru Newbyf440c292015-03-31 15:58:47 +00001261 _CONF([], project='tempest')
1262 logging.setup(_CONF, 'tempest')
Matthew Treinish43b296a2014-02-28 15:23:00 -05001263 LOG = logging.getLogger('tempest')
1264 LOG.info("Using tempest config file %s" % path)
1265 register_opts()
1266 self._set_attrs()
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001267 if parse_conf:
Maru Newbyf440c292015-03-31 15:58:47 +00001268 _CONF.log_opt_values(LOG, std_logging.DEBUG)
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001269
Sean Dague86bd8422013-12-20 09:56:44 -05001270
1271class TempestConfigProxy(object):
1272 _config = None
Joe Gordon28a84ae2014-07-17 15:38:28 +00001273 _path = None
Sean Dague86bd8422013-12-20 09:56:44 -05001274
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001275 _extra_log_defaults = [
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001276 ('paramiko.transport', std_logging.INFO),
1277 ('requests.packages.urllib3.connectionpool', std_logging.WARN),
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001278 ]
1279
1280 def _fix_log_levels(self):
1281 """Tweak the oslo log defaults."""
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001282 for name, level in self._extra_log_defaults:
1283 std_logging.getLogger(name).setLevel(level)
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001284
Sean Dague86bd8422013-12-20 09:56:44 -05001285 def __getattr__(self, attr):
1286 if not self._config:
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001287 self._fix_log_levels()
Joe Gordon28a84ae2014-07-17 15:38:28 +00001288 self._config = TempestConfigPrivate(config_path=self._path)
Sean Dague86bd8422013-12-20 09:56:44 -05001289
1290 return getattr(self._config, attr)
1291
Joe Gordon28a84ae2014-07-17 15:38:28 +00001292 def set_config_path(self, path):
1293 self._path = path
1294
Sean Dague86bd8422013-12-20 09:56:44 -05001295
1296CONF = TempestConfigProxy()