blob: f5125b53392e50264652cfcccd46157e18303109 [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
Matthew Treinishca5a9ff2016-04-16 15:04:34 -040018import functools
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +090019import logging as std_logging
Jay Pipes7f757632011-12-02 15:53:32 -050020import os
Matthew Treinishaa29c7e2015-04-23 16:35:09 -040021import tempfile
Jay Pipes3f981df2012-03-27 18:59:44 -040022
Matthew Treinishaa29c7e2015-04-23 16:35:09 -040023from oslo_concurrency import lockutils
Doug Hellmann583ce2c2015-03-11 14:55:46 +000024from oslo_config import cfg
Doug Hellmann583ce2c2015-03-11 14:55:46 +000025from oslo_log import log as logging
Matthew Treinishca5a9ff2016-04-16 15:04:34 -040026import testtools
Jay Pipes7f757632011-12-02 15:53:32 -050027
Matthew Treinisha966d0f2015-07-01 17:37:31 -040028from tempest.test_discover import plugins
29
Daryl Walleck1465d612011-11-02 02:22:15 -050030
Maru Newbyf440c292015-03-31 15:58:47 +000031# TODO(marun) Replace use of oslo_config's global ConfigOpts
32# (cfg.CONF) instance with a local instance (cfg.ConfigOpts()) once
33# the cli tests move to the clients. The cli tests rely on oslo
34# incubator modules that use the global cfg.CONF.
35_CONF = cfg.CONF
36
37
DennyZhang88a2dd82013-10-07 12:55:35 -050038def register_opt_group(conf, opt_group, options):
Andrea Frittoli (andreaf)8def7ca2015-05-13 14:24:19 +010039 if opt_group:
40 conf.register_group(opt_group)
DennyZhang88a2dd82013-10-07 12:55:35 -050041 for opt in options:
Andrea Frittoli (andreaf)8def7ca2015-05-13 14:24:19 +010042 conf.register_opt(opt, group=getattr(opt_group, 'name', None))
DennyZhang88a2dd82013-10-07 12:55:35 -050043
44
Matthew Treinishc791ac42014-07-16 09:15:23 -040045auth_group = cfg.OptGroup(name='auth',
46 title="Options for authentication and credentials")
47
48
49AuthGroup = [
50 cfg.StrOpt('test_accounts_file',
Matthew Treinishc791ac42014-07-16 09:15:23 -040051 help="Path to the yaml file that contains the list of "
Matthew Treinishfc7cd8f2015-03-30 11:51:55 -040052 "credentials to use for running tests. If used when "
53 "running in parallel you have to make sure sufficient "
54 "credentials are provided in the accounts file. For "
55 "example if no tests with roles are being run it requires "
56 "at least `2 * CONC` distinct accounts configured in "
57 " the `test_accounts_file`, with CONC == the "
58 "number of concurrent test processes."),
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070059 cfg.BoolOpt('use_dynamic_credentials',
Attila Fazekas5dda1582015-02-18 17:16:02 +010060 default=True,
Sean Dagueed6e5862016-04-04 10:49:13 -040061 help="Allows test cases to create/destroy projects and "
Andrea Frittoli8283b4e2014-07-17 13:28:58 +010062 "users. This option requires that OpenStack Identity "
63 "API admin credentials are known. If false, isolated "
64 "test cases and parallel execution, can still be "
65 "achieved configuring a list of test accounts",
66 deprecated_opts=[cfg.DeprecatedOpt('allow_tenant_isolation',
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070067 group='auth'),
68 cfg.DeprecatedOpt('allow_tenant_isolation',
Andrea Frittoli8283b4e2014-07-17 13:28:58 +010069 group='compute'),
70 cfg.DeprecatedOpt('allow_tenant_isolation',
71 group='orchestration')]),
Matthew Treinish167b2be2015-01-15 17:20:27 -050072 cfg.ListOpt('tempest_roles',
73 help="Roles to assign to all users created by tempest",
Andrea Frittolic3280152015-02-26 12:42:34 +000074 default=[]),
David Kranz87fc7e92015-07-28 14:05:20 -040075 cfg.StrOpt('default_credentials_domain_name',
76 default='Default',
77 help="Default domain used when getting v3 credentials. "
78 "This is the name keystone uses for v2 compatibility.",
79 deprecated_opts=[cfg.DeprecatedOpt(
80 'tenant_isolation_domain_name',
81 group='auth')]),
Matthew Treinish2219d382015-04-24 10:33:04 -040082 cfg.BoolOpt('create_isolated_networks',
83 default=True,
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070084 help="If use_dynamic_credentials is set to True and Neutron "
85 "is enabled Tempest will try to create a usable network, "
Sean Dagueed6e5862016-04-04 10:49:13 -040086 "subnet, and router when needed for each project it "
Matthew Treinish2219d382015-04-24 10:33:04 -040087 "creates. However in some neutron configurations, like "
88 "with VLAN provider networks, this doesn't work. So if "
89 "set to False the isolated networks will not be created"),
Matthew Treinish16cf1e52015-08-11 10:39:23 -040090 cfg.StrOpt('admin_username',
91 help="Username for an administrative user. This is needed for "
Sean Dagueed6e5862016-04-04 10:49:13 -040092 "authenticating requests made by project isolation to "
Matthew Treinish16cf1e52015-08-11 10:39:23 -040093 "create users and projects",
94 deprecated_group='identity'),
Sean Dagueed6e5862016-04-04 10:49:13 -040095 cfg.StrOpt('admin_project_name',
Ken'ichi Ohmichi79a71ac2016-04-22 20:02:51 -070096 help="Project name to use for an administrative user. This is "
Sean Dagueed6e5862016-04-04 10:49:13 -040097 "needed for authenticating requests made by project "
Matthew Treinish16cf1e52015-08-11 10:39:23 -040098 "isolation to create users and projects",
Sean Dagueed6e5862016-04-04 10:49:13 -040099 deprecated_opts=[cfg.DeprecatedOpt('admin_tenant_name',
100 group='auth'),
101 cfg.DeprecatedOpt('admin_tenant_name',
102 group='identity')]),
Matthew Treinish16cf1e52015-08-11 10:39:23 -0400103 cfg.StrOpt('admin_password',
Ken'ichi Ohmichi79a71ac2016-04-22 20:02:51 -0700104 help="Password to use for an administrative user. This is "
Sean Dagueed6e5862016-04-04 10:49:13 -0400105 "needed for authenticating requests made by project "
Matthew Treinish16cf1e52015-08-11 10:39:23 -0400106 "isolation to create users and projects",
107 secret=True,
108 deprecated_group='identity'),
109 cfg.StrOpt('admin_domain_name',
110 help="Admin domain name for authentication (Keystone V3)."
111 "The same domain applies to user and project",
112 deprecated_group='identity'),
Matthew Treinishc791ac42014-07-16 09:15:23 -0400113]
114
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500115identity_group = cfg.OptGroup(name='identity',
116 title="Keystone Configuration Options")
Daryl Walleck1465d612011-11-02 02:22:15 -0500117
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500118IdentityGroup = [
119 cfg.StrOpt('catalog_type',
120 default='identity',
121 help="Catalog type of the Identity service."),
Jay Pipescd8eaec2013-01-16 21:03:48 -0500122 cfg.BoolOpt('disable_ssl_certificate_validation',
123 default=False,
124 help="Set to True if using self-signed SSL certificates."),
Rob Crittendena7db6692014-11-23 18:44:38 -0500125 cfg.StrOpt('ca_certificates_file',
126 default=None,
127 help='Specify a CA bundle file to use in verifying a '
128 'TLS (https) server certificate.'),
Jay Pipes7c88eb22013-01-16 21:32:43 -0500129 cfg.StrOpt('uri',
Brant Knudsonc7ca3342013-03-28 21:08:50 -0500130 help="Full URI of the OpenStack Identity API (Keystone), v2"),
131 cfg.StrOpt('uri_v3',
132 help='Full URI of the OpenStack Identity API (Keystone), v3'),
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000133 cfg.StrOpt('auth_version',
134 default='v2',
135 help="Identity API version to be used for authentication "
Andrea Frittoli77f9da42014-02-06 11:18:19 +0000136 "for API tests."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500137 cfg.StrOpt('region',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100138 default='RegionOne',
Arata Notsu8f440392013-09-13 16:14:20 +0900139 help="The identity region name to use. Also used as the other "
140 "services' region name unless they are set explicitly. "
141 "If no such region is found in the service catalog, the "
142 "first found one is used."),
Jane Zadorozhnac7862132015-07-10 14:34:50 +0300143 cfg.StrOpt('v2_admin_endpoint_type',
144 default='adminURL',
145 choices=['public', 'admin', 'internal',
146 'publicURL', 'adminURL', 'internalURL'],
147 help="The admin endpoint type to use for OpenStack Identity "
ghanshyamf58b9fd2015-09-01 16:11:39 +0900148 "(Keystone) API v2"),
Jane Zadorozhnac7862132015-07-10 14:34:50 +0300149 cfg.StrOpt('v2_public_endpoint_type',
JordanP5d29b2c2013-12-18 13:56:03 +0000150 default='publicURL',
151 choices=['public', 'admin', 'internal',
152 'publicURL', 'adminURL', 'internalURL'],
Jane Zadorozhnac7862132015-07-10 14:34:50 +0300153 help="The public endpoint type to use for OpenStack Identity "
154 "(Keystone) API v2",
155 deprecated_opts=[cfg.DeprecatedOpt('endpoint_type',
156 group='identity')]),
157 cfg.StrOpt('v3_endpoint_type',
158 default='adminURL',
159 choices=['public', 'admin', 'internal',
160 'publicURL', 'adminURL', 'internalURL'],
161 help="The endpoint type to use for OpenStack Identity "
ghanshyamf58b9fd2015-09-01 16:11:39 +0900162 "(Keystone) API v3"),
Russell Sim7f894a52013-09-13 10:35:21 +1000163 cfg.StrOpt('admin_role',
164 default='admin',
165 help="Role required to administrate keystone."),
Martin Pavlasek4c3f2ab2014-04-15 17:15:15 +0200166 cfg.StrOpt('default_domain_id',
167 default='default',
168 help="ID of the default domain"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500169]
Jay Pipes3f981df2012-03-27 18:59:44 -0400170
Matthew Treinishd5021a72014-01-09 18:42:51 +0000171identity_feature_group = cfg.OptGroup(name='identity-feature-enabled',
172 title='Enabled Identity Features')
173
174IdentityFeatureGroup = [
175 cfg.BoolOpt('trust',
176 default=True,
177 help='Does the identity service have delegation and '
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000178 'impersonation enabled'),
179 cfg.BoolOpt('api_v2',
180 default=True,
181 help='Is the v2 identity API enabled'),
182 cfg.BoolOpt('api_v3',
183 default=True,
184 help='Is the v3 identity API enabled'),
Jane Zadorozhna121576d2015-06-23 12:57:13 +0300185 cfg.ListOpt('api_extensions',
186 default=['all'],
187 help="A list of enabled identity extensions with a special "
188 "entry all which indicates every extension is enabled. "
189 "Empty list indicates all extensions are disabled. "
190 "To get the list of extensions run: 'keystone discover'")
Matthew Treinishd5021a72014-01-09 18:42:51 +0000191]
192
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500193compute_group = cfg.OptGroup(name='compute',
194 title='Compute Service Options')
Rohit Karajgie1b050d2011-12-02 16:13:18 -0800195
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500196ComputeGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500197 cfg.StrOpt('image_ref',
Matthew Treinishafcb6b42014-05-27 13:50:02 -0400198 help="Valid primary image reference to be used in tests. "
199 "This is a required option"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500200 cfg.StrOpt('image_ref_alt',
Matthew Treinishafcb6b42014-05-27 13:50:02 -0400201 help="Valid secondary image reference to be used in tests. "
202 "This is a required option, but if only one image is "
203 "available duplicate the value of image_ref above"),
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +0900204 cfg.StrOpt('flavor_ref',
205 default="1",
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500206 help="Valid primary flavor to use in tests."),
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +0900207 cfg.StrOpt('flavor_ref_alt',
208 default="2",
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500209 help='Valid secondary flavor to be used in tests.'),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500210 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400211 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500212 help="Time in seconds between build status checks."),
213 cfg.IntOpt('build_timeout',
214 default=300,
Hugh Saunders5b139ad2014-12-15 09:08:41 +0000215 help="Timeout in seconds to wait for an instance to build. "
216 "Other services that do not define build_timeout will "
Lucian Petrut1cfe2982015-01-06 13:57:36 +0200217 "inherit this value."),
Attila Fazekas0abbc952013-07-01 19:19:42 +0200218 cfg.IntOpt('ready_wait',
219 default=0,
DennyZhang8912d012013-09-25 18:08:34 -0500220 help="Additional wait time for clean state, when there is "
221 "no OS-EXT-STS extension available"),
Attila Fazekasb0661652013-05-08 13:01:36 +0200222 cfg.StrOpt('fixed_network_name',
Chris Hoge8f1401b2014-11-19 14:00:37 -0800223 help="Name of the fixed network that is visible to all test "
Sean Dagueed6e5862016-04-04 10:49:13 -0400224 "projects. If multiple networks are available for a "
225 "project, this is the network which will be used for "
226 "creating servers if tempest does not create a network or "
227 "s network is not specified elsewhere. It may be used for "
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000228 "ssh validation only if floating IPs are disabled."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500229 cfg.StrOpt('catalog_type',
230 default='compute',
231 help="Catalog type of the Compute service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900232 cfg.StrOpt('region',
233 default='',
234 help="The compute region name to use. If empty, the value "
235 "of identity.region is used instead. If no such region "
236 "is found in the service catalog, the first found one is "
237 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000238 cfg.StrOpt('endpoint_type',
239 default='publicURL',
240 choices=['public', 'admin', 'internal',
241 'publicURL', 'adminURL', 'internalURL'],
242 help="The endpoint type to use for the compute service."),
Ryan Hsucb2e1252013-09-03 21:44:49 -0700243 cfg.StrOpt('volume_device_name',
244 default='vdb',
245 help="Expected device name when a volume is attached to "
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900246 "an instance"),
247 cfg.IntOpt('shelved_offload_time',
248 default=0,
249 help='Time in seconds before a shelved instance is eligible '
250 'for removing from a host. -1 never offload, 0 offload '
251 'when shelved. This time should be the same as the time '
252 'of nova.conf, and some tests will run for as long as the '
Ghanshyam06a5b4a2014-04-11 17:32:45 +0900253 'time.'),
Sean Dague782f6772015-11-11 11:26:45 -0500254 cfg.IntOpt('min_compute_nodes',
255 default=1,
256 help=('The minimum number of compute nodes expected. This will '
257 'be utilized by some multinode specific tests to ensure '
258 'that requests match the expected size of the cluster '
ghanshyam29591532016-03-11 17:12:43 +0900259 'you are testing with.')),
Ken'ichi Ohmichi4d237e72015-11-05 06:32:33 +0000260 cfg.StrOpt('min_microversion',
261 default=None,
262 help="Lower version of the test target microversion range. "
263 "The format is 'X.Y', where 'X' and 'Y' are int values. "
264 "Tempest selects tests based on the range between "
265 "min_microversion and max_microversion. "
Ghanshyam395c5b52015-12-04 17:27:16 +0900266 "If both values are not specified, Tempest avoids tests "
267 "which require a microversion. Valid values are string "
ghanshyam29591532016-03-11 17:12:43 +0900268 "with format 'X.Y' or string 'latest'",
269 deprecated_group='compute-feature-enabled'),
Ken'ichi Ohmichi4d237e72015-11-05 06:32:33 +0000270 cfg.StrOpt('max_microversion',
271 default=None,
272 help="Upper version of the test target microversion range. "
273 "The format is 'X.Y', where 'X' and 'Y' are int values. "
274 "Tempest selects tests based on the range between "
275 "min_microversion and max_microversion. "
Ghanshyam395c5b52015-12-04 17:27:16 +0900276 "If both values are not specified, Tempest avoids tests "
277 "which require a microversion. Valid values are string "
ghanshyam29591532016-03-11 17:12:43 +0900278 "with format 'X.Y' or string 'latest'",
279 deprecated_group='compute-feature-enabled'),
280]
281
282compute_features_group = cfg.OptGroup(name='compute-feature-enabled',
283 title="Enabled Compute Service Features")
284
285ComputeFeaturesGroup = [
Matthew Treinishd5c96022013-10-17 21:51:23 +0000286 cfg.BoolOpt('disk_config',
287 default=True,
288 help="If false, skip disk config tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000289 cfg.ListOpt('api_extensions',
290 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800291 help='A list of enabled compute extensions with a special '
Ken'ichi Ohmichia7e68712014-05-06 10:47:26 +0900292 'entry all which indicates every extension is enabled. '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300293 'Each extension should be specified with alias name. '
294 'Empty list indicates all extensions are disabled'),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000295 cfg.BoolOpt('change_password',
296 default=False,
297 help="Does the test environment support changing the admin "
298 "password?"),
Adam Gandelmanc6eefb42014-07-15 16:44:08 -0700299 cfg.BoolOpt('console_output',
300 default=True,
301 help="Does the test environment support obtaining instance "
302 "serial console output?"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000303 cfg.BoolOpt('resize',
304 default=False,
305 help="Does the test environment support resizing?"),
Eric Windischb5538072014-03-09 23:47:35 -0400306 cfg.BoolOpt('pause',
307 default=True,
308 help="Does the test environment support pausing?"),
David Shrewsbury25f666f2014-07-22 12:17:59 -0400309 cfg.BoolOpt('shelve',
310 default=True,
311 help="Does the test environment support shelving/unshelving?"),
Eric Windischaeb7e842014-03-10 01:10:50 -0400312 cfg.BoolOpt('suspend',
313 default=True,
314 help="Does the test environment support suspend/resume?"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000315 cfg.BoolOpt('live_migration',
Joe Gordon31a139a2014-11-17 16:39:04 -0800316 default=True,
Matthew Treinishd5c96022013-10-17 21:51:23 +0000317 help="Does the test environment support live migration "
318 "available?"),
YAMAMOTO Takashi1f62af22015-06-16 03:29:50 +0900319 cfg.BoolOpt('metadata_service',
320 default=True,
321 help="Does the test environment support metadata service? "
322 "Ignored unless validation.run_validation=true."),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000323 cfg.BoolOpt('block_migration_for_live_migration',
324 default=False,
325 help="Does the test environment use block devices for live "
326 "migration"),
327 cfg.BoolOpt('block_migrate_cinder_iscsi',
328 default=False,
329 help="Does the test environment block migration support "
Joe Gordon0a5788f2015-03-17 11:29:38 -0700330 "cinder iSCSI volumes. Note, libvirt doesn't support this, "
331 "see https://bugs.launchpad.net/nova/+bug/1398999"),
Ghanshyam Mann41c17572014-02-27 18:52:56 +0900332 cfg.BoolOpt('vnc_console',
333 default=False,
334 help='Enable VNC console. This configuration value should '
Ghanshyam70876d02014-03-11 11:40:18 +0900335 'be same as [nova.vnc]->vnc_enabled in nova.conf'),
336 cfg.BoolOpt('spice_console',
337 default=False,
338 help='Enable Spice console. This configuration value should '
339 'be same as [nova.spice]->enabled in nova.conf'),
340 cfg.BoolOpt('rdp_console',
341 default=False,
342 help='Enable RDP console. This configuration value should '
Adam Gandelman2e37b4f2014-06-18 17:34:21 -0700343 'be same as [nova.rdp]->enabled in nova.conf'),
344 cfg.BoolOpt('rescue',
345 default=True,
346 help='Does the test environment support instance rescue '
Ghanshyam9c2e50d2014-07-22 21:32:05 +0900347 'mode?'),
348 cfg.BoolOpt('enable_instance_password',
349 default=True,
350 help='Enables returning of the instance password by the '
351 'relevant server API calls such as create, rebuild '
Adam Gandelman7186f7a2014-07-23 09:28:56 -0400352 'or rescue.'),
353 cfg.BoolOpt('interface_attach',
354 default=True,
355 help='Does the test environment support dynamic network '
Adam Gandelmanfbc95ac2014-06-19 17:33:43 -0700356 'interface attachment?'),
357 cfg.BoolOpt('snapshot',
358 default=True,
359 help='Does the test environment support creating snapshot '
Matthew Treinishdfd7ac02015-02-09 17:47:31 -0500360 'images of running instances?'),
Takeaki Matsumotodf4ab7c2015-08-25 17:49:23 +0900361 cfg.BoolOpt('nova_cert',
362 default=True,
363 help='Does the test environment have the nova cert running?'),
Takeaki Matsumotod7e04b22015-09-04 15:13:38 +0900364 cfg.BoolOpt('personality',
365 default=True,
366 help='Does the test environment support server personality'),
Matt Riedemann79b3b492015-06-20 14:20:44 -0700367 cfg.BoolOpt('attach_encrypted_volume',
368 default=True,
369 help='Does the test environment support attaching an '
370 'encrypted volume to a running server instance? This may '
371 'depend on the combination of compute_driver in nova and '
372 'the volume_driver(s) in cinder.'),
Matt Riedemann778b5f92015-03-11 12:44:28 -0700373 # TODO(mriedem): Remove allow_duplicate_networks once kilo-eol happens
374 # since the option was removed from nova in Liberty and is the default
375 # behavior starting in Liberty.
376 cfg.BoolOpt('allow_duplicate_networks',
377 default=False,
378 help='Does the test environment support creating instances '
379 'with multiple ports on the same network? This is only '
380 'valid when using Neutron.'),
Alexander Gubanov509e2842015-06-09 15:29:51 +0300381 cfg.BoolOpt('config_drive',
382 default=True,
383 help='Enable special configuration drive with metadata.'),
Yair Friedca5cfb52016-01-04 15:41:55 +0200384 cfg.ListOpt('scheduler_available_filters',
385 default=['all'],
386 help="A list of enabled filters that nova will accept as hints"
387 " to the scheduler when creating a server. A special "
388 "entry 'all' indicates all filters are enabled. Empty "
389 "list indicates all filters are disabled. The full "
390 "available list of filters is in nova.conf: "
391 "DEFAULT.scheduler_available_filters"),
392
Matthew Treinishd5c96022013-10-17 21:51:23 +0000393]
394
395
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500396image_group = cfg.OptGroup(name='image',
397 title="Image Service Options")
Jay Pipesf38eaac2012-06-21 13:37:35 -0400398
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500399ImageGroup = [
Matthew Treinish72ea4422013-02-07 14:42:49 -0500400 cfg.StrOpt('catalog_type',
401 default='image',
Sean Dague83401992013-05-06 17:46:36 -0400402 help='Catalog type of the Image service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900403 cfg.StrOpt('region',
404 default='',
405 help="The image region name to use. If empty, the value "
406 "of identity.region is used instead. If no such region "
407 "is found in the service catalog, the first found one is "
408 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000409 cfg.StrOpt('endpoint_type',
410 default='publicURL',
411 choices=['public', 'admin', 'internal',
412 'publicURL', 'adminURL', 'internalURL'],
413 help="The endpoint type to use for the image service."),
Sean Dague83401992013-05-06 17:46:36 -0400414 cfg.StrOpt('http_image',
415 default='http://download.cirros-cloud.net/0.3.1/'
416 'cirros-0.3.1-x86_64-uec.tar.gz',
Lucian Petrut1cfe2982015-01-06 13:57:36 +0200417 help='http accessible image'),
418 cfg.IntOpt('build_timeout',
419 default=300,
420 help="Timeout in seconds to wait for an image to "
421 "become available."),
422 cfg.IntOpt('build_interval',
423 default=1,
424 help="Time in seconds between image operation status "
Takashi NATSUME12a48512015-08-10 18:33:16 +0900425 "checks."),
426 cfg.ListOpt('container_formats',
427 default=['ami', 'ari', 'aki', 'bare', 'ovf', 'ova'],
428 help="A list of image's container formats "
429 "users can specify."),
430 cfg.ListOpt('disk_formats',
431 default=['ami', 'ari', 'aki', 'vhd', 'vmdk', 'raw', 'qcow2',
432 'vdi', 'iso'],
433 help="A list of image's disk formats "
434 "users can specify.")
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500435]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400436
Matthew Treinish2b5287d2013-10-22 17:40:34 +0000437image_feature_group = cfg.OptGroup(name='image-feature-enabled',
438 title='Enabled image service features')
439
440ImageFeaturesGroup = [
441 cfg.BoolOpt('api_v2',
442 default=True,
443 help="Is the v2 image API enabled"),
444 cfg.BoolOpt('api_v1',
445 default=True,
446 help="Is the v1 image API enabled"),
bkopilov81aaae72015-05-15 23:46:25 +0300447 cfg.BoolOpt('deactivate_image',
448 default=False,
449 help="Is the deactivate-image feature enabled."
450 " The feature has been integrated since Kilo."),
Matthew Treinish2b5287d2013-10-22 17:40:34 +0000451]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400452
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500453network_group = cfg.OptGroup(name='network',
454 title='Network Service Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600455
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500456NetworkGroup = [
457 cfg.StrOpt('catalog_type',
458 default='network',
Mark McClainf2982e82013-07-06 17:48:03 -0400459 help='Catalog type of the Neutron service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900460 cfg.StrOpt('region',
461 default='',
462 help="The network region name to use. If empty, the value "
463 "of identity.region is used instead. If no such region "
464 "is found in the service catalog, the first found one is "
465 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000466 cfg.StrOpt('endpoint_type',
467 default='publicURL',
468 choices=['public', 'admin', 'internal',
469 'publicURL', 'adminURL', 'internalURL'],
470 help="The endpoint type to use for the network service."),
Sean Dagueed6e5862016-04-04 10:49:13 -0400471 cfg.StrOpt('project_network_cidr',
472 deprecated_name='tenant_network_cidr',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500473 default="10.100.0.0/16",
Sean Dagueed6e5862016-04-04 10:49:13 -0400474 help="The cidr block to allocate project ipv4 subnets from"),
475 cfg.IntOpt('project_network_mask_bits',
476 deprecated_name='tenant_network_mask_bits',
Attila Fazekas8ea181b2013-07-13 16:26:14 +0200477 default=28,
Sean Dagueed6e5862016-04-04 10:49:13 -0400478 help="The mask bits for project ipv4 subnets"),
479 cfg.StrOpt('project_network_v6_cidr',
480 deprecated_name='tenant_network_v6_cidr',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400481 default="2003::/48",
Sean Dagueed6e5862016-04-04 10:49:13 -0400482 help="The cidr block to allocate project ipv6 subnets from"),
483 cfg.IntOpt('project_network_v6_mask_bits',
484 deprecated_name='tenant_network_v6_mask_bits',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400485 default=64,
Sean Dagueed6e5862016-04-04 10:49:13 -0400486 help="The mask bits for project ipv6 subnets"),
487 cfg.BoolOpt('project_networks_reachable',
488 deprecated_name='tenant_networks_reachable',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500489 default=False,
Sean Dagueed6e5862016-04-04 10:49:13 -0400490 help="Whether project networks can be reached directly from "
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000491 "the test client. This must be set to True when the "
492 "'fixed' ssh_connect_method is selected."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500493 cfg.StrOpt('public_network_id',
494 default="",
495 help="Id of the public network that provides external "
496 "connectivity"),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000497 cfg.StrOpt('floating_network_name',
498 help="Default floating network name. Used to allocate floating "
499 "IPs when neutron is enabled."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500500 cfg.StrOpt('public_router_id',
501 default="",
502 help="Id of the public router that provides external "
Yair Fried1eb27f52014-11-10 15:24:19 +0200503 "connectivity. This should only be used when Neutron's "
504 "'allow_overlapping_ips' is set to 'False' in "
505 "neutron.conf. usually not needed past 'Grizzly' release"),
izikpensod9a01a62014-02-17 20:02:32 +0200506 cfg.IntOpt('build_timeout',
507 default=300,
508 help="Timeout in seconds to wait for network operation to "
509 "complete."),
510 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400511 default=1,
izikpensod9a01a62014-02-17 20:02:32 +0200512 help="Time in seconds between network operation status "
513 "checks."),
Attila Fazekas640392b2014-06-12 15:58:10 +0200514 cfg.ListOpt('dns_servers',
515 default=["8.8.8.8", "8.8.4.4"],
Itzik Brown5be44582014-12-24 09:05:13 +0200516 help="List of dns servers which should be used"
Itzik Brown2ca01cd2014-12-08 12:58:20 +0200517 " for subnet creation"),
518 cfg.StrOpt('port_vnic_type',
519 choices=[None, 'normal', 'direct', 'macvtap'],
520 help="vnic_type to use when Launching instances"
521 " with pre-configured ports."
522 " Supported ports are:"
523 " ['normal','direct','macvtap']"),
piyush11078648e35d52015-09-24 12:56:43 +0530524 cfg.ListOpt('default_network',
525 default=["1.0.0.0/16", "2.0.0.0/16"],
526 help="List of ip pools"
527 " for subnetpools creation"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500528]
Jay Pipes3f981df2012-03-27 18:59:44 -0400529
Matthew Treinishe3d26142013-11-26 19:14:58 +0000530network_feature_group = cfg.OptGroup(name='network-feature-enabled',
531 title='Enabled network service features')
532
533NetworkFeaturesGroup = [
Matthew Treinishe2e33cf2014-03-03 19:28:41 +0000534 cfg.BoolOpt('ipv6',
535 default=True,
536 help="Allow the execution of IPv6 tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000537 cfg.ListOpt('api_extensions',
538 default=['all'],
Alexander Gubanov36e1f9b2015-06-12 18:02:10 +0300539 help="A list of enabled network extensions with a special "
540 "entry all which indicates every extension is enabled. "
541 "Empty list indicates all extensions are disabled. "
542 "To get the list of extensions run: 'neutron ext-list'"),
Sean M. Collinsdd27a4d2014-05-13 10:33:15 -0400543 cfg.BoolOpt('ipv6_subnet_attributes',
544 default=False,
545 help="Allow the execution of IPv6 subnet tests that use "
546 "the extended IPv6 attributes ipv6_ra_mode "
547 "and ipv6_address_mode"
Mark McClain6e07c0d2014-10-10 11:25:03 -0400548 ),
Itzik Brownbeb30d32015-03-29 09:42:54 +0300549 cfg.BoolOpt('port_admin_state_change',
550 default=True,
551 help="Does the test environment support changing"
552 " port admin state"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000553]
554
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000555validation_group = cfg.OptGroup(name='validation',
556 title='SSH Validation options')
557
558ValidationGroup = [
Matthew Treinishe5cca002015-05-11 15:36:50 -0400559 cfg.BoolOpt('run_validation',
560 default=False,
561 help='Enable ssh on created servers and creation of additional'
lanoux283273b2015-12-04 03:01:54 -0800562 ' validation resources to enable remote access'),
Brandon Palmc6cc91d2015-08-19 13:20:21 -0500563 cfg.BoolOpt('security_group',
564 default=True,
565 help='Enable/disable security groups.'),
566 cfg.BoolOpt('security_group_rules',
567 default=True,
568 help='Enable/disable security group rules.'),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000569 cfg.StrOpt('connect_method',
570 default='floating',
571 choices=['fixed', 'floating'],
572 help='Default IP type used for validation: '
573 '-fixed: uses the first IP belonging to the fixed network '
lanoux283273b2015-12-04 03:01:54 -0800574 '-floating: creates and uses a floating IP',
575 deprecated_opts=[cfg.DeprecatedOpt('use_floatingip_for_ssh',
576 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000577 cfg.StrOpt('auth_method',
578 default='keypair',
579 choices=['keypair'],
580 help='Default authentication method to the instance. '
581 'Only ssh via keypair is supported for now. '
lanoux283273b2015-12-04 03:01:54 -0800582 'Additional methods will be handled in a separate spec.',
583 deprecated_opts=[cfg.DeprecatedOpt('ssh_auth_method',
584 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000585 cfg.IntOpt('ip_version_for_ssh',
586 default=4,
lanoux283273b2015-12-04 03:01:54 -0800587 help='Default IP version for ssh connections.'),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000588 cfg.IntOpt('ping_timeout',
589 default=120,
lanoux283273b2015-12-04 03:01:54 -0800590 help='Timeout in seconds to wait for ping to succeed.',
591 deprecated_opts=[cfg.DeprecatedOpt('ping_timeout',
592 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000593 cfg.IntOpt('connect_timeout',
594 default=60,
595 help='Timeout in seconds to wait for the TCP connection to be '
lanoux283273b2015-12-04 03:01:54 -0800596 'successful.'),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000597 cfg.IntOpt('ssh_timeout',
598 default=300,
lanoux283273b2015-12-04 03:01:54 -0800599 help='Timeout in seconds to wait for the ssh banner.'),
600 cfg.StrOpt('image_ssh_user',
601 default="root",
602 help="User name used to authenticate to an instance.",
603 deprecated_opts=[cfg.DeprecatedOpt('image_ssh_user',
604 group='compute'),
605 cfg.DeprecatedOpt('ssh_user',
606 group='compute'),
607 cfg.DeprecatedOpt('ssh_user',
608 group='scenario')]),
609 cfg.StrOpt('image_ssh_password',
610 default="password",
611 help="Password used to authenticate to an instance.",
612 deprecated_opts=[cfg.DeprecatedOpt('image_ssh_password',
613 group='compute')]),
614 cfg.StrOpt('ssh_shell_prologue',
615 default="set -eu -o pipefail; PATH=$$PATH:/sbin;",
616 help="Shell fragments to use before executing a command "
617 "when sshing to a guest.",
618 deprecated_opts=[cfg.DeprecatedOpt('ssh_shell_prologue',
619 group='compute')]),
620 cfg.IntOpt('ping_size',
621 default=56,
622 help="The packet size for ping packets originating "
623 "from remote linux hosts",
624 deprecated_opts=[cfg.DeprecatedOpt('ping_size',
625 group='compute')]),
626 cfg.IntOpt('ping_count',
627 default=1,
628 help="The number of ping packets originating from remote "
629 "linux hosts",
630 deprecated_opts=[cfg.DeprecatedOpt('ping_count',
631 group='compute')]),
632 cfg.StrOpt('floating_ip_range',
633 default='10.0.0.0/29',
634 help='Unallocated floating IP range, which will be used to '
635 'test the floating IP bulk feature for CRUD operation. '
636 'This block must not overlap an existing floating IP '
637 'pool.',
638 deprecated_opts=[cfg.DeprecatedOpt('floating_ip_range',
639 group='compute')]),
640 cfg.StrOpt('network_for_ssh',
641 default='public',
642 help="Network used for SSH connections. Ignored if "
zhufl4a412722016-05-13 16:51:32 +0800643 "connect_method=floating or run_validation=false.",
lanoux283273b2015-12-04 03:01:54 -0800644 deprecated_opts=[cfg.DeprecatedOpt('network_for_ssh',
nithya-ganesan67da2872015-02-08 23:13:48 +0000645 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000646]
647
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500648volume_group = cfg.OptGroup(name='volume',
649 title='Block Storage Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600650
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500651VolumeGroup = [
652 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400653 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500654 help='Time in seconds between volume availability checks.'),
655 cfg.IntOpt('build_timeout',
656 default=300,
Eric Harney9b1f89c2014-10-14 14:40:19 -0400657 help='Timeout in seconds to wait for a volume to become '
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500658 'available.'),
659 cfg.StrOpt('catalog_type',
Matthew Treinisheb724512013-10-25 15:12:59 +0000660 default='volume',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500661 help="Catalog type of the Volume Service"),
Arata Notsu8f440392013-09-13 16:14:20 +0900662 cfg.StrOpt('region',
663 default='',
664 help="The volume region name to use. If empty, the value "
665 "of identity.region is used instead. If no such region "
666 "is found in the service catalog, the first found one is "
667 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000668 cfg.StrOpt('endpoint_type',
669 default='publicURL',
670 choices=['public', 'admin', 'internal',
671 'publicURL', 'adminURL', 'internalURL'],
672 help="The endpoint type to use for the volume service."),
Benny Kopilovaf136a92015-11-10 07:37:23 +0200673 cfg.ListOpt('backend_names',
674 default=['BACKEND_1', 'BACKEND_2'],
april4be58dc2015-12-29 00:07:22 +0800675 help='A list of backend names separated by comma. '
bkopilov27905cc2016-04-12 14:29:13 +0300676 'The backend name must be declared in cinder.conf'),
Adam Gandelman827ad332013-06-24 17:04:09 -0700677 cfg.StrOpt('storage_protocol',
678 default='iSCSI',
679 help='Backend protocol to target when creating volume types'),
680 cfg.StrOpt('vendor_name',
681 default='Open Source',
682 help='Backend vendor to target when creating volume types'),
Ryan Hsua67f4632013-08-29 16:03:06 -0700683 cfg.StrOpt('disk_format',
684 default='raw',
685 help='Disk format to use when copying a volume to image'),
Jerry Cai9733d0e2014-03-19 15:50:49 +0800686 cfg.IntOpt('volume_size',
687 default=1,
688 help='Default size in GB for volumes created by volumes tests'),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500689]
K Jonathan Harkerd6ba4b42012-12-18 13:50:47 -0800690
Matthew Treinishd5c96022013-10-17 21:51:23 +0000691volume_feature_group = cfg.OptGroup(name='volume-feature-enabled',
692 title='Enabled Cinder Features')
693
694VolumeFeaturesGroup = [
695 cfg.BoolOpt('multi_backend',
696 default=False,
Matthew Treinishe3d26142013-11-26 19:14:58 +0000697 help="Runs Cinder multi-backend test (requires 2 backends)"),
Giulio Fidente74b08ad2014-01-18 04:02:51 +0100698 cfg.BoolOpt('backup',
699 default=True,
700 help='Runs Cinder volumes backup test'),
JordanPbce55532014-03-19 12:10:32 +0100701 cfg.BoolOpt('snapshot',
702 default=True,
703 help='Runs Cinder volume snapshot test'),
Takeaki Matsumoto1702aed2015-08-25 08:44:26 +0900704 cfg.BoolOpt('clone',
705 default=True,
706 help='Runs Cinder volume clone test'),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000707 cfg.ListOpt('api_extensions',
708 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800709 help='A list of enabled volume extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300710 'entry all which indicates every extension is enabled. '
711 'Empty list indicates all extensions are disabled'),
Zhi Kun Liubb363a22013-11-28 18:47:39 +0800712 cfg.BoolOpt('api_v1',
713 default=True,
714 help="Is the v1 volume API enabled"),
Zhi Kun Liu8cc3c842014-01-07 10:44:34 +0800715 cfg.BoolOpt('api_v2',
716 default=True,
717 help="Is the v2 volume API enabled"),
bkopilov8a657ae2015-05-11 11:45:23 +0300718 cfg.BoolOpt('bootable',
Benny Kopilov618359f2015-11-11 13:46:33 +0200719 default=True,
bkopilov8a657ae2015-05-11 11:45:23 +0300720 help='Update bootable status of a volume '
Benny Kopilov618359f2015-11-11 13:46:33 +0200721 'Not implemented on icehouse ',
Yuriy Nesenenko86d90f22016-01-13 14:01:39 +0200722 deprecated_for_removal=True),
723 # TODO(ynesenenko): Remove volume_services once liberty-eol happens.
724 cfg.BoolOpt('volume_services',
725 default=False,
726 help='Extract correct host info from host@backend')
Matthew Treinishd5c96022013-10-17 21:51:23 +0000727]
728
Daryl Walleck587385b2012-03-03 13:00:26 -0600729
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500730object_storage_group = cfg.OptGroup(name='object-storage',
731 title='Object Storage Service Options')
Attila Fazekasa23f5002012-10-23 19:32:45 +0200732
DennyZhang1e71b612013-09-26 12:35:40 -0500733ObjectStoreGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500734 cfg.StrOpt('catalog_type',
735 default='object-store',
736 help="Catalog type of the Object-Storage service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900737 cfg.StrOpt('region',
738 default='',
739 help="The object-storage region name to use. If empty, the "
740 "value of identity.region is used instead. If no such "
741 "region is found in the service catalog, the first found "
742 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000743 cfg.StrOpt('endpoint_type',
744 default='publicURL',
745 choices=['public', 'admin', 'internal',
746 'publicURL', 'adminURL', 'internalURL'],
747 help="The endpoint type to use for the object-store service."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000748 cfg.IntOpt('container_sync_timeout',
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900749 default=600,
Fabien Boucher2178d312013-12-31 15:38:57 +0100750 help="Number of seconds to time on waiting for a container "
nayna-patelb4989b32013-01-09 06:25:13 +0000751 "to container synchronization complete."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000752 cfg.IntOpt('container_sync_interval',
nayna-patelb4989b32013-01-09 06:25:13 +0000753 default=5,
Fabien Boucher2178d312013-12-31 15:38:57 +0100754 help="Number of seconds to wait while looping to check the "
nayna-patelb4989b32013-01-09 06:25:13 +0000755 "status of a container to container synchronization"),
Matthew Treinish3fdb80c2013-08-15 11:13:19 -0400756 cfg.StrOpt('operator_role',
757 default='Member',
758 help="Role to add to users created for swift tests to "
759 "enable creating containers"),
Matthew Treinish998c91d2014-03-01 12:39:49 -0500760 cfg.StrOpt('reseller_admin_role',
761 default='ResellerAdmin',
762 help="User role that has reseller admin"),
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900763 cfg.StrOpt('realm_name',
764 default='realm1',
765 help="Name of sync realm. A sync realm is a set of clusters "
766 "that have agreed to allow container syncing with each "
767 "other. Set the same realm name as Swift's "
768 "container-sync-realms.conf"),
769 cfg.StrOpt('cluster_name',
770 default='name1',
771 help="One name of cluster which is set in the realm whose name "
772 "is set in 'realm_name' item in this file. Set the "
773 "same cluster name as Swift's container-sync-realms.conf"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500774]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200775
Matthew Treinishd5c96022013-10-17 21:51:23 +0000776object_storage_feature_group = cfg.OptGroup(
777 name='object-storage-feature-enabled',
778 title='Enabled object-storage features')
779
780ObjectStoreFeaturesGroup = [
Matthew Treinish20345382013-12-13 17:04:23 +0000781 cfg.ListOpt('discoverable_apis',
782 default=['all'],
783 help="A list of the enabled optional discoverable apis. "
784 "A single entry, all, indicates that all of these "
785 "features are expected to be enabled"),
Daisuke Morita20a183f2014-08-25 14:43:36 +0900786 cfg.BoolOpt('container_sync',
787 default=True,
788 help="Execute (old style) container-sync tests"),
789 cfg.BoolOpt('object_versioning',
790 default=True,
791 help="Execute object-versioning tests"),
792 cfg.BoolOpt('discoverability',
793 default=True,
794 help="Execute discoverability tests"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000795]
796
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800797database_group = cfg.OptGroup(name='database',
798 title='Database Service Options')
799
800DatabaseGroup = [
801 cfg.StrOpt('catalog_type',
802 default='database',
803 help="Catalog type of the Database service."),
804 cfg.StrOpt('db_flavor_ref',
805 default="1",
806 help="Valid primary flavor to use in database tests."),
Peter Stachowski320f9c72014-04-21 16:13:23 -0400807 cfg.StrOpt('db_current_version',
808 default="v1.0",
809 help="Current database version to use in database tests."),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800810]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200811
Steve Bakerc60e4e32013-05-06 15:22:41 +1200812orchestration_group = cfg.OptGroup(name='orchestration',
813 title='Orchestration Service Options')
814
815OrchestrationGroup = [
816 cfg.StrOpt('catalog_type',
817 default='orchestration',
818 help="Catalog type of the Orchestration service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900819 cfg.StrOpt('region',
820 default='',
821 help="The orchestration region name to use. If empty, the "
822 "value of identity.region is used instead. If no such "
823 "region is found in the service catalog, the first found "
824 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000825 cfg.StrOpt('endpoint_type',
826 default='publicURL',
827 choices=['public', 'admin', 'internal',
828 'publicURL', 'adminURL', 'internalURL'],
829 help="The endpoint type to use for the orchestration service."),
Matthew Treinishdb9721d2015-03-18 14:21:28 -0400830 cfg.StrOpt('stack_owner_role', default='heat_stack_owner',
831 help='Role required for users to be able to manage stacks'),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200832 cfg.IntOpt('build_interval',
833 default=1,
834 help="Time in seconds between build status checks."),
835 cfg.IntOpt('build_timeout',
Matthew Treinisha2dfd492014-04-15 11:15:34 -0400836 default=1200,
Steve Bakerc60e4e32013-05-06 15:22:41 +1200837 help="Timeout in seconds to wait for a stack to build."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200838 cfg.StrOpt('instance_type',
Steve Baker9e86b832013-05-22 15:40:28 +1200839 default='m1.micro',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200840 help="Instance type for tests. Needs to be big enough for a "
841 "full OS plus the test workload"),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200842 cfg.StrOpt('keypair_name',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200843 help="Name of existing keypair to launch servers with."),
Clint Byrum71f27632013-09-09 11:41:32 -0700844 cfg.IntOpt('max_template_size',
Joe Gordon0e51b222013-10-24 14:11:10 +0100845 default=524288,
Clint Byrum71f27632013-09-09 11:41:32 -0700846 help="Value must match heat configuration of the same name."),
Steven Hardyfdc6bd72014-03-21 16:56:04 +0000847 cfg.IntOpt('max_resources_per_stack',
848 default=1000,
849 help="Value must match heat configuration of the same name."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200850]
851
852
Julie Pichond1017642013-07-24 16:37:23 +0100853dashboard_group = cfg.OptGroup(name="dashboard",
854 title="Dashboard options")
855
856DashboardGroup = [
857 cfg.StrOpt('dashboard_url',
858 default='http://localhost/',
859 help="Where the dashboard can be found"),
860 cfg.StrOpt('login_url',
861 default='http://localhost/auth/login/',
Yaroslav Lobankov002bfab2015-08-19 14:45:02 +0300862 help="Login page for the dashboard",
863 deprecated_for_removal=True),
Julie Pichond1017642013-07-24 16:37:23 +0100864]
865
866
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300867data_processing_group = cfg.OptGroup(name="data-processing",
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400868 title="Data Processing options")
869
870DataProcessingGroup = [
871 cfg.StrOpt('catalog_type',
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300872 default='data-processing',
873 deprecated_group="data_processing",
JordanPfc62c902014-02-26 14:47:28 +0000874 help="Catalog type of the data processing service."),
875 cfg.StrOpt('endpoint_type',
876 default='publicURL',
877 choices=['public', 'admin', 'internal',
878 'publicURL', 'adminURL', 'internalURL'],
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300879 deprecated_group="data_processing",
JordanPfc62c902014-02-26 14:47:28 +0000880 help="The endpoint type to use for the data processing "
881 "service."),
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400882]
883
884
Luigi Toscano14d172d2015-01-23 16:37:47 +0100885data_processing_feature_group = cfg.OptGroup(
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300886 name="data-processing-feature-enabled",
Luigi Toscano14d172d2015-01-23 16:37:47 +0100887 title="Enabled Data Processing features")
888
889DataProcessingFeaturesGroup = [
890 cfg.ListOpt('plugins',
Javier Penad750c2d2016-03-08 16:04:09 +0100891 default=["vanilla", "cdh"],
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300892 deprecated_group="data_processing-feature-enabled",
Luigi Toscano14d172d2015-01-23 16:37:47 +0100893 help="List of enabled data processing plugins")
894]
895
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500896stress_group = cfg.OptGroup(name='stress', title='Stress Test Options')
897
898StressGroup = [
899 cfg.StrOpt('nova_logdir',
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500900 help='Directory containing log files on the compute nodes'),
901 cfg.IntOpt('max_instances',
902 default=16,
903 help='Maximum number of instances to create during test.'),
904 cfg.StrOpt('controller',
David Kranzb9d97502013-05-01 15:55:04 -0400905 help='Controller host.'),
906 # new stress options
907 cfg.StrOpt('target_controller',
David Kranzb9d97502013-05-01 15:55:04 -0400908 help='Controller host.'),
909 cfg.StrOpt('target_ssh_user',
David Kranzb9d97502013-05-01 15:55:04 -0400910 help='ssh user.'),
911 cfg.StrOpt('target_private_key_path',
David Kranzb9d97502013-05-01 15:55:04 -0400912 help='Path to private key.'),
913 cfg.StrOpt('target_logfiles',
David Kranzb9d97502013-05-01 15:55:04 -0400914 help='regexp for list of log files.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000915 cfg.IntOpt('log_check_interval',
David Kranzb9d97502013-05-01 15:55:04 -0400916 default=60,
Marc Koderer32221b8e2013-08-23 13:57:50 +0200917 help='time (in seconds) between log file error checks.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000918 cfg.IntOpt('default_thread_number_per_action',
Marc Koderer32221b8e2013-08-23 13:57:50 +0200919 default=4,
Julien Leloup04d40f72014-01-28 11:17:18 +0100920 help='The number of threads created while stress test.'),
921 cfg.BoolOpt('leave_dirty_stack',
922 default=False,
923 help='Prevent the cleaning (tearDownClass()) between'
924 ' each stress test run if an exception occurs'
Julien Leloupa5ee5422014-02-13 14:29:02 +0100925 ' during this run.'),
926 cfg.BoolOpt('full_clean_stack',
927 default=False,
928 help='Allows a full cleaning process after a stress test.'
929 ' Caution : this cleanup will remove every objects of'
Sean Dagueed6e5862016-04-04 10:49:13 -0400930 ' every project.')
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500931]
932
933
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900934scenario_group = cfg.OptGroup(name='scenario', title='Scenario Test Options')
935
936ScenarioGroup = [
937 cfg.StrOpt('img_dir',
938 default='/opt/stack/new/devstack/files/images/'
939 'cirros-0.3.1-x86_64-uec',
Matthew Treinish5d5e20a2016-01-14 10:54:30 -0500940 help='Directory containing image files',
941 deprecated_for_removal=True),
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300942 cfg.StrOpt('img_file', deprecated_name='qcow2_img_file',
Masayuki Igawa4f71bf02014-02-21 14:02:29 +0900943 default='cirros-0.3.1-x86_64-disk.img',
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300944 help='Image file name'),
945 cfg.StrOpt('img_disk_format',
946 default='qcow2',
947 help='Image disk format'),
948 cfg.StrOpt('img_container_format',
949 default='bare',
950 help='Image container format'),
Evgeny Antyshev7ba0d5f2015-04-28 13:18:07 +0000951 cfg.DictOpt('img_properties', help='Glance image properties. '
952 'Use for custom images which require them'),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900953 cfg.StrOpt('ami_img_file',
954 default='cirros-0.3.1-x86_64-blank.img',
Matthew Treinish5d5e20a2016-01-14 10:54:30 -0500955 help='AMI image file name',
956 deprecated_for_removal=True),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900957 cfg.StrOpt('ari_img_file',
958 default='cirros-0.3.1-x86_64-initrd',
Matthew Treinish5d5e20a2016-01-14 10:54:30 -0500959 help='ARI image file name',
960 deprecated_for_removal=True),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900961 cfg.StrOpt('aki_img_file',
962 default='cirros-0.3.1-x86_64-vmlinuz',
Matthew Treinish5d5e20a2016-01-14 10:54:30 -0500963 help='AKI image file name',
964 deprecated_for_removal=True),
Yair Fried413bf2d2014-11-19 17:07:11 +0200965 # TODO(yfried): add support for dhcpcd
966 cfg.StrOpt('dhcp_client',
967 default='udhcpc',
Yaroslav Lobankovceae2042015-09-09 19:25:14 +0300968 choices=["udhcpc", "dhclient", ""],
Yair Fried413bf2d2014-11-19 17:07:11 +0200969 help='DHCP client used by images to renew DCHP lease. '
970 'If left empty, update operation will be skipped. '
971 'Supported clients: "udhcpc", "dhclient"')
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900972]
973
974
Matthew Treinish4c412922013-07-16 15:27:42 -0400975service_available_group = cfg.OptGroup(name="service_available",
976 title="Available OpenStack Services")
977
978ServiceAvailableGroup = [
979 cfg.BoolOpt('cinder',
980 default=True,
981 help="Whether or not cinder is expected to be available"),
Matthew Treinishfaa340d2013-07-19 16:26:21 -0400982 cfg.BoolOpt('neutron',
983 default=False,
984 help="Whether or not neutron is expected to be available"),
Matthew Treinish853ae442013-07-19 16:36:07 -0400985 cfg.BoolOpt('glance',
986 default=True,
987 help="Whether or not glance is expected to be available"),
Matthew Treinish61e332b2013-07-19 16:42:31 -0400988 cfg.BoolOpt('swift',
989 default=True,
990 help="Whether or not swift is expected to be available"),
Matthew Treinish6b41e242013-07-19 16:49:28 -0400991 cfg.BoolOpt('nova',
992 default=True,
993 help="Whether or not nova is expected to be available"),
Matthew Treinisha9d43882013-07-19 16:54:52 -0400994 cfg.BoolOpt('heat',
995 default=False,
996 help="Whether or not Heat is expected to be available"),
Julie Pichond1017642013-07-24 16:37:23 +0100997 cfg.BoolOpt('horizon',
998 default=True,
999 help="Whether or not Horizon is expected to be available"),
Sergey Lukjanov9c95a252014-03-13 23:59:22 +04001000 cfg.BoolOpt('sahara',
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +04001001 default=False,
Sergey Lukjanov9c95a252014-03-13 23:59:22 +04001002 help="Whether or not Sahara is expected to be available"),
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001003 cfg.BoolOpt('ironic',
1004 default=False,
1005 help="Whether or not Ironic is expected to be available"),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -08001006 cfg.BoolOpt('trove',
1007 default=False,
1008 help="Whether or not Trove is expected to be available"),
Matthew Treinish4c412922013-07-16 15:27:42 -04001009]
1010
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001011debug_group = cfg.OptGroup(name="debug",
1012 title="Debug System")
1013
1014DebugGroup = [
Sean Daguec522c092014-03-24 10:43:22 -04001015 cfg.StrOpt('trace_requests',
1016 default='',
1017 help="""A regex to determine which requests should be traced.
1018
1019This is a regex to match the caller for rest client requests to be able to
1020selectively trace calls out of specific classes and methods. It largely
1021exists for test development, and is not expected to be used in a real deploy
1022of tempest. This will be matched against the discovered ClassName:method
1023in the test environment.
1024
1025Expected values for this field are:
1026
1027 * ClassName:test_method_name - traces one test_method
1028 * ClassName:setUp(Class) - traces specific setup functions
1029 * ClassName:tearDown(Class) - traces specific teardown functions
1030 * ClassName:_run_cleanups - traces the cleanup functions
1031
1032If nothing is specified, this feature is not enabled. To trace everything
1033specify .* as the regex.
1034""")
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001035]
1036
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001037input_scenario_group = cfg.OptGroup(name="input-scenario",
1038 title="Filters and values for"
1039 " input scenarios")
1040
1041InputScenarioGroup = [
1042 cfg.StrOpt('image_regex',
1043 default='^cirros-0.3.1-x86_64-uec$',
1044 help="Matching images become parameters for scenario tests"),
1045 cfg.StrOpt('flavor_regex',
Andrea Frittoli99901c02014-01-30 18:06:49 +00001046 default='^m1.nano$',
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001047 help="Matching flavors become parameters for scenario tests"),
1048 cfg.StrOpt('non_ssh_image_regex',
1049 default='^.*[Ww]in.*$',
1050 help="SSH verification in tests is skipped"
1051 "for matching images"),
1052 cfg.StrOpt('ssh_user_regex',
Marc Koderer07f5a522015-03-27 15:02:41 +01001053 default="[[\"^.*[Cc]irros.*$\", \"cirros\"]]",
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001054 help="List of user mapped to regex "
1055 "to matching image names."),
1056]
1057
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001058
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001059baremetal_group = cfg.OptGroup(name='baremetal',
Chris Hoge8f1401b2014-11-19 14:00:37 -08001060 title='Baremetal provisioning service options',
1061 help='When enabling baremetal tests, Nova '
1062 'must be configured to use the Ironic '
Shuquan Huang33376522015-08-27 11:20:50 +00001063 'driver. The following parameters for the '
Chris Hoge8f1401b2014-11-19 14:00:37 -08001064 '[compute] section must be disabled: '
1065 'console_output, interface_attach, '
1066 'live_migration, pause, rescue, resize '
1067 'shelve, snapshot, and suspend')
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001068
Devananda van der Veenf385bde2016-02-03 07:56:01 -08001069
Andrea Frittoli (andreaf)1370baf2016-04-29 14:26:22 -05001070# NOTE(deva): Ironic tests have been ported to tempest.lib. New config options
Devananda van der Veenf385bde2016-02-03 07:56:01 -08001071# should be added to ironic/ironic_tempest_plugin/config.py.
1072# However, these options need to remain here for testing stable
1073# branches until Liberty release reaches EOL.
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001074BaremetalGroup = [
1075 cfg.StrOpt('catalog_type',
1076 default='baremetal',
Adam Gandelman4a48a602014-03-20 18:23:18 -07001077 help="Catalog type of the baremetal provisioning service"),
1078 cfg.BoolOpt('driver_enabled',
1079 default=False,
1080 help="Whether the Ironic nova-compute driver is enabled"),
Yuiko Takada1ee1b322014-07-04 09:55:30 +09001081 cfg.StrOpt('driver',
1082 default='fake',
1083 help="Driver name which Ironic uses"),
JordanPfc62c902014-02-26 14:47:28 +00001084 cfg.StrOpt('endpoint_type',
1085 default='publicURL',
1086 choices=['public', 'admin', 'internal',
1087 'publicURL', 'adminURL', 'internalURL'],
1088 help="The endpoint type to use for the baremetal provisioning "
Adam Gandelman4a48a602014-03-20 18:23:18 -07001089 "service"),
1090 cfg.IntOpt('active_timeout',
1091 default=300,
1092 help="Timeout for Ironic node to completely provision"),
1093 cfg.IntOpt('association_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001094 default=30,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001095 help="Timeout for association of Nova instance and Ironic "
1096 "node"),
1097 cfg.IntOpt('power_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001098 default=60,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001099 help="Timeout for Ironic power transitions."),
1100 cfg.IntOpt('unprovision_timeout',
Devananda van der Veend1e52a92015-04-13 12:58:49 -07001101 default=300,
1102 help="Timeout for unprovisioning an Ironic node. "
1103 "Takes longer since Kilo as Ironic performs an extra "
1104 "step in Node cleaning.")
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001105]
1106
Marc Koderer6ee82dc2014-02-17 10:26:29 +01001107negative_group = cfg.OptGroup(name='negative', title="Negative Test Options")
1108
1109NegativeGroup = [
1110 cfg.StrOpt('test_generator',
1111 default='tempest.common.' +
1112 'generator.negative_generator.NegativeTestGenerator',
1113 help="Test generator class for all negative tests"),
1114]
1115
Andrea Frittoli (andreaf)8def7ca2015-05-13 14:24:19 +01001116DefaultGroup = [
1117 cfg.StrOpt('resources_prefix',
1118 default='tempest',
1119 help="Prefix to be added when generating the name for "
1120 "test resources. It can be used to discover all "
1121 "resources associated with a specific test run when "
1122 "running tempest on a real-life cloud"),
1123]
1124
Jon Grimm270bd7f2014-08-05 18:11:29 +00001125_opts = [
1126 (auth_group, AuthGroup),
1127 (compute_group, ComputeGroup),
1128 (compute_features_group, ComputeFeaturesGroup),
1129 (identity_group, IdentityGroup),
1130 (identity_feature_group, IdentityFeatureGroup),
1131 (image_group, ImageGroup),
1132 (image_feature_group, ImageFeaturesGroup),
1133 (network_group, NetworkGroup),
1134 (network_feature_group, NetworkFeaturesGroup),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +00001135 (validation_group, ValidationGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001136 (volume_group, VolumeGroup),
1137 (volume_feature_group, VolumeFeaturesGroup),
1138 (object_storage_group, ObjectStoreGroup),
1139 (object_storage_feature_group, ObjectStoreFeaturesGroup),
1140 (database_group, DatabaseGroup),
1141 (orchestration_group, OrchestrationGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001142 (dashboard_group, DashboardGroup),
1143 (data_processing_group, DataProcessingGroup),
Luigi Toscano14d172d2015-01-23 16:37:47 +01001144 (data_processing_feature_group, DataProcessingFeaturesGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001145 (stress_group, StressGroup),
1146 (scenario_group, ScenarioGroup),
1147 (service_available_group, ServiceAvailableGroup),
1148 (debug_group, DebugGroup),
1149 (baremetal_group, BaremetalGroup),
1150 (input_scenario_group, InputScenarioGroup),
Andrea Frittoli (andreaf)8def7ca2015-05-13 14:24:19 +01001151 (negative_group, NegativeGroup),
1152 (None, DefaultGroup)
Jon Grimm270bd7f2014-08-05 18:11:29 +00001153]
1154
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001155
Matthew Treinish43b296a2014-02-28 15:23:00 -05001156def register_opts():
Matthew Treinisha966d0f2015-07-01 17:37:31 -04001157 ext_plugins = plugins.TempestTestPluginManager()
1158 # Register in-tree tempest config options
Jon Grimm270bd7f2014-08-05 18:11:29 +00001159 for g, o in _opts:
Maru Newbyf440c292015-03-31 15:58:47 +00001160 register_opt_group(_CONF, g, o)
Matthew Treinisha966d0f2015-07-01 17:37:31 -04001161 # Call external plugin config option registration
1162 ext_plugins.register_plugin_opts(_CONF)
Jon Grimm270bd7f2014-08-05 18:11:29 +00001163
1164
1165def list_opts():
1166 """Return a list of oslo.config options available.
1167
1168 The purpose of this is to allow tools like the Oslo sample config file
1169 generator to discover the options exposed to users.
1170 """
Matthew Treinish83a19aa2015-07-23 13:06:13 -04001171 ext_plugins = plugins.TempestTestPluginManager()
Chris Hoged7b4fd12015-11-11 10:24:52 -08001172 # Make a shallow copy of the options list that can be
1173 # extended by plugins. Send back the group object
1174 # to allow group help text to be generated.
1175 opt_list = [(g, o) for g, o in _opts]
Matthew Treinish83a19aa2015-07-23 13:06:13 -04001176 opt_list.extend(ext_plugins.get_plugin_options_list())
1177 return opt_list
Matthew Treinish43b296a2014-02-28 15:23:00 -05001178
1179
Sean Dague3b9b1f32013-12-20 17:04:54 -05001180# this should never be called outside of this class
1181class TempestConfigPrivate(object):
Daryl Walleck1465d612011-11-02 02:22:15 -05001182 """Provides OpenStack configuration information."""
1183
David Patersonbe9f9832015-10-15 09:10:45 -07001184 DEFAULT_CONFIG_DIR = os.path.join(os.getcwd(), "etc")
Daryl Walleck1465d612011-11-02 02:22:15 -05001185
Brian Waldon738cd632011-12-12 18:45:09 -05001186 DEFAULT_CONFIG_FILE = "tempest.conf"
1187
Andrea Frittolia96ee212014-08-15 18:34:20 +01001188 def __getattr__(self, attr):
1189 # Handles config options from the default group
Maru Newbyf440c292015-03-31 15:58:47 +00001190 return getattr(_CONF, attr)
Andrea Frittolia96ee212014-08-15 18:34:20 +01001191
Matthew Treinish43b296a2014-02-28 15:23:00 -05001192 def _set_attrs(self):
Maru Newbyf440c292015-03-31 15:58:47 +00001193 self.auth = _CONF.auth
1194 self.compute = _CONF.compute
1195 self.compute_feature_enabled = _CONF['compute-feature-enabled']
1196 self.identity = _CONF.identity
1197 self.identity_feature_enabled = _CONF['identity-feature-enabled']
1198 self.image = _CONF.image
1199 self.image_feature_enabled = _CONF['image-feature-enabled']
1200 self.network = _CONF.network
1201 self.network_feature_enabled = _CONF['network-feature-enabled']
Joseph Lanoux2f81cc12015-01-12 16:01:20 +00001202 self.validation = _CONF.validation
Maru Newbyf440c292015-03-31 15:58:47 +00001203 self.volume = _CONF.volume
1204 self.volume_feature_enabled = _CONF['volume-feature-enabled']
1205 self.object_storage = _CONF['object-storage']
1206 self.object_storage_feature_enabled = _CONF[
Matthew Treinishd5c96022013-10-17 21:51:23 +00001207 'object-storage-feature-enabled']
Maru Newbyf440c292015-03-31 15:58:47 +00001208 self.database = _CONF.database
1209 self.orchestration = _CONF.orchestration
Maru Newbyf440c292015-03-31 15:58:47 +00001210 self.dashboard = _CONF.dashboard
Telles Nobrega6189b0a2014-11-18 23:22:17 -03001211 self.data_processing = _CONF['data-processing']
Maru Newbyf440c292015-03-31 15:58:47 +00001212 self.data_processing_feature_enabled = _CONF[
Telles Nobrega6189b0a2014-11-18 23:22:17 -03001213 'data-processing-feature-enabled']
Maru Newbyf440c292015-03-31 15:58:47 +00001214 self.stress = _CONF.stress
1215 self.scenario = _CONF.scenario
1216 self.service_available = _CONF.service_available
1217 self.debug = _CONF.debug
1218 self.baremetal = _CONF.baremetal
1219 self.input_scenario = _CONF['input-scenario']
Maru Newbyf440c292015-03-31 15:58:47 +00001220 self.negative = _CONF.negative
Matthew Treinish46008082015-04-14 18:32:47 -04001221 logging.tempest_set_log_file('tempest.log')
Sean Dague86bd8422013-12-20 09:56:44 -05001222
Joe Gordon28a84ae2014-07-17 15:38:28 +00001223 def __init__(self, parse_conf=True, config_path=None):
Matthew Treinish43b296a2014-02-28 15:23:00 -05001224 """Initialize a configuration from a conf directory and conf file."""
1225 super(TempestConfigPrivate, self).__init__()
1226 config_files = []
1227 failsafe_path = "/etc/tempest/" + self.DEFAULT_CONFIG_FILE
1228
Joe Gordon28a84ae2014-07-17 15:38:28 +00001229 if config_path:
1230 path = config_path
1231 else:
1232 # Environment variables override defaults...
1233 conf_dir = os.environ.get('TEMPEST_CONFIG_DIR',
1234 self.DEFAULT_CONFIG_DIR)
1235 conf_file = os.environ.get('TEMPEST_CONFIG',
1236 self.DEFAULT_CONFIG_FILE)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001237
Joe Gordon28a84ae2014-07-17 15:38:28 +00001238 path = os.path.join(conf_dir, conf_file)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001239
1240 if not os.path.isfile(path):
1241 path = failsafe_path
1242
1243 # only parse the config file if we expect one to exist. This is needed
1244 # to remove an issue with the config file up to date checker.
1245 if parse_conf:
1246 config_files.append(path)
Maru Newbyf440c292015-03-31 15:58:47 +00001247 logging.register_options(_CONF)
Matthew Treinish5440a402014-10-02 14:36:16 -04001248 if os.path.isfile(path):
Maru Newbyf440c292015-03-31 15:58:47 +00001249 _CONF([], project='tempest', default_config_files=config_files)
Matthew Treinish5440a402014-10-02 14:36:16 -04001250 else:
Maru Newbyf440c292015-03-31 15:58:47 +00001251 _CONF([], project='tempest')
Marc Kodererc81c7672015-12-17 12:10:12 +01001252
1253 logging_cfg_path = "%s/logging.conf" % os.path.dirname(path)
Tom Patzige6f7c7d2016-02-17 16:46:11 +01001254 if ((not hasattr(_CONF, 'log_config_append') or
1255 _CONF.log_config_append is None) and
Marc Kodererc81c7672015-12-17 12:10:12 +01001256 os.path.isfile(logging_cfg_path)):
1257 # if logging conf is in place we need to set log_config_append
1258 _CONF.log_config_append = logging_cfg_path
1259
Maru Newbyf440c292015-03-31 15:58:47 +00001260 logging.setup(_CONF, 'tempest')
Matthew Treinish43b296a2014-02-28 15:23:00 -05001261 LOG = logging.getLogger('tempest')
1262 LOG.info("Using tempest config file %s" % path)
1263 register_opts()
1264 self._set_attrs()
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001265 if parse_conf:
Maru Newbyf440c292015-03-31 15:58:47 +00001266 _CONF.log_opt_values(LOG, std_logging.DEBUG)
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001267
Sean Dague86bd8422013-12-20 09:56:44 -05001268
1269class TempestConfigProxy(object):
1270 _config = None
Joe Gordon28a84ae2014-07-17 15:38:28 +00001271 _path = None
Sean Dague86bd8422013-12-20 09:56:44 -05001272
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001273 _extra_log_defaults = [
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001274 ('paramiko.transport', std_logging.INFO),
1275 ('requests.packages.urllib3.connectionpool', std_logging.WARN),
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001276 ]
1277
1278 def _fix_log_levels(self):
1279 """Tweak the oslo log defaults."""
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001280 for name, level in self._extra_log_defaults:
1281 std_logging.getLogger(name).setLevel(level)
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001282
Sean Dague86bd8422013-12-20 09:56:44 -05001283 def __getattr__(self, attr):
1284 if not self._config:
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001285 self._fix_log_levels()
Matthew Treinishaa29c7e2015-04-23 16:35:09 -04001286 lock_dir = os.path.join(tempfile.gettempdir(), 'tempest-lock')
1287 lockutils.set_defaults(lock_dir)
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()
Matthew Treinishca5a9ff2016-04-16 15:04:34 -04001297
1298
1299def skip_unless_config(*args):
Ken'ichi Ohmichi0385e102016-05-06 19:29:40 -07001300 """Decorator to raise a skip if a config opt doesn't exist or is False
Matthew Treinishca5a9ff2016-04-16 15:04:34 -04001301
1302 :param str group: The first arg, the option group to check
1303 :param str name: The second arg, the option name to check
1304 :param str msg: Optional third arg, the skip msg to use if a skip is raised
1305 :raises testtools.TestCaseskipException: If the specified config option
1306 doesn't exist or it exists and evaluates to False
1307 """
1308 def decorator(f):
1309 group = args[0]
1310 name = args[1]
1311
1312 @functools.wraps(f)
1313 def wrapper(self, *func_args, **func_kwargs):
1314 if not hasattr(CONF, group):
1315 msg = "Config group %s doesn't exist" % group
1316 raise testtools.TestCase.skipException(msg)
Ken'ichi Ohmichi0385e102016-05-06 19:29:40 -07001317
1318 conf_group = getattr(CONF, group)
1319 if not hasattr(conf_group, name):
1320 msg = "Config option %s.%s doesn't exist" % (group,
1321 name)
1322 raise testtools.TestCase.skipException(msg)
1323
1324 value = getattr(conf_group, name)
1325 if not value:
1326 if len(args) == 3:
1327 msg = args[2]
Matthew Treinishca5a9ff2016-04-16 15:04:34 -04001328 else:
Ken'ichi Ohmichi0385e102016-05-06 19:29:40 -07001329 msg = "Config option %s.%s is false" % (group,
1330 name)
1331 raise testtools.TestCase.skipException(msg)
Matthew Treinishca5a9ff2016-04-16 15:04:34 -04001332 return f(self, *func_args, **func_kwargs)
1333 return wrapper
1334 return decorator
1335
1336
1337def skip_if_config(*args):
1338 """Raise a skipException if a config exists and is True
1339
1340 :param str group: The first arg, the option group to check
1341 :param str name: The second arg, the option name to check
1342 :param str msg: Optional third arg, the skip msg to use if a skip is raised
1343 :raises testtools.TestCase.skipException: If the specified config option
1344 exists and evaluates to True
1345 """
1346 def decorator(f):
1347 group = args[0]
1348 name = args[1]
1349
1350 @functools.wraps(f)
1351 def wrapper(self, *func_args, **func_kwargs):
1352 if hasattr(CONF, group):
1353 conf_group = getattr(CONF, group)
1354 if hasattr(conf_group, name):
1355 value = getattr(conf_group, name)
1356 if value:
1357 if len(args) == 3:
1358 msg = args[2]
1359 else:
1360 msg = "Config option %s.%s is false" % (group,
1361 name)
1362 raise testtools.TestCase.skipException(msg)
1363 return f(self, *func_args, **func_kwargs)
1364 return wrapper
1365 return decorator