blob: eb5e23a6853770b3db57f94176629a5a46201194 [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"),
Andrea Frittoli (andreaf)100d18d2016-05-05 23:34:52 +0100169 cfg.BoolOpt('admin_domain_scope',
170 default=False,
171 help="Whether keystone identity v3 policy required "
172 "a domain scoped token to use admin APIs")
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500173]
Jay Pipes3f981df2012-03-27 18:59:44 -0400174
Matthew Treinishd5021a72014-01-09 18:42:51 +0000175identity_feature_group = cfg.OptGroup(name='identity-feature-enabled',
176 title='Enabled Identity Features')
177
178IdentityFeatureGroup = [
179 cfg.BoolOpt('trust',
180 default=True,
181 help='Does the identity service have delegation and '
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000182 'impersonation enabled'),
183 cfg.BoolOpt('api_v2',
184 default=True,
185 help='Is the v2 identity API enabled'),
186 cfg.BoolOpt('api_v3',
187 default=True,
188 help='Is the v3 identity API enabled'),
Jane Zadorozhna121576d2015-06-23 12:57:13 +0300189 cfg.ListOpt('api_extensions',
190 default=['all'],
191 help="A list of enabled identity extensions with a special "
192 "entry all which indicates every extension is enabled. "
193 "Empty list indicates all extensions are disabled. "
194 "To get the list of extensions run: 'keystone discover'")
Matthew Treinishd5021a72014-01-09 18:42:51 +0000195]
196
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500197compute_group = cfg.OptGroup(name='compute',
198 title='Compute Service Options')
Rohit Karajgie1b050d2011-12-02 16:13:18 -0800199
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500200ComputeGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500201 cfg.StrOpt('image_ref',
Matthew Treinishafcb6b42014-05-27 13:50:02 -0400202 help="Valid primary image reference to be used in tests. "
203 "This is a required option"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500204 cfg.StrOpt('image_ref_alt',
Matthew Treinishafcb6b42014-05-27 13:50:02 -0400205 help="Valid secondary image reference to be used in tests. "
206 "This is a required option, but if only one image is "
207 "available duplicate the value of image_ref above"),
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +0900208 cfg.StrOpt('flavor_ref',
209 default="1",
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500210 help="Valid primary flavor to use in tests."),
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +0900211 cfg.StrOpt('flavor_ref_alt',
212 default="2",
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500213 help='Valid secondary flavor to be used in tests.'),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500214 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400215 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500216 help="Time in seconds between build status checks."),
217 cfg.IntOpt('build_timeout',
218 default=300,
Hugh Saunders5b139ad2014-12-15 09:08:41 +0000219 help="Timeout in seconds to wait for an instance to build. "
220 "Other services that do not define build_timeout will "
Lucian Petrut1cfe2982015-01-06 13:57:36 +0200221 "inherit this value."),
Attila Fazekas0abbc952013-07-01 19:19:42 +0200222 cfg.IntOpt('ready_wait',
223 default=0,
DennyZhang8912d012013-09-25 18:08:34 -0500224 help="Additional wait time for clean state, when there is "
225 "no OS-EXT-STS extension available"),
Attila Fazekasb0661652013-05-08 13:01:36 +0200226 cfg.StrOpt('fixed_network_name',
Chris Hoge8f1401b2014-11-19 14:00:37 -0800227 help="Name of the fixed network that is visible to all test "
Sean Dagueed6e5862016-04-04 10:49:13 -0400228 "projects. If multiple networks are available for a "
229 "project, this is the network which will be used for "
230 "creating servers if tempest does not create a network or "
231 "s network is not specified elsewhere. It may be used for "
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000232 "ssh validation only if floating IPs are disabled."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500233 cfg.StrOpt('catalog_type',
234 default='compute',
235 help="Catalog type of the Compute service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900236 cfg.StrOpt('region',
237 default='',
238 help="The compute region name to use. If empty, the value "
239 "of identity.region is used instead. If no such region "
240 "is found in the service catalog, the first found one is "
241 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000242 cfg.StrOpt('endpoint_type',
243 default='publicURL',
244 choices=['public', 'admin', 'internal',
245 'publicURL', 'adminURL', 'internalURL'],
246 help="The endpoint type to use for the compute service."),
Ryan Hsucb2e1252013-09-03 21:44:49 -0700247 cfg.StrOpt('volume_device_name',
248 default='vdb',
249 help="Expected device name when a volume is attached to "
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900250 "an instance"),
251 cfg.IntOpt('shelved_offload_time',
252 default=0,
253 help='Time in seconds before a shelved instance is eligible '
254 'for removing from a host. -1 never offload, 0 offload '
255 'when shelved. This time should be the same as the time '
256 'of nova.conf, and some tests will run for as long as the '
Ghanshyam06a5b4a2014-04-11 17:32:45 +0900257 'time.'),
Sean Dague782f6772015-11-11 11:26:45 -0500258 cfg.IntOpt('min_compute_nodes',
259 default=1,
260 help=('The minimum number of compute nodes expected. This will '
261 'be utilized by some multinode specific tests to ensure '
262 'that requests match the expected size of the cluster '
ghanshyam29591532016-03-11 17:12:43 +0900263 'you are testing with.')),
Ken'ichi Ohmichi4d237e72015-11-05 06:32:33 +0000264 cfg.StrOpt('min_microversion',
265 default=None,
266 help="Lower version of the test target microversion range. "
267 "The format is 'X.Y', where 'X' and 'Y' are int values. "
268 "Tempest selects tests based on the range between "
269 "min_microversion and max_microversion. "
Ghanshyam395c5b52015-12-04 17:27:16 +0900270 "If both values are not specified, Tempest avoids tests "
271 "which require a microversion. Valid values are string "
ghanshyam29591532016-03-11 17:12:43 +0900272 "with format 'X.Y' or string 'latest'",
273 deprecated_group='compute-feature-enabled'),
Ken'ichi Ohmichi4d237e72015-11-05 06:32:33 +0000274 cfg.StrOpt('max_microversion',
275 default=None,
276 help="Upper version of the test target microversion range. "
277 "The format is 'X.Y', where 'X' and 'Y' are int values. "
278 "Tempest selects tests based on the range between "
279 "min_microversion and max_microversion. "
Ghanshyam395c5b52015-12-04 17:27:16 +0900280 "If both values are not specified, Tempest avoids tests "
281 "which require a microversion. Valid values are string "
ghanshyam29591532016-03-11 17:12:43 +0900282 "with format 'X.Y' or string 'latest'",
283 deprecated_group='compute-feature-enabled'),
284]
285
286compute_features_group = cfg.OptGroup(name='compute-feature-enabled',
287 title="Enabled Compute Service Features")
288
289ComputeFeaturesGroup = [
Matthew Treinishd5c96022013-10-17 21:51:23 +0000290 cfg.BoolOpt('disk_config',
291 default=True,
292 help="If false, skip disk config tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000293 cfg.ListOpt('api_extensions',
294 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800295 help='A list of enabled compute extensions with a special '
Ken'ichi Ohmichia7e68712014-05-06 10:47:26 +0900296 'entry all which indicates every extension is enabled. '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300297 'Each extension should be specified with alias name. '
298 'Empty list indicates all extensions are disabled'),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000299 cfg.BoolOpt('change_password',
300 default=False,
301 help="Does the test environment support changing the admin "
302 "password?"),
Adam Gandelmanc6eefb42014-07-15 16:44:08 -0700303 cfg.BoolOpt('console_output',
304 default=True,
305 help="Does the test environment support obtaining instance "
306 "serial console output?"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000307 cfg.BoolOpt('resize',
308 default=False,
309 help="Does the test environment support resizing?"),
Eric Windischb5538072014-03-09 23:47:35 -0400310 cfg.BoolOpt('pause',
311 default=True,
312 help="Does the test environment support pausing?"),
David Shrewsbury25f666f2014-07-22 12:17:59 -0400313 cfg.BoolOpt('shelve',
314 default=True,
315 help="Does the test environment support shelving/unshelving?"),
Eric Windischaeb7e842014-03-10 01:10:50 -0400316 cfg.BoolOpt('suspend',
317 default=True,
318 help="Does the test environment support suspend/resume?"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000319 cfg.BoolOpt('live_migration',
Joe Gordon31a139a2014-11-17 16:39:04 -0800320 default=True,
Matthew Treinishd5c96022013-10-17 21:51:23 +0000321 help="Does the test environment support live migration "
322 "available?"),
YAMAMOTO Takashi1f62af22015-06-16 03:29:50 +0900323 cfg.BoolOpt('metadata_service',
324 default=True,
325 help="Does the test environment support metadata service? "
326 "Ignored unless validation.run_validation=true."),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000327 cfg.BoolOpt('block_migration_for_live_migration',
328 default=False,
329 help="Does the test environment use block devices for live "
330 "migration"),
331 cfg.BoolOpt('block_migrate_cinder_iscsi',
332 default=False,
333 help="Does the test environment block migration support "
Joe Gordon0a5788f2015-03-17 11:29:38 -0700334 "cinder iSCSI volumes. Note, libvirt doesn't support this, "
335 "see https://bugs.launchpad.net/nova/+bug/1398999"),
Ghanshyam Mann41c17572014-02-27 18:52:56 +0900336 cfg.BoolOpt('vnc_console',
337 default=False,
338 help='Enable VNC console. This configuration value should '
Ghanshyam70876d02014-03-11 11:40:18 +0900339 'be same as [nova.vnc]->vnc_enabled in nova.conf'),
340 cfg.BoolOpt('spice_console',
341 default=False,
342 help='Enable Spice console. This configuration value should '
343 'be same as [nova.spice]->enabled in nova.conf'),
344 cfg.BoolOpt('rdp_console',
345 default=False,
346 help='Enable RDP console. This configuration value should '
Adam Gandelman2e37b4f2014-06-18 17:34:21 -0700347 'be same as [nova.rdp]->enabled in nova.conf'),
348 cfg.BoolOpt('rescue',
349 default=True,
350 help='Does the test environment support instance rescue '
Ghanshyam9c2e50d2014-07-22 21:32:05 +0900351 'mode?'),
352 cfg.BoolOpt('enable_instance_password',
353 default=True,
354 help='Enables returning of the instance password by the '
355 'relevant server API calls such as create, rebuild '
Adam Gandelman7186f7a2014-07-23 09:28:56 -0400356 'or rescue.'),
357 cfg.BoolOpt('interface_attach',
358 default=True,
359 help='Does the test environment support dynamic network '
Adam Gandelmanfbc95ac2014-06-19 17:33:43 -0700360 'interface attachment?'),
361 cfg.BoolOpt('snapshot',
362 default=True,
363 help='Does the test environment support creating snapshot '
Matthew Treinishdfd7ac02015-02-09 17:47:31 -0500364 'images of running instances?'),
Takeaki Matsumotodf4ab7c2015-08-25 17:49:23 +0900365 cfg.BoolOpt('nova_cert',
366 default=True,
367 help='Does the test environment have the nova cert running?'),
Takeaki Matsumotod7e04b22015-09-04 15:13:38 +0900368 cfg.BoolOpt('personality',
369 default=True,
370 help='Does the test environment support server personality'),
Matt Riedemann79b3b492015-06-20 14:20:44 -0700371 cfg.BoolOpt('attach_encrypted_volume',
372 default=True,
373 help='Does the test environment support attaching an '
374 'encrypted volume to a running server instance? This may '
375 'depend on the combination of compute_driver in nova and '
376 'the volume_driver(s) in cinder.'),
Alexander Gubanov509e2842015-06-09 15:29:51 +0300377 cfg.BoolOpt('config_drive',
378 default=True,
379 help='Enable special configuration drive with metadata.'),
Yair Friedca5cfb52016-01-04 15:41:55 +0200380 cfg.ListOpt('scheduler_available_filters',
381 default=['all'],
382 help="A list of enabled filters that nova will accept as hints"
383 " to the scheduler when creating a server. A special "
384 "entry 'all' indicates all filters are enabled. Empty "
385 "list indicates all filters are disabled. The full "
386 "available list of filters is in nova.conf: "
387 "DEFAULT.scheduler_available_filters"),
388
Matthew Treinishd5c96022013-10-17 21:51:23 +0000389]
390
391
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500392image_group = cfg.OptGroup(name='image',
393 title="Image Service Options")
Jay Pipesf38eaac2012-06-21 13:37:35 -0400394
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500395ImageGroup = [
Matthew Treinish72ea4422013-02-07 14:42:49 -0500396 cfg.StrOpt('catalog_type',
397 default='image',
Sean Dague83401992013-05-06 17:46:36 -0400398 help='Catalog type of the Image service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900399 cfg.StrOpt('region',
400 default='',
401 help="The image region name to use. If empty, the value "
402 "of identity.region is used instead. If no such region "
403 "is found in the service catalog, the first found one is "
404 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000405 cfg.StrOpt('endpoint_type',
406 default='publicURL',
407 choices=['public', 'admin', 'internal',
408 'publicURL', 'adminURL', 'internalURL'],
409 help="The endpoint type to use for the image service."),
Sean Dague83401992013-05-06 17:46:36 -0400410 cfg.StrOpt('http_image',
411 default='http://download.cirros-cloud.net/0.3.1/'
412 'cirros-0.3.1-x86_64-uec.tar.gz',
Lucian Petrut1cfe2982015-01-06 13:57:36 +0200413 help='http accessible image'),
414 cfg.IntOpt('build_timeout',
415 default=300,
416 help="Timeout in seconds to wait for an image to "
417 "become available."),
418 cfg.IntOpt('build_interval',
419 default=1,
420 help="Time in seconds between image operation status "
Takashi NATSUME12a48512015-08-10 18:33:16 +0900421 "checks."),
422 cfg.ListOpt('container_formats',
423 default=['ami', 'ari', 'aki', 'bare', 'ovf', 'ova'],
424 help="A list of image's container formats "
425 "users can specify."),
426 cfg.ListOpt('disk_formats',
427 default=['ami', 'ari', 'aki', 'vhd', 'vmdk', 'raw', 'qcow2',
428 'vdi', 'iso'],
429 help="A list of image's disk formats "
430 "users can specify.")
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500431]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400432
Matthew Treinish2b5287d2013-10-22 17:40:34 +0000433image_feature_group = cfg.OptGroup(name='image-feature-enabled',
434 title='Enabled image service features')
435
436ImageFeaturesGroup = [
437 cfg.BoolOpt('api_v2',
438 default=True,
439 help="Is the v2 image API enabled"),
440 cfg.BoolOpt('api_v1',
441 default=True,
442 help="Is the v1 image API enabled"),
bkopilov81aaae72015-05-15 23:46:25 +0300443 cfg.BoolOpt('deactivate_image',
444 default=False,
445 help="Is the deactivate-image feature enabled."
446 " The feature has been integrated since Kilo."),
Matthew Treinish2b5287d2013-10-22 17:40:34 +0000447]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400448
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500449network_group = cfg.OptGroup(name='network',
450 title='Network Service Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600451
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500452NetworkGroup = [
453 cfg.StrOpt('catalog_type',
454 default='network',
Mark McClainf2982e82013-07-06 17:48:03 -0400455 help='Catalog type of the Neutron service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900456 cfg.StrOpt('region',
457 default='',
458 help="The network region name to use. If empty, the value "
459 "of identity.region is used instead. If no such region "
460 "is found in the service catalog, the first found one is "
461 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000462 cfg.StrOpt('endpoint_type',
463 default='publicURL',
464 choices=['public', 'admin', 'internal',
465 'publicURL', 'adminURL', 'internalURL'],
466 help="The endpoint type to use for the network service."),
Sean Dagueed6e5862016-04-04 10:49:13 -0400467 cfg.StrOpt('project_network_cidr',
468 deprecated_name='tenant_network_cidr',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500469 default="10.100.0.0/16",
Sean Dagueed6e5862016-04-04 10:49:13 -0400470 help="The cidr block to allocate project ipv4 subnets from"),
471 cfg.IntOpt('project_network_mask_bits',
472 deprecated_name='tenant_network_mask_bits',
Attila Fazekas8ea181b2013-07-13 16:26:14 +0200473 default=28,
Sean Dagueed6e5862016-04-04 10:49:13 -0400474 help="The mask bits for project ipv4 subnets"),
475 cfg.StrOpt('project_network_v6_cidr',
476 deprecated_name='tenant_network_v6_cidr',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400477 default="2003::/48",
Sean Dagueed6e5862016-04-04 10:49:13 -0400478 help="The cidr block to allocate project ipv6 subnets from"),
479 cfg.IntOpt('project_network_v6_mask_bits',
480 deprecated_name='tenant_network_v6_mask_bits',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400481 default=64,
Sean Dagueed6e5862016-04-04 10:49:13 -0400482 help="The mask bits for project ipv6 subnets"),
483 cfg.BoolOpt('project_networks_reachable',
484 deprecated_name='tenant_networks_reachable',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500485 default=False,
Sean Dagueed6e5862016-04-04 10:49:13 -0400486 help="Whether project networks can be reached directly from "
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000487 "the test client. This must be set to True when the "
488 "'fixed' ssh_connect_method is selected."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500489 cfg.StrOpt('public_network_id',
490 default="",
491 help="Id of the public network that provides external "
492 "connectivity"),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000493 cfg.StrOpt('floating_network_name',
494 help="Default floating network name. Used to allocate floating "
495 "IPs when neutron is enabled."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500496 cfg.StrOpt('public_router_id',
497 default="",
498 help="Id of the public router that provides external "
Yair Fried1eb27f52014-11-10 15:24:19 +0200499 "connectivity. This should only be used when Neutron's "
500 "'allow_overlapping_ips' is set to 'False' in "
501 "neutron.conf. usually not needed past 'Grizzly' release"),
izikpensod9a01a62014-02-17 20:02:32 +0200502 cfg.IntOpt('build_timeout',
503 default=300,
504 help="Timeout in seconds to wait for network operation to "
505 "complete."),
506 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400507 default=1,
izikpensod9a01a62014-02-17 20:02:32 +0200508 help="Time in seconds between network operation status "
509 "checks."),
Attila Fazekas640392b2014-06-12 15:58:10 +0200510 cfg.ListOpt('dns_servers',
511 default=["8.8.8.8", "8.8.4.4"],
Itzik Brown5be44582014-12-24 09:05:13 +0200512 help="List of dns servers which should be used"
Itzik Brown2ca01cd2014-12-08 12:58:20 +0200513 " for subnet creation"),
514 cfg.StrOpt('port_vnic_type',
515 choices=[None, 'normal', 'direct', 'macvtap'],
516 help="vnic_type to use when Launching instances"
517 " with pre-configured ports."
518 " Supported ports are:"
519 " ['normal','direct','macvtap']"),
piyush11078648e35d52015-09-24 12:56:43 +0530520 cfg.ListOpt('default_network',
521 default=["1.0.0.0/16", "2.0.0.0/16"],
522 help="List of ip pools"
523 " for subnetpools creation"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500524]
Jay Pipes3f981df2012-03-27 18:59:44 -0400525
Matthew Treinishe3d26142013-11-26 19:14:58 +0000526network_feature_group = cfg.OptGroup(name='network-feature-enabled',
527 title='Enabled network service features')
528
529NetworkFeaturesGroup = [
Matthew Treinishe2e33cf2014-03-03 19:28:41 +0000530 cfg.BoolOpt('ipv6',
531 default=True,
532 help="Allow the execution of IPv6 tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000533 cfg.ListOpt('api_extensions',
534 default=['all'],
Alexander Gubanov36e1f9b2015-06-12 18:02:10 +0300535 help="A list of enabled network extensions with a special "
536 "entry all which indicates every extension is enabled. "
537 "Empty list indicates all extensions are disabled. "
538 "To get the list of extensions run: 'neutron ext-list'"),
Sean M. Collinsdd27a4d2014-05-13 10:33:15 -0400539 cfg.BoolOpt('ipv6_subnet_attributes',
540 default=False,
541 help="Allow the execution of IPv6 subnet tests that use "
542 "the extended IPv6 attributes ipv6_ra_mode "
543 "and ipv6_address_mode"
Mark McClain6e07c0d2014-10-10 11:25:03 -0400544 ),
Itzik Brownbeb30d32015-03-29 09:42:54 +0300545 cfg.BoolOpt('port_admin_state_change',
546 default=True,
547 help="Does the test environment support changing"
548 " port admin state"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000549]
550
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000551validation_group = cfg.OptGroup(name='validation',
552 title='SSH Validation options')
553
554ValidationGroup = [
Matthew Treinishe5cca002015-05-11 15:36:50 -0400555 cfg.BoolOpt('run_validation',
556 default=False,
557 help='Enable ssh on created servers and creation of additional'
lanoux283273b2015-12-04 03:01:54 -0800558 ' validation resources to enable remote access'),
Brandon Palmc6cc91d2015-08-19 13:20:21 -0500559 cfg.BoolOpt('security_group',
560 default=True,
561 help='Enable/disable security groups.'),
562 cfg.BoolOpt('security_group_rules',
563 default=True,
564 help='Enable/disable security group rules.'),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000565 cfg.StrOpt('connect_method',
566 default='floating',
567 choices=['fixed', 'floating'],
568 help='Default IP type used for validation: '
569 '-fixed: uses the first IP belonging to the fixed network '
lanoux283273b2015-12-04 03:01:54 -0800570 '-floating: creates and uses a floating IP',
571 deprecated_opts=[cfg.DeprecatedOpt('use_floatingip_for_ssh',
572 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000573 cfg.StrOpt('auth_method',
574 default='keypair',
575 choices=['keypair'],
576 help='Default authentication method to the instance. '
577 'Only ssh via keypair is supported for now. '
lanoux283273b2015-12-04 03:01:54 -0800578 'Additional methods will be handled in a separate spec.',
579 deprecated_opts=[cfg.DeprecatedOpt('ssh_auth_method',
580 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000581 cfg.IntOpt('ip_version_for_ssh',
582 default=4,
lanoux283273b2015-12-04 03:01:54 -0800583 help='Default IP version for ssh connections.'),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000584 cfg.IntOpt('ping_timeout',
585 default=120,
lanoux283273b2015-12-04 03:01:54 -0800586 help='Timeout in seconds to wait for ping to succeed.',
587 deprecated_opts=[cfg.DeprecatedOpt('ping_timeout',
588 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000589 cfg.IntOpt('connect_timeout',
590 default=60,
591 help='Timeout in seconds to wait for the TCP connection to be '
lanoux283273b2015-12-04 03:01:54 -0800592 'successful.'),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000593 cfg.IntOpt('ssh_timeout',
594 default=300,
lanoux283273b2015-12-04 03:01:54 -0800595 help='Timeout in seconds to wait for the ssh banner.'),
596 cfg.StrOpt('image_ssh_user',
597 default="root",
598 help="User name used to authenticate to an instance.",
599 deprecated_opts=[cfg.DeprecatedOpt('image_ssh_user',
600 group='compute'),
601 cfg.DeprecatedOpt('ssh_user',
602 group='compute'),
603 cfg.DeprecatedOpt('ssh_user',
604 group='scenario')]),
605 cfg.StrOpt('image_ssh_password',
606 default="password",
607 help="Password used to authenticate to an instance.",
608 deprecated_opts=[cfg.DeprecatedOpt('image_ssh_password',
609 group='compute')]),
610 cfg.StrOpt('ssh_shell_prologue',
611 default="set -eu -o pipefail; PATH=$$PATH:/sbin;",
612 help="Shell fragments to use before executing a command "
613 "when sshing to a guest.",
614 deprecated_opts=[cfg.DeprecatedOpt('ssh_shell_prologue',
615 group='compute')]),
616 cfg.IntOpt('ping_size',
617 default=56,
618 help="The packet size for ping packets originating "
619 "from remote linux hosts",
620 deprecated_opts=[cfg.DeprecatedOpt('ping_size',
621 group='compute')]),
622 cfg.IntOpt('ping_count',
623 default=1,
624 help="The number of ping packets originating from remote "
625 "linux hosts",
626 deprecated_opts=[cfg.DeprecatedOpt('ping_count',
627 group='compute')]),
628 cfg.StrOpt('floating_ip_range',
629 default='10.0.0.0/29',
630 help='Unallocated floating IP range, which will be used to '
631 'test the floating IP bulk feature for CRUD operation. '
632 'This block must not overlap an existing floating IP '
633 'pool.',
634 deprecated_opts=[cfg.DeprecatedOpt('floating_ip_range',
635 group='compute')]),
636 cfg.StrOpt('network_for_ssh',
637 default='public',
638 help="Network used for SSH connections. Ignored if "
zhufl4a412722016-05-13 16:51:32 +0800639 "connect_method=floating or run_validation=false.",
lanoux283273b2015-12-04 03:01:54 -0800640 deprecated_opts=[cfg.DeprecatedOpt('network_for_ssh',
nithya-ganesan67da2872015-02-08 23:13:48 +0000641 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000642]
643
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500644volume_group = cfg.OptGroup(name='volume',
645 title='Block Storage Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600646
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500647VolumeGroup = [
648 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400649 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500650 help='Time in seconds between volume availability checks.'),
651 cfg.IntOpt('build_timeout',
652 default=300,
Eric Harney9b1f89c2014-10-14 14:40:19 -0400653 help='Timeout in seconds to wait for a volume to become '
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500654 'available.'),
655 cfg.StrOpt('catalog_type',
Matthew Treinisheb724512013-10-25 15:12:59 +0000656 default='volume',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500657 help="Catalog type of the Volume Service"),
Arata Notsu8f440392013-09-13 16:14:20 +0900658 cfg.StrOpt('region',
659 default='',
660 help="The volume region name to use. If empty, the value "
661 "of identity.region is used instead. If no such region "
662 "is found in the service catalog, the first found one is "
663 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000664 cfg.StrOpt('endpoint_type',
665 default='publicURL',
666 choices=['public', 'admin', 'internal',
667 'publicURL', 'adminURL', 'internalURL'],
668 help="The endpoint type to use for the volume service."),
Benny Kopilovaf136a92015-11-10 07:37:23 +0200669 cfg.ListOpt('backend_names',
670 default=['BACKEND_1', 'BACKEND_2'],
april4be58dc2015-12-29 00:07:22 +0800671 help='A list of backend names separated by comma. '
bkopilov27905cc2016-04-12 14:29:13 +0300672 'The backend name must be declared in cinder.conf'),
Adam Gandelman827ad332013-06-24 17:04:09 -0700673 cfg.StrOpt('storage_protocol',
674 default='iSCSI',
675 help='Backend protocol to target when creating volume types'),
676 cfg.StrOpt('vendor_name',
677 default='Open Source',
678 help='Backend vendor to target when creating volume types'),
Ryan Hsua67f4632013-08-29 16:03:06 -0700679 cfg.StrOpt('disk_format',
680 default='raw',
681 help='Disk format to use when copying a volume to image'),
Jerry Cai9733d0e2014-03-19 15:50:49 +0800682 cfg.IntOpt('volume_size',
683 default=1,
684 help='Default size in GB for volumes created by volumes tests'),
Andrew Kerrfcb0b682016-04-01 16:01:34 -0400685 cfg.StrOpt('min_microversion',
686 default=None,
687 help="Lower version of the test target microversion range. "
688 "The format is 'X.Y', where 'X' and 'Y' are int values. "
689 "Tempest selects tests based on the range between "
690 "min_microversion and max_microversion. "
691 "If both values are not specified, Tempest avoids tests "
692 "which require a microversion. Valid values are string "
693 "with format 'X.Y' or string 'latest'",),
694 cfg.StrOpt('max_microversion',
695 default=None,
696 help="Upper version of the test target microversion range. "
697 "The format is 'X.Y', where 'X' and 'Y' are int values. "
698 "Tempest selects tests based on the range between "
699 "min_microversion and max_microversion. "
700 "If both values are not specified, Tempest avoids tests "
701 "which require a microversion. Valid values are string "
702 "with format 'X.Y' or string 'latest'",),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500703]
K Jonathan Harkerd6ba4b42012-12-18 13:50:47 -0800704
Matthew Treinishd5c96022013-10-17 21:51:23 +0000705volume_feature_group = cfg.OptGroup(name='volume-feature-enabled',
706 title='Enabled Cinder Features')
707
708VolumeFeaturesGroup = [
709 cfg.BoolOpt('multi_backend',
710 default=False,
Matthew Treinishe3d26142013-11-26 19:14:58 +0000711 help="Runs Cinder multi-backend test (requires 2 backends)"),
Giulio Fidente74b08ad2014-01-18 04:02:51 +0100712 cfg.BoolOpt('backup',
713 default=True,
714 help='Runs Cinder volumes backup test'),
JordanPbce55532014-03-19 12:10:32 +0100715 cfg.BoolOpt('snapshot',
716 default=True,
717 help='Runs Cinder volume snapshot test'),
Takeaki Matsumoto1702aed2015-08-25 08:44:26 +0900718 cfg.BoolOpt('clone',
719 default=True,
720 help='Runs Cinder volume clone test'),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000721 cfg.ListOpt('api_extensions',
722 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800723 help='A list of enabled volume extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300724 'entry all which indicates every extension is enabled. '
725 'Empty list indicates all extensions are disabled'),
Zhi Kun Liubb363a22013-11-28 18:47:39 +0800726 cfg.BoolOpt('api_v1',
727 default=True,
728 help="Is the v1 volume API enabled"),
Zhi Kun Liu8cc3c842014-01-07 10:44:34 +0800729 cfg.BoolOpt('api_v2',
730 default=True,
731 help="Is the v2 volume API enabled"),
Andrew Kerrfcb0b682016-04-01 16:01:34 -0400732 cfg.BoolOpt('api_v3',
733 default=False,
734 help="Is the v3 volume API enabled"),
bkopilov8a657ae2015-05-11 11:45:23 +0300735 cfg.BoolOpt('bootable',
Benny Kopilov618359f2015-11-11 13:46:33 +0200736 default=True,
bkopilov8a657ae2015-05-11 11:45:23 +0300737 help='Update bootable status of a volume '
Benny Kopilov618359f2015-11-11 13:46:33 +0200738 'Not implemented on icehouse ',
Yuriy Nesenenko86d90f22016-01-13 14:01:39 +0200739 deprecated_for_removal=True),
740 # TODO(ynesenenko): Remove volume_services once liberty-eol happens.
741 cfg.BoolOpt('volume_services',
742 default=False,
743 help='Extract correct host info from host@backend')
Matthew Treinishd5c96022013-10-17 21:51:23 +0000744]
745
Daryl Walleck587385b2012-03-03 13:00:26 -0600746
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500747object_storage_group = cfg.OptGroup(name='object-storage',
748 title='Object Storage Service Options')
Attila Fazekasa23f5002012-10-23 19:32:45 +0200749
DennyZhang1e71b612013-09-26 12:35:40 -0500750ObjectStoreGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500751 cfg.StrOpt('catalog_type',
752 default='object-store',
753 help="Catalog type of the Object-Storage service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900754 cfg.StrOpt('region',
755 default='',
756 help="The object-storage region name to use. If empty, the "
757 "value of identity.region is used instead. If no such "
758 "region is found in the service catalog, the first found "
759 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000760 cfg.StrOpt('endpoint_type',
761 default='publicURL',
762 choices=['public', 'admin', 'internal',
763 'publicURL', 'adminURL', 'internalURL'],
764 help="The endpoint type to use for the object-store service."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000765 cfg.IntOpt('container_sync_timeout',
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900766 default=600,
Fabien Boucher2178d312013-12-31 15:38:57 +0100767 help="Number of seconds to time on waiting for a container "
nayna-patelb4989b32013-01-09 06:25:13 +0000768 "to container synchronization complete."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000769 cfg.IntOpt('container_sync_interval',
nayna-patelb4989b32013-01-09 06:25:13 +0000770 default=5,
Fabien Boucher2178d312013-12-31 15:38:57 +0100771 help="Number of seconds to wait while looping to check the "
nayna-patelb4989b32013-01-09 06:25:13 +0000772 "status of a container to container synchronization"),
Matthew Treinish3fdb80c2013-08-15 11:13:19 -0400773 cfg.StrOpt('operator_role',
774 default='Member',
775 help="Role to add to users created for swift tests to "
776 "enable creating containers"),
Matthew Treinish998c91d2014-03-01 12:39:49 -0500777 cfg.StrOpt('reseller_admin_role',
778 default='ResellerAdmin',
779 help="User role that has reseller admin"),
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900780 cfg.StrOpt('realm_name',
781 default='realm1',
782 help="Name of sync realm. A sync realm is a set of clusters "
783 "that have agreed to allow container syncing with each "
784 "other. Set the same realm name as Swift's "
785 "container-sync-realms.conf"),
786 cfg.StrOpt('cluster_name',
787 default='name1',
788 help="One name of cluster which is set in the realm whose name "
789 "is set in 'realm_name' item in this file. Set the "
790 "same cluster name as Swift's container-sync-realms.conf"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500791]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200792
Matthew Treinishd5c96022013-10-17 21:51:23 +0000793object_storage_feature_group = cfg.OptGroup(
794 name='object-storage-feature-enabled',
795 title='Enabled object-storage features')
796
797ObjectStoreFeaturesGroup = [
Matthew Treinish20345382013-12-13 17:04:23 +0000798 cfg.ListOpt('discoverable_apis',
799 default=['all'],
800 help="A list of the enabled optional discoverable apis. "
801 "A single entry, all, indicates that all of these "
802 "features are expected to be enabled"),
Daisuke Morita20a183f2014-08-25 14:43:36 +0900803 cfg.BoolOpt('container_sync',
804 default=True,
805 help="Execute (old style) container-sync tests"),
806 cfg.BoolOpt('object_versioning',
807 default=True,
808 help="Execute object-versioning tests"),
809 cfg.BoolOpt('discoverability',
810 default=True,
811 help="Execute discoverability tests"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000812]
813
Steve Bakerc60e4e32013-05-06 15:22:41 +1200814orchestration_group = cfg.OptGroup(name='orchestration',
815 title='Orchestration Service Options')
816
817OrchestrationGroup = [
818 cfg.StrOpt('catalog_type',
819 default='orchestration',
820 help="Catalog type of the Orchestration service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900821 cfg.StrOpt('region',
822 default='',
823 help="The orchestration region name to use. If empty, the "
824 "value of identity.region is used instead. If no such "
825 "region is found in the service catalog, the first found "
826 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000827 cfg.StrOpt('endpoint_type',
828 default='publicURL',
829 choices=['public', 'admin', 'internal',
830 'publicURL', 'adminURL', 'internalURL'],
831 help="The endpoint type to use for the orchestration service."),
Matthew Treinishdb9721d2015-03-18 14:21:28 -0400832 cfg.StrOpt('stack_owner_role', default='heat_stack_owner',
833 help='Role required for users to be able to manage stacks'),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200834 cfg.IntOpt('build_interval',
835 default=1,
836 help="Time in seconds between build status checks."),
837 cfg.IntOpt('build_timeout',
Matthew Treinisha2dfd492014-04-15 11:15:34 -0400838 default=1200,
Steve Bakerc60e4e32013-05-06 15:22:41 +1200839 help="Timeout in seconds to wait for a stack to build."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200840 cfg.StrOpt('instance_type',
Steve Baker9e86b832013-05-22 15:40:28 +1200841 default='m1.micro',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200842 help="Instance type for tests. Needs to be big enough for a "
843 "full OS plus the test workload"),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200844 cfg.StrOpt('keypair_name',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200845 help="Name of existing keypair to launch servers with."),
Clint Byrum71f27632013-09-09 11:41:32 -0700846 cfg.IntOpt('max_template_size',
Joe Gordon0e51b222013-10-24 14:11:10 +0100847 default=524288,
Clint Byrum71f27632013-09-09 11:41:32 -0700848 help="Value must match heat configuration of the same name."),
Steven Hardyfdc6bd72014-03-21 16:56:04 +0000849 cfg.IntOpt('max_resources_per_stack',
850 default=1000,
851 help="Value must match heat configuration of the same name."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200852]
853
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300854data_processing_group = cfg.OptGroup(name="data-processing",
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400855 title="Data Processing options")
856
857DataProcessingGroup = [
858 cfg.StrOpt('catalog_type',
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300859 default='data-processing',
860 deprecated_group="data_processing",
JordanPfc62c902014-02-26 14:47:28 +0000861 help="Catalog type of the data processing service."),
862 cfg.StrOpt('endpoint_type',
863 default='publicURL',
864 choices=['public', 'admin', 'internal',
865 'publicURL', 'adminURL', 'internalURL'],
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300866 deprecated_group="data_processing",
JordanPfc62c902014-02-26 14:47:28 +0000867 help="The endpoint type to use for the data processing "
868 "service."),
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400869]
870
871
Luigi Toscano14d172d2015-01-23 16:37:47 +0100872data_processing_feature_group = cfg.OptGroup(
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300873 name="data-processing-feature-enabled",
Luigi Toscano14d172d2015-01-23 16:37:47 +0100874 title="Enabled Data Processing features")
875
876DataProcessingFeaturesGroup = [
877 cfg.ListOpt('plugins',
Javier Penad750c2d2016-03-08 16:04:09 +0100878 default=["vanilla", "cdh"],
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300879 deprecated_group="data_processing-feature-enabled",
Luigi Toscano14d172d2015-01-23 16:37:47 +0100880 help="List of enabled data processing plugins")
881]
882
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500883stress_group = cfg.OptGroup(name='stress', title='Stress Test Options')
884
885StressGroup = [
886 cfg.StrOpt('nova_logdir',
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500887 help='Directory containing log files on the compute nodes'),
888 cfg.IntOpt('max_instances',
889 default=16,
890 help='Maximum number of instances to create during test.'),
891 cfg.StrOpt('controller',
David Kranzb9d97502013-05-01 15:55:04 -0400892 help='Controller host.'),
893 # new stress options
894 cfg.StrOpt('target_controller',
David Kranzb9d97502013-05-01 15:55:04 -0400895 help='Controller host.'),
896 cfg.StrOpt('target_ssh_user',
David Kranzb9d97502013-05-01 15:55:04 -0400897 help='ssh user.'),
898 cfg.StrOpt('target_private_key_path',
David Kranzb9d97502013-05-01 15:55:04 -0400899 help='Path to private key.'),
900 cfg.StrOpt('target_logfiles',
David Kranzb9d97502013-05-01 15:55:04 -0400901 help='regexp for list of log files.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000902 cfg.IntOpt('log_check_interval',
David Kranzb9d97502013-05-01 15:55:04 -0400903 default=60,
Marc Koderer32221b8e2013-08-23 13:57:50 +0200904 help='time (in seconds) between log file error checks.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000905 cfg.IntOpt('default_thread_number_per_action',
Marc Koderer32221b8e2013-08-23 13:57:50 +0200906 default=4,
Julien Leloup04d40f72014-01-28 11:17:18 +0100907 help='The number of threads created while stress test.'),
908 cfg.BoolOpt('leave_dirty_stack',
909 default=False,
910 help='Prevent the cleaning (tearDownClass()) between'
911 ' each stress test run if an exception occurs'
Julien Leloupa5ee5422014-02-13 14:29:02 +0100912 ' during this run.'),
913 cfg.BoolOpt('full_clean_stack',
914 default=False,
915 help='Allows a full cleaning process after a stress test.'
916 ' Caution : this cleanup will remove every objects of'
Sean Dagueed6e5862016-04-04 10:49:13 -0400917 ' every project.')
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500918]
919
920
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900921scenario_group = cfg.OptGroup(name='scenario', title='Scenario Test Options')
922
923ScenarioGroup = [
924 cfg.StrOpt('img_dir',
925 default='/opt/stack/new/devstack/files/images/'
926 'cirros-0.3.1-x86_64-uec',
Matthew Treinish5d5e20a2016-01-14 10:54:30 -0500927 help='Directory containing image files',
928 deprecated_for_removal=True),
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300929 cfg.StrOpt('img_file', deprecated_name='qcow2_img_file',
Masayuki Igawa4f71bf02014-02-21 14:02:29 +0900930 default='cirros-0.3.1-x86_64-disk.img',
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300931 help='Image file name'),
932 cfg.StrOpt('img_disk_format',
933 default='qcow2',
934 help='Image disk format'),
935 cfg.StrOpt('img_container_format',
936 default='bare',
937 help='Image container format'),
Evgeny Antyshev7ba0d5f2015-04-28 13:18:07 +0000938 cfg.DictOpt('img_properties', help='Glance image properties. '
939 'Use for custom images which require them'),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900940 cfg.StrOpt('ami_img_file',
941 default='cirros-0.3.1-x86_64-blank.img',
Matthew Treinish5d5e20a2016-01-14 10:54:30 -0500942 help='AMI image file name',
943 deprecated_for_removal=True),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900944 cfg.StrOpt('ari_img_file',
945 default='cirros-0.3.1-x86_64-initrd',
Matthew Treinish5d5e20a2016-01-14 10:54:30 -0500946 help='ARI image file name',
947 deprecated_for_removal=True),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900948 cfg.StrOpt('aki_img_file',
949 default='cirros-0.3.1-x86_64-vmlinuz',
Matthew Treinish5d5e20a2016-01-14 10:54:30 -0500950 help='AKI image file name',
951 deprecated_for_removal=True),
Yair Fried413bf2d2014-11-19 17:07:11 +0200952 # TODO(yfried): add support for dhcpcd
953 cfg.StrOpt('dhcp_client',
954 default='udhcpc',
Yaroslav Lobankovceae2042015-09-09 19:25:14 +0300955 choices=["udhcpc", "dhclient", ""],
Yair Fried413bf2d2014-11-19 17:07:11 +0200956 help='DHCP client used by images to renew DCHP lease. '
957 'If left empty, update operation will be skipped. '
958 'Supported clients: "udhcpc", "dhclient"')
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900959]
960
961
Matthew Treinish4c412922013-07-16 15:27:42 -0400962service_available_group = cfg.OptGroup(name="service_available",
963 title="Available OpenStack Services")
964
965ServiceAvailableGroup = [
966 cfg.BoolOpt('cinder',
967 default=True,
968 help="Whether or not cinder is expected to be available"),
Matthew Treinishfaa340d2013-07-19 16:26:21 -0400969 cfg.BoolOpt('neutron',
970 default=False,
971 help="Whether or not neutron is expected to be available"),
Matthew Treinish853ae442013-07-19 16:36:07 -0400972 cfg.BoolOpt('glance',
973 default=True,
974 help="Whether or not glance is expected to be available"),
Matthew Treinish61e332b2013-07-19 16:42:31 -0400975 cfg.BoolOpt('swift',
976 default=True,
977 help="Whether or not swift is expected to be available"),
Matthew Treinish6b41e242013-07-19 16:49:28 -0400978 cfg.BoolOpt('nova',
979 default=True,
980 help="Whether or not nova is expected to be available"),
Matthew Treinisha9d43882013-07-19 16:54:52 -0400981 cfg.BoolOpt('heat',
982 default=False,
983 help="Whether or not Heat is expected to be available"),
Sergey Lukjanov9c95a252014-03-13 23:59:22 +0400984 cfg.BoolOpt('sahara',
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400985 default=False,
Sergey Lukjanov9c95a252014-03-13 23:59:22 +0400986 help="Whether or not Sahara is expected to be available"),
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +0300987 cfg.BoolOpt('ironic',
988 default=False,
989 help="Whether or not Ironic is expected to be available"),
Matthew Treinish4c412922013-07-16 15:27:42 -0400990]
991
Attila Fazekasaeeeefd2013-08-06 17:01:56 +0200992debug_group = cfg.OptGroup(name="debug",
993 title="Debug System")
994
995DebugGroup = [
Sean Daguec522c092014-03-24 10:43:22 -0400996 cfg.StrOpt('trace_requests',
997 default='',
998 help="""A regex to determine which requests should be traced.
999
1000This is a regex to match the caller for rest client requests to be able to
1001selectively trace calls out of specific classes and methods. It largely
1002exists for test development, and is not expected to be used in a real deploy
1003of tempest. This will be matched against the discovered ClassName:method
1004in the test environment.
1005
1006Expected values for this field are:
1007
1008 * ClassName:test_method_name - traces one test_method
1009 * ClassName:setUp(Class) - traces specific setup functions
1010 * ClassName:tearDown(Class) - traces specific teardown functions
1011 * ClassName:_run_cleanups - traces the cleanup functions
1012
1013If nothing is specified, this feature is not enabled. To trace everything
1014specify .* as the regex.
1015""")
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001016]
1017
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001018input_scenario_group = cfg.OptGroup(name="input-scenario",
1019 title="Filters and values for"
Matthew Treinishf2c45012016-06-22 21:13:42 -04001020 " input scenarios[DEPRECATED]")
1021
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001022
1023InputScenarioGroup = [
1024 cfg.StrOpt('image_regex',
1025 default='^cirros-0.3.1-x86_64-uec$',
Matthew Treinishf2c45012016-06-22 21:13:42 -04001026 help="Matching images become parameters for scenario tests",
1027 deprecated_for_removal=True),
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001028 cfg.StrOpt('flavor_regex',
Andrea Frittoli99901c02014-01-30 18:06:49 +00001029 default='^m1.nano$',
Matthew Treinishf2c45012016-06-22 21:13:42 -04001030 help="Matching flavors become parameters for scenario tests",
1031 deprecated_for_removal=True),
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001032 cfg.StrOpt('non_ssh_image_regex',
1033 default='^.*[Ww]in.*$',
1034 help="SSH verification in tests is skipped"
Matthew Treinishf2c45012016-06-22 21:13:42 -04001035 "for matching images",
1036 deprecated_for_removal=True),
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001037 cfg.StrOpt('ssh_user_regex',
Marc Koderer07f5a522015-03-27 15:02:41 +01001038 default="[[\"^.*[Cc]irros.*$\", \"cirros\"]]",
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001039 help="List of user mapped to regex "
Matthew Treinishf2c45012016-06-22 21:13:42 -04001040 "to matching image names.",
1041 deprecated_for_removal=True),
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001042]
1043
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001044
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001045baremetal_group = cfg.OptGroup(name='baremetal',
Chris Hoge8f1401b2014-11-19 14:00:37 -08001046 title='Baremetal provisioning service options',
1047 help='When enabling baremetal tests, Nova '
1048 'must be configured to use the Ironic '
Shuquan Huang33376522015-08-27 11:20:50 +00001049 'driver. The following parameters for the '
Chris Hoge8f1401b2014-11-19 14:00:37 -08001050 '[compute] section must be disabled: '
1051 'console_output, interface_attach, '
1052 'live_migration, pause, rescue, resize '
1053 'shelve, snapshot, and suspend')
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001054
Devananda van der Veenf385bde2016-02-03 07:56:01 -08001055
Andrea Frittoli (andreaf)1370baf2016-04-29 14:26:22 -05001056# NOTE(deva): Ironic tests have been ported to tempest.lib. New config options
Devananda van der Veenf385bde2016-02-03 07:56:01 -08001057# should be added to ironic/ironic_tempest_plugin/config.py.
1058# However, these options need to remain here for testing stable
1059# branches until Liberty release reaches EOL.
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001060BaremetalGroup = [
1061 cfg.StrOpt('catalog_type',
1062 default='baremetal',
Adam Gandelman4a48a602014-03-20 18:23:18 -07001063 help="Catalog type of the baremetal provisioning service"),
1064 cfg.BoolOpt('driver_enabled',
1065 default=False,
1066 help="Whether the Ironic nova-compute driver is enabled"),
Yuiko Takada1ee1b322014-07-04 09:55:30 +09001067 cfg.StrOpt('driver',
1068 default='fake',
1069 help="Driver name which Ironic uses"),
JordanPfc62c902014-02-26 14:47:28 +00001070 cfg.StrOpt('endpoint_type',
1071 default='publicURL',
1072 choices=['public', 'admin', 'internal',
1073 'publicURL', 'adminURL', 'internalURL'],
1074 help="The endpoint type to use for the baremetal provisioning "
Adam Gandelman4a48a602014-03-20 18:23:18 -07001075 "service"),
1076 cfg.IntOpt('active_timeout',
1077 default=300,
1078 help="Timeout for Ironic node to completely provision"),
1079 cfg.IntOpt('association_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001080 default=30,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001081 help="Timeout for association of Nova instance and Ironic "
1082 "node"),
1083 cfg.IntOpt('power_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001084 default=60,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001085 help="Timeout for Ironic power transitions."),
1086 cfg.IntOpt('unprovision_timeout',
Devananda van der Veend1e52a92015-04-13 12:58:49 -07001087 default=300,
1088 help="Timeout for unprovisioning an Ironic node. "
1089 "Takes longer since Kilo as Ironic performs an extra "
1090 "step in Node cleaning.")
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001091]
1092
Marc Koderer6ee82dc2014-02-17 10:26:29 +01001093negative_group = cfg.OptGroup(name='negative', title="Negative Test Options")
1094
1095NegativeGroup = [
1096 cfg.StrOpt('test_generator',
1097 default='tempest.common.' +
1098 'generator.negative_generator.NegativeTestGenerator',
1099 help="Test generator class for all negative tests"),
1100]
1101
Andrea Frittoli (andreaf)8def7ca2015-05-13 14:24:19 +01001102DefaultGroup = [
1103 cfg.StrOpt('resources_prefix',
1104 default='tempest',
1105 help="Prefix to be added when generating the name for "
1106 "test resources. It can be used to discover all "
1107 "resources associated with a specific test run when "
1108 "running tempest on a real-life cloud"),
1109]
1110
Jon Grimm270bd7f2014-08-05 18:11:29 +00001111_opts = [
1112 (auth_group, AuthGroup),
1113 (compute_group, ComputeGroup),
1114 (compute_features_group, ComputeFeaturesGroup),
1115 (identity_group, IdentityGroup),
1116 (identity_feature_group, IdentityFeatureGroup),
1117 (image_group, ImageGroup),
1118 (image_feature_group, ImageFeaturesGroup),
1119 (network_group, NetworkGroup),
1120 (network_feature_group, NetworkFeaturesGroup),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +00001121 (validation_group, ValidationGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001122 (volume_group, VolumeGroup),
1123 (volume_feature_group, VolumeFeaturesGroup),
1124 (object_storage_group, ObjectStoreGroup),
1125 (object_storage_feature_group, ObjectStoreFeaturesGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001126 (orchestration_group, OrchestrationGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001127 (data_processing_group, DataProcessingGroup),
Luigi Toscano14d172d2015-01-23 16:37:47 +01001128 (data_processing_feature_group, DataProcessingFeaturesGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001129 (stress_group, StressGroup),
1130 (scenario_group, ScenarioGroup),
1131 (service_available_group, ServiceAvailableGroup),
1132 (debug_group, DebugGroup),
1133 (baremetal_group, BaremetalGroup),
1134 (input_scenario_group, InputScenarioGroup),
Andrea Frittoli (andreaf)8def7ca2015-05-13 14:24:19 +01001135 (negative_group, NegativeGroup),
1136 (None, DefaultGroup)
Jon Grimm270bd7f2014-08-05 18:11:29 +00001137]
1138
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001139
Matthew Treinish43b296a2014-02-28 15:23:00 -05001140def register_opts():
Matthew Treinisha966d0f2015-07-01 17:37:31 -04001141 ext_plugins = plugins.TempestTestPluginManager()
1142 # Register in-tree tempest config options
Jon Grimm270bd7f2014-08-05 18:11:29 +00001143 for g, o in _opts:
Maru Newbyf440c292015-03-31 15:58:47 +00001144 register_opt_group(_CONF, g, o)
Matthew Treinisha966d0f2015-07-01 17:37:31 -04001145 # Call external plugin config option registration
1146 ext_plugins.register_plugin_opts(_CONF)
Jon Grimm270bd7f2014-08-05 18:11:29 +00001147
1148
1149def list_opts():
1150 """Return a list of oslo.config options available.
1151
1152 The purpose of this is to allow tools like the Oslo sample config file
1153 generator to discover the options exposed to users.
1154 """
Matthew Treinish83a19aa2015-07-23 13:06:13 -04001155 ext_plugins = plugins.TempestTestPluginManager()
Chris Hoged7b4fd12015-11-11 10:24:52 -08001156 # Make a shallow copy of the options list that can be
1157 # extended by plugins. Send back the group object
1158 # to allow group help text to be generated.
1159 opt_list = [(g, o) for g, o in _opts]
Matthew Treinish83a19aa2015-07-23 13:06:13 -04001160 opt_list.extend(ext_plugins.get_plugin_options_list())
1161 return opt_list
Matthew Treinish43b296a2014-02-28 15:23:00 -05001162
1163
Sean Dague3b9b1f32013-12-20 17:04:54 -05001164# this should never be called outside of this class
1165class TempestConfigPrivate(object):
Daryl Walleck1465d612011-11-02 02:22:15 -05001166 """Provides OpenStack configuration information."""
1167
David Patersonbe9f9832015-10-15 09:10:45 -07001168 DEFAULT_CONFIG_DIR = os.path.join(os.getcwd(), "etc")
Daryl Walleck1465d612011-11-02 02:22:15 -05001169
Brian Waldon738cd632011-12-12 18:45:09 -05001170 DEFAULT_CONFIG_FILE = "tempest.conf"
1171
Andrea Frittolia96ee212014-08-15 18:34:20 +01001172 def __getattr__(self, attr):
1173 # Handles config options from the default group
Maru Newbyf440c292015-03-31 15:58:47 +00001174 return getattr(_CONF, attr)
Andrea Frittolia96ee212014-08-15 18:34:20 +01001175
Matthew Treinish43b296a2014-02-28 15:23:00 -05001176 def _set_attrs(self):
Maru Newbyf440c292015-03-31 15:58:47 +00001177 self.auth = _CONF.auth
1178 self.compute = _CONF.compute
1179 self.compute_feature_enabled = _CONF['compute-feature-enabled']
1180 self.identity = _CONF.identity
1181 self.identity_feature_enabled = _CONF['identity-feature-enabled']
1182 self.image = _CONF.image
1183 self.image_feature_enabled = _CONF['image-feature-enabled']
1184 self.network = _CONF.network
1185 self.network_feature_enabled = _CONF['network-feature-enabled']
Joseph Lanoux2f81cc12015-01-12 16:01:20 +00001186 self.validation = _CONF.validation
Maru Newbyf440c292015-03-31 15:58:47 +00001187 self.volume = _CONF.volume
1188 self.volume_feature_enabled = _CONF['volume-feature-enabled']
1189 self.object_storage = _CONF['object-storage']
1190 self.object_storage_feature_enabled = _CONF[
Matthew Treinishd5c96022013-10-17 21:51:23 +00001191 'object-storage-feature-enabled']
Maru Newbyf440c292015-03-31 15:58:47 +00001192 self.orchestration = _CONF.orchestration
Telles Nobrega6189b0a2014-11-18 23:22:17 -03001193 self.data_processing = _CONF['data-processing']
Maru Newbyf440c292015-03-31 15:58:47 +00001194 self.data_processing_feature_enabled = _CONF[
Telles Nobrega6189b0a2014-11-18 23:22:17 -03001195 'data-processing-feature-enabled']
Maru Newbyf440c292015-03-31 15:58:47 +00001196 self.stress = _CONF.stress
1197 self.scenario = _CONF.scenario
1198 self.service_available = _CONF.service_available
1199 self.debug = _CONF.debug
1200 self.baremetal = _CONF.baremetal
1201 self.input_scenario = _CONF['input-scenario']
Maru Newbyf440c292015-03-31 15:58:47 +00001202 self.negative = _CONF.negative
Matthew Treinish46008082015-04-14 18:32:47 -04001203 logging.tempest_set_log_file('tempest.log')
Sean Dague86bd8422013-12-20 09:56:44 -05001204
Joe Gordon28a84ae2014-07-17 15:38:28 +00001205 def __init__(self, parse_conf=True, config_path=None):
Matthew Treinish43b296a2014-02-28 15:23:00 -05001206 """Initialize a configuration from a conf directory and conf file."""
1207 super(TempestConfigPrivate, self).__init__()
1208 config_files = []
1209 failsafe_path = "/etc/tempest/" + self.DEFAULT_CONFIG_FILE
1210
Joe Gordon28a84ae2014-07-17 15:38:28 +00001211 if config_path:
1212 path = config_path
1213 else:
1214 # Environment variables override defaults...
1215 conf_dir = os.environ.get('TEMPEST_CONFIG_DIR',
1216 self.DEFAULT_CONFIG_DIR)
1217 conf_file = os.environ.get('TEMPEST_CONFIG',
1218 self.DEFAULT_CONFIG_FILE)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001219
Joe Gordon28a84ae2014-07-17 15:38:28 +00001220 path = os.path.join(conf_dir, conf_file)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001221
1222 if not os.path.isfile(path):
1223 path = failsafe_path
1224
1225 # only parse the config file if we expect one to exist. This is needed
1226 # to remove an issue with the config file up to date checker.
1227 if parse_conf:
1228 config_files.append(path)
Maru Newbyf440c292015-03-31 15:58:47 +00001229 logging.register_options(_CONF)
Matthew Treinish5440a402014-10-02 14:36:16 -04001230 if os.path.isfile(path):
Maru Newbyf440c292015-03-31 15:58:47 +00001231 _CONF([], project='tempest', default_config_files=config_files)
Matthew Treinish5440a402014-10-02 14:36:16 -04001232 else:
Maru Newbyf440c292015-03-31 15:58:47 +00001233 _CONF([], project='tempest')
Marc Kodererc81c7672015-12-17 12:10:12 +01001234
1235 logging_cfg_path = "%s/logging.conf" % os.path.dirname(path)
Tom Patzige6f7c7d2016-02-17 16:46:11 +01001236 if ((not hasattr(_CONF, 'log_config_append') or
1237 _CONF.log_config_append is None) and
Marc Kodererc81c7672015-12-17 12:10:12 +01001238 os.path.isfile(logging_cfg_path)):
1239 # if logging conf is in place we need to set log_config_append
1240 _CONF.log_config_append = logging_cfg_path
1241
Maru Newbyf440c292015-03-31 15:58:47 +00001242 logging.setup(_CONF, 'tempest')
Matthew Treinish43b296a2014-02-28 15:23:00 -05001243 LOG = logging.getLogger('tempest')
1244 LOG.info("Using tempest config file %s" % path)
1245 register_opts()
1246 self._set_attrs()
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001247 if parse_conf:
Maru Newbyf440c292015-03-31 15:58:47 +00001248 _CONF.log_opt_values(LOG, std_logging.DEBUG)
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001249
Sean Dague86bd8422013-12-20 09:56:44 -05001250
1251class TempestConfigProxy(object):
1252 _config = None
Joe Gordon28a84ae2014-07-17 15:38:28 +00001253 _path = None
Sean Dague86bd8422013-12-20 09:56:44 -05001254
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001255 _extra_log_defaults = [
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001256 ('paramiko.transport', std_logging.INFO),
1257 ('requests.packages.urllib3.connectionpool', std_logging.WARN),
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001258 ]
1259
1260 def _fix_log_levels(self):
1261 """Tweak the oslo log defaults."""
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001262 for name, level in self._extra_log_defaults:
1263 std_logging.getLogger(name).setLevel(level)
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001264
Sean Dague86bd8422013-12-20 09:56:44 -05001265 def __getattr__(self, attr):
1266 if not self._config:
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001267 self._fix_log_levels()
Matthew Treinishaa29c7e2015-04-23 16:35:09 -04001268 lock_dir = os.path.join(tempfile.gettempdir(), 'tempest-lock')
1269 lockutils.set_defaults(lock_dir)
Joe Gordon28a84ae2014-07-17 15:38:28 +00001270 self._config = TempestConfigPrivate(config_path=self._path)
Sean Dague86bd8422013-12-20 09:56:44 -05001271
1272 return getattr(self._config, attr)
1273
Joe Gordon28a84ae2014-07-17 15:38:28 +00001274 def set_config_path(self, path):
1275 self._path = path
1276
Sean Dague86bd8422013-12-20 09:56:44 -05001277
1278CONF = TempestConfigProxy()
Matthew Treinishca5a9ff2016-04-16 15:04:34 -04001279
1280
1281def skip_unless_config(*args):
Ken'ichi Ohmichi0385e102016-05-06 19:29:40 -07001282 """Decorator to raise a skip if a config opt doesn't exist or is False
Matthew Treinishca5a9ff2016-04-16 15:04:34 -04001283
1284 :param str group: The first arg, the option group to check
1285 :param str name: The second arg, the option name to check
1286 :param str msg: Optional third arg, the skip msg to use if a skip is raised
1287 :raises testtools.TestCaseskipException: If the specified config option
1288 doesn't exist or it exists and evaluates to False
1289 """
1290 def decorator(f):
1291 group = args[0]
1292 name = args[1]
1293
1294 @functools.wraps(f)
1295 def wrapper(self, *func_args, **func_kwargs):
1296 if not hasattr(CONF, group):
1297 msg = "Config group %s doesn't exist" % group
1298 raise testtools.TestCase.skipException(msg)
Ken'ichi Ohmichi0385e102016-05-06 19:29:40 -07001299
1300 conf_group = getattr(CONF, group)
1301 if not hasattr(conf_group, name):
1302 msg = "Config option %s.%s doesn't exist" % (group,
1303 name)
1304 raise testtools.TestCase.skipException(msg)
1305
1306 value = getattr(conf_group, name)
1307 if not value:
1308 if len(args) == 3:
1309 msg = args[2]
Matthew Treinishca5a9ff2016-04-16 15:04:34 -04001310 else:
Ken'ichi Ohmichi0385e102016-05-06 19:29:40 -07001311 msg = "Config option %s.%s is false" % (group,
1312 name)
1313 raise testtools.TestCase.skipException(msg)
Matthew Treinishca5a9ff2016-04-16 15:04:34 -04001314 return f(self, *func_args, **func_kwargs)
1315 return wrapper
1316 return decorator
1317
1318
1319def skip_if_config(*args):
1320 """Raise a skipException if a config exists and is True
1321
1322 :param str group: The first arg, the option group to check
1323 :param str name: The second arg, the option name to check
1324 :param str msg: Optional third arg, the skip msg to use if a skip is raised
1325 :raises testtools.TestCase.skipException: If the specified config option
1326 exists and evaluates to True
1327 """
1328 def decorator(f):
1329 group = args[0]
1330 name = args[1]
1331
1332 @functools.wraps(f)
1333 def wrapper(self, *func_args, **func_kwargs):
1334 if hasattr(CONF, group):
1335 conf_group = getattr(CONF, group)
1336 if hasattr(conf_group, name):
1337 value = getattr(conf_group, name)
1338 if value:
1339 if len(args) == 3:
1340 msg = args[2]
1341 else:
1342 msg = "Config option %s.%s is false" % (group,
1343 name)
1344 raise testtools.TestCase.skipException(msg)
1345 return f(self, *func_args, **func_kwargs)
1346 return wrapper
1347 return decorator