blob: 3810cebcd422314ae1673feb23696238068f8827 [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.'),
Alexander Gubanov509e2842015-06-09 15:29:51 +0300373 cfg.BoolOpt('config_drive',
374 default=True,
375 help='Enable special configuration drive with metadata.'),
Yair Friedca5cfb52016-01-04 15:41:55 +0200376 cfg.ListOpt('scheduler_available_filters',
377 default=['all'],
378 help="A list of enabled filters that nova will accept as hints"
379 " to the scheduler when creating a server. A special "
380 "entry 'all' indicates all filters are enabled. Empty "
381 "list indicates all filters are disabled. The full "
382 "available list of filters is in nova.conf: "
383 "DEFAULT.scheduler_available_filters"),
384
Matthew Treinishd5c96022013-10-17 21:51:23 +0000385]
386
387
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500388image_group = cfg.OptGroup(name='image',
389 title="Image Service Options")
Jay Pipesf38eaac2012-06-21 13:37:35 -0400390
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500391ImageGroup = [
Matthew Treinish72ea4422013-02-07 14:42:49 -0500392 cfg.StrOpt('catalog_type',
393 default='image',
Sean Dague83401992013-05-06 17:46:36 -0400394 help='Catalog type of the Image service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900395 cfg.StrOpt('region',
396 default='',
397 help="The image region name to use. If empty, the value "
398 "of identity.region is used instead. If no such region "
399 "is found in the service catalog, the first found one is "
400 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000401 cfg.StrOpt('endpoint_type',
402 default='publicURL',
403 choices=['public', 'admin', 'internal',
404 'publicURL', 'adminURL', 'internalURL'],
405 help="The endpoint type to use for the image service."),
Sean Dague83401992013-05-06 17:46:36 -0400406 cfg.StrOpt('http_image',
407 default='http://download.cirros-cloud.net/0.3.1/'
408 'cirros-0.3.1-x86_64-uec.tar.gz',
Lucian Petrut1cfe2982015-01-06 13:57:36 +0200409 help='http accessible image'),
410 cfg.IntOpt('build_timeout',
411 default=300,
412 help="Timeout in seconds to wait for an image to "
413 "become available."),
414 cfg.IntOpt('build_interval',
415 default=1,
416 help="Time in seconds between image operation status "
Takashi NATSUME12a48512015-08-10 18:33:16 +0900417 "checks."),
418 cfg.ListOpt('container_formats',
419 default=['ami', 'ari', 'aki', 'bare', 'ovf', 'ova'],
420 help="A list of image's container formats "
421 "users can specify."),
422 cfg.ListOpt('disk_formats',
423 default=['ami', 'ari', 'aki', 'vhd', 'vmdk', 'raw', 'qcow2',
424 'vdi', 'iso'],
425 help="A list of image's disk formats "
426 "users can specify.")
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500427]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400428
Matthew Treinish2b5287d2013-10-22 17:40:34 +0000429image_feature_group = cfg.OptGroup(name='image-feature-enabled',
430 title='Enabled image service features')
431
432ImageFeaturesGroup = [
433 cfg.BoolOpt('api_v2',
434 default=True,
435 help="Is the v2 image API enabled"),
436 cfg.BoolOpt('api_v1',
437 default=True,
438 help="Is the v1 image API enabled"),
bkopilov81aaae72015-05-15 23:46:25 +0300439 cfg.BoolOpt('deactivate_image',
440 default=False,
441 help="Is the deactivate-image feature enabled."
442 " The feature has been integrated since Kilo."),
Matthew Treinish2b5287d2013-10-22 17:40:34 +0000443]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400444
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500445network_group = cfg.OptGroup(name='network',
446 title='Network Service Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600447
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500448NetworkGroup = [
449 cfg.StrOpt('catalog_type',
450 default='network',
Mark McClainf2982e82013-07-06 17:48:03 -0400451 help='Catalog type of the Neutron service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900452 cfg.StrOpt('region',
453 default='',
454 help="The network region name to use. If empty, the value "
455 "of identity.region is used instead. If no such region "
456 "is found in the service catalog, the first found one is "
457 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000458 cfg.StrOpt('endpoint_type',
459 default='publicURL',
460 choices=['public', 'admin', 'internal',
461 'publicURL', 'adminURL', 'internalURL'],
462 help="The endpoint type to use for the network service."),
Sean Dagueed6e5862016-04-04 10:49:13 -0400463 cfg.StrOpt('project_network_cidr',
464 deprecated_name='tenant_network_cidr',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500465 default="10.100.0.0/16",
Sean Dagueed6e5862016-04-04 10:49:13 -0400466 help="The cidr block to allocate project ipv4 subnets from"),
467 cfg.IntOpt('project_network_mask_bits',
468 deprecated_name='tenant_network_mask_bits',
Attila Fazekas8ea181b2013-07-13 16:26:14 +0200469 default=28,
Sean Dagueed6e5862016-04-04 10:49:13 -0400470 help="The mask bits for project ipv4 subnets"),
471 cfg.StrOpt('project_network_v6_cidr',
472 deprecated_name='tenant_network_v6_cidr',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400473 default="2003::/48",
Sean Dagueed6e5862016-04-04 10:49:13 -0400474 help="The cidr block to allocate project ipv6 subnets from"),
475 cfg.IntOpt('project_network_v6_mask_bits',
476 deprecated_name='tenant_network_v6_mask_bits',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400477 default=64,
Sean Dagueed6e5862016-04-04 10:49:13 -0400478 help="The mask bits for project ipv6 subnets"),
479 cfg.BoolOpt('project_networks_reachable',
480 deprecated_name='tenant_networks_reachable',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500481 default=False,
Sean Dagueed6e5862016-04-04 10:49:13 -0400482 help="Whether project networks can be reached directly from "
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000483 "the test client. This must be set to True when the "
484 "'fixed' ssh_connect_method is selected."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500485 cfg.StrOpt('public_network_id',
486 default="",
487 help="Id of the public network that provides external "
488 "connectivity"),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000489 cfg.StrOpt('floating_network_name',
490 help="Default floating network name. Used to allocate floating "
491 "IPs when neutron is enabled."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500492 cfg.StrOpt('public_router_id',
493 default="",
494 help="Id of the public router that provides external "
Yair Fried1eb27f52014-11-10 15:24:19 +0200495 "connectivity. This should only be used when Neutron's "
496 "'allow_overlapping_ips' is set to 'False' in "
497 "neutron.conf. usually not needed past 'Grizzly' release"),
izikpensod9a01a62014-02-17 20:02:32 +0200498 cfg.IntOpt('build_timeout',
499 default=300,
500 help="Timeout in seconds to wait for network operation to "
501 "complete."),
502 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400503 default=1,
izikpensod9a01a62014-02-17 20:02:32 +0200504 help="Time in seconds between network operation status "
505 "checks."),
Attila Fazekas640392b2014-06-12 15:58:10 +0200506 cfg.ListOpt('dns_servers',
507 default=["8.8.8.8", "8.8.4.4"],
Itzik Brown5be44582014-12-24 09:05:13 +0200508 help="List of dns servers which should be used"
Itzik Brown2ca01cd2014-12-08 12:58:20 +0200509 " for subnet creation"),
510 cfg.StrOpt('port_vnic_type',
511 choices=[None, 'normal', 'direct', 'macvtap'],
512 help="vnic_type to use when Launching instances"
513 " with pre-configured ports."
514 " Supported ports are:"
515 " ['normal','direct','macvtap']"),
piyush11078648e35d52015-09-24 12:56:43 +0530516 cfg.ListOpt('default_network',
517 default=["1.0.0.0/16", "2.0.0.0/16"],
518 help="List of ip pools"
519 " for subnetpools creation"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500520]
Jay Pipes3f981df2012-03-27 18:59:44 -0400521
Matthew Treinishe3d26142013-11-26 19:14:58 +0000522network_feature_group = cfg.OptGroup(name='network-feature-enabled',
523 title='Enabled network service features')
524
525NetworkFeaturesGroup = [
Matthew Treinishe2e33cf2014-03-03 19:28:41 +0000526 cfg.BoolOpt('ipv6',
527 default=True,
528 help="Allow the execution of IPv6 tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000529 cfg.ListOpt('api_extensions',
530 default=['all'],
Alexander Gubanov36e1f9b2015-06-12 18:02:10 +0300531 help="A list of enabled network extensions with a special "
532 "entry all which indicates every extension is enabled. "
533 "Empty list indicates all extensions are disabled. "
534 "To get the list of extensions run: 'neutron ext-list'"),
Sean M. Collinsdd27a4d2014-05-13 10:33:15 -0400535 cfg.BoolOpt('ipv6_subnet_attributes',
536 default=False,
537 help="Allow the execution of IPv6 subnet tests that use "
538 "the extended IPv6 attributes ipv6_ra_mode "
539 "and ipv6_address_mode"
Mark McClain6e07c0d2014-10-10 11:25:03 -0400540 ),
Itzik Brownbeb30d32015-03-29 09:42:54 +0300541 cfg.BoolOpt('port_admin_state_change',
542 default=True,
543 help="Does the test environment support changing"
544 " port admin state"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000545]
546
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000547validation_group = cfg.OptGroup(name='validation',
548 title='SSH Validation options')
549
550ValidationGroup = [
Matthew Treinishe5cca002015-05-11 15:36:50 -0400551 cfg.BoolOpt('run_validation',
552 default=False,
553 help='Enable ssh on created servers and creation of additional'
lanoux283273b2015-12-04 03:01:54 -0800554 ' validation resources to enable remote access'),
Brandon Palmc6cc91d2015-08-19 13:20:21 -0500555 cfg.BoolOpt('security_group',
556 default=True,
557 help='Enable/disable security groups.'),
558 cfg.BoolOpt('security_group_rules',
559 default=True,
560 help='Enable/disable security group rules.'),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000561 cfg.StrOpt('connect_method',
562 default='floating',
563 choices=['fixed', 'floating'],
564 help='Default IP type used for validation: '
565 '-fixed: uses the first IP belonging to the fixed network '
lanoux283273b2015-12-04 03:01:54 -0800566 '-floating: creates and uses a floating IP',
567 deprecated_opts=[cfg.DeprecatedOpt('use_floatingip_for_ssh',
568 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000569 cfg.StrOpt('auth_method',
570 default='keypair',
571 choices=['keypair'],
572 help='Default authentication method to the instance. '
573 'Only ssh via keypair is supported for now. '
lanoux283273b2015-12-04 03:01:54 -0800574 'Additional methods will be handled in a separate spec.',
575 deprecated_opts=[cfg.DeprecatedOpt('ssh_auth_method',
576 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000577 cfg.IntOpt('ip_version_for_ssh',
578 default=4,
lanoux283273b2015-12-04 03:01:54 -0800579 help='Default IP version for ssh connections.'),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000580 cfg.IntOpt('ping_timeout',
581 default=120,
lanoux283273b2015-12-04 03:01:54 -0800582 help='Timeout in seconds to wait for ping to succeed.',
583 deprecated_opts=[cfg.DeprecatedOpt('ping_timeout',
584 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000585 cfg.IntOpt('connect_timeout',
586 default=60,
587 help='Timeout in seconds to wait for the TCP connection to be '
lanoux283273b2015-12-04 03:01:54 -0800588 'successful.'),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000589 cfg.IntOpt('ssh_timeout',
590 default=300,
lanoux283273b2015-12-04 03:01:54 -0800591 help='Timeout in seconds to wait for the ssh banner.'),
592 cfg.StrOpt('image_ssh_user',
593 default="root",
594 help="User name used to authenticate to an instance.",
595 deprecated_opts=[cfg.DeprecatedOpt('image_ssh_user',
596 group='compute'),
597 cfg.DeprecatedOpt('ssh_user',
598 group='compute'),
599 cfg.DeprecatedOpt('ssh_user',
600 group='scenario')]),
601 cfg.StrOpt('image_ssh_password',
602 default="password",
603 help="Password used to authenticate to an instance.",
604 deprecated_opts=[cfg.DeprecatedOpt('image_ssh_password',
605 group='compute')]),
606 cfg.StrOpt('ssh_shell_prologue',
607 default="set -eu -o pipefail; PATH=$$PATH:/sbin;",
608 help="Shell fragments to use before executing a command "
609 "when sshing to a guest.",
610 deprecated_opts=[cfg.DeprecatedOpt('ssh_shell_prologue',
611 group='compute')]),
612 cfg.IntOpt('ping_size',
613 default=56,
614 help="The packet size for ping packets originating "
615 "from remote linux hosts",
616 deprecated_opts=[cfg.DeprecatedOpt('ping_size',
617 group='compute')]),
618 cfg.IntOpt('ping_count',
619 default=1,
620 help="The number of ping packets originating from remote "
621 "linux hosts",
622 deprecated_opts=[cfg.DeprecatedOpt('ping_count',
623 group='compute')]),
624 cfg.StrOpt('floating_ip_range',
625 default='10.0.0.0/29',
626 help='Unallocated floating IP range, which will be used to '
627 'test the floating IP bulk feature for CRUD operation. '
628 'This block must not overlap an existing floating IP '
629 'pool.',
630 deprecated_opts=[cfg.DeprecatedOpt('floating_ip_range',
631 group='compute')]),
632 cfg.StrOpt('network_for_ssh',
633 default='public',
634 help="Network used for SSH connections. Ignored if "
zhufl4a412722016-05-13 16:51:32 +0800635 "connect_method=floating or run_validation=false.",
lanoux283273b2015-12-04 03:01:54 -0800636 deprecated_opts=[cfg.DeprecatedOpt('network_for_ssh',
nithya-ganesan67da2872015-02-08 23:13:48 +0000637 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000638]
639
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500640volume_group = cfg.OptGroup(name='volume',
641 title='Block Storage Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600642
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500643VolumeGroup = [
644 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400645 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500646 help='Time in seconds between volume availability checks.'),
647 cfg.IntOpt('build_timeout',
648 default=300,
Eric Harney9b1f89c2014-10-14 14:40:19 -0400649 help='Timeout in seconds to wait for a volume to become '
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500650 'available.'),
651 cfg.StrOpt('catalog_type',
Matthew Treinisheb724512013-10-25 15:12:59 +0000652 default='volume',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500653 help="Catalog type of the Volume Service"),
Arata Notsu8f440392013-09-13 16:14:20 +0900654 cfg.StrOpt('region',
655 default='',
656 help="The volume region name to use. If empty, the value "
657 "of identity.region is used instead. If no such region "
658 "is found in the service catalog, the first found one is "
659 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000660 cfg.StrOpt('endpoint_type',
661 default='publicURL',
662 choices=['public', 'admin', 'internal',
663 'publicURL', 'adminURL', 'internalURL'],
664 help="The endpoint type to use for the volume service."),
Benny Kopilovaf136a92015-11-10 07:37:23 +0200665 cfg.ListOpt('backend_names',
666 default=['BACKEND_1', 'BACKEND_2'],
april4be58dc2015-12-29 00:07:22 +0800667 help='A list of backend names separated by comma. '
bkopilov27905cc2016-04-12 14:29:13 +0300668 'The backend name must be declared in cinder.conf'),
Adam Gandelman827ad332013-06-24 17:04:09 -0700669 cfg.StrOpt('storage_protocol',
670 default='iSCSI',
671 help='Backend protocol to target when creating volume types'),
672 cfg.StrOpt('vendor_name',
673 default='Open Source',
674 help='Backend vendor to target when creating volume types'),
Ryan Hsua67f4632013-08-29 16:03:06 -0700675 cfg.StrOpt('disk_format',
676 default='raw',
677 help='Disk format to use when copying a volume to image'),
Jerry Cai9733d0e2014-03-19 15:50:49 +0800678 cfg.IntOpt('volume_size',
679 default=1,
680 help='Default size in GB for volumes created by volumes tests'),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500681]
K Jonathan Harkerd6ba4b42012-12-18 13:50:47 -0800682
Matthew Treinishd5c96022013-10-17 21:51:23 +0000683volume_feature_group = cfg.OptGroup(name='volume-feature-enabled',
684 title='Enabled Cinder Features')
685
686VolumeFeaturesGroup = [
687 cfg.BoolOpt('multi_backend',
688 default=False,
Matthew Treinishe3d26142013-11-26 19:14:58 +0000689 help="Runs Cinder multi-backend test (requires 2 backends)"),
Giulio Fidente74b08ad2014-01-18 04:02:51 +0100690 cfg.BoolOpt('backup',
691 default=True,
692 help='Runs Cinder volumes backup test'),
JordanPbce55532014-03-19 12:10:32 +0100693 cfg.BoolOpt('snapshot',
694 default=True,
695 help='Runs Cinder volume snapshot test'),
Takeaki Matsumoto1702aed2015-08-25 08:44:26 +0900696 cfg.BoolOpt('clone',
697 default=True,
698 help='Runs Cinder volume clone test'),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000699 cfg.ListOpt('api_extensions',
700 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800701 help='A list of enabled volume extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300702 'entry all which indicates every extension is enabled. '
703 'Empty list indicates all extensions are disabled'),
Zhi Kun Liubb363a22013-11-28 18:47:39 +0800704 cfg.BoolOpt('api_v1',
705 default=True,
706 help="Is the v1 volume API enabled"),
Zhi Kun Liu8cc3c842014-01-07 10:44:34 +0800707 cfg.BoolOpt('api_v2',
708 default=True,
709 help="Is the v2 volume API enabled"),
bkopilov8a657ae2015-05-11 11:45:23 +0300710 cfg.BoolOpt('bootable',
Benny Kopilov618359f2015-11-11 13:46:33 +0200711 default=True,
bkopilov8a657ae2015-05-11 11:45:23 +0300712 help='Update bootable status of a volume '
Benny Kopilov618359f2015-11-11 13:46:33 +0200713 'Not implemented on icehouse ',
Yuriy Nesenenko86d90f22016-01-13 14:01:39 +0200714 deprecated_for_removal=True),
715 # TODO(ynesenenko): Remove volume_services once liberty-eol happens.
716 cfg.BoolOpt('volume_services',
717 default=False,
718 help='Extract correct host info from host@backend')
Matthew Treinishd5c96022013-10-17 21:51:23 +0000719]
720
Daryl Walleck587385b2012-03-03 13:00:26 -0600721
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500722object_storage_group = cfg.OptGroup(name='object-storage',
723 title='Object Storage Service Options')
Attila Fazekasa23f5002012-10-23 19:32:45 +0200724
DennyZhang1e71b612013-09-26 12:35:40 -0500725ObjectStoreGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500726 cfg.StrOpt('catalog_type',
727 default='object-store',
728 help="Catalog type of the Object-Storage service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900729 cfg.StrOpt('region',
730 default='',
731 help="The object-storage region name to use. If empty, the "
732 "value of identity.region is used instead. If no such "
733 "region is found in the service catalog, the first found "
734 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000735 cfg.StrOpt('endpoint_type',
736 default='publicURL',
737 choices=['public', 'admin', 'internal',
738 'publicURL', 'adminURL', 'internalURL'],
739 help="The endpoint type to use for the object-store service."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000740 cfg.IntOpt('container_sync_timeout',
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900741 default=600,
Fabien Boucher2178d312013-12-31 15:38:57 +0100742 help="Number of seconds to time on waiting for a container "
nayna-patelb4989b32013-01-09 06:25:13 +0000743 "to container synchronization complete."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000744 cfg.IntOpt('container_sync_interval',
nayna-patelb4989b32013-01-09 06:25:13 +0000745 default=5,
Fabien Boucher2178d312013-12-31 15:38:57 +0100746 help="Number of seconds to wait while looping to check the "
nayna-patelb4989b32013-01-09 06:25:13 +0000747 "status of a container to container synchronization"),
Matthew Treinish3fdb80c2013-08-15 11:13:19 -0400748 cfg.StrOpt('operator_role',
749 default='Member',
750 help="Role to add to users created for swift tests to "
751 "enable creating containers"),
Matthew Treinish998c91d2014-03-01 12:39:49 -0500752 cfg.StrOpt('reseller_admin_role',
753 default='ResellerAdmin',
754 help="User role that has reseller admin"),
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900755 cfg.StrOpt('realm_name',
756 default='realm1',
757 help="Name of sync realm. A sync realm is a set of clusters "
758 "that have agreed to allow container syncing with each "
759 "other. Set the same realm name as Swift's "
760 "container-sync-realms.conf"),
761 cfg.StrOpt('cluster_name',
762 default='name1',
763 help="One name of cluster which is set in the realm whose name "
764 "is set in 'realm_name' item in this file. Set the "
765 "same cluster name as Swift's container-sync-realms.conf"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500766]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200767
Matthew Treinishd5c96022013-10-17 21:51:23 +0000768object_storage_feature_group = cfg.OptGroup(
769 name='object-storage-feature-enabled',
770 title='Enabled object-storage features')
771
772ObjectStoreFeaturesGroup = [
Matthew Treinish20345382013-12-13 17:04:23 +0000773 cfg.ListOpt('discoverable_apis',
774 default=['all'],
775 help="A list of the enabled optional discoverable apis. "
776 "A single entry, all, indicates that all of these "
777 "features are expected to be enabled"),
Daisuke Morita20a183f2014-08-25 14:43:36 +0900778 cfg.BoolOpt('container_sync',
779 default=True,
780 help="Execute (old style) container-sync tests"),
781 cfg.BoolOpt('object_versioning',
782 default=True,
783 help="Execute object-versioning tests"),
784 cfg.BoolOpt('discoverability',
785 default=True,
786 help="Execute discoverability tests"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000787]
788
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800789database_group = cfg.OptGroup(name='database',
790 title='Database Service Options')
791
792DatabaseGroup = [
793 cfg.StrOpt('catalog_type',
794 default='database',
795 help="Catalog type of the Database service."),
796 cfg.StrOpt('db_flavor_ref',
797 default="1",
798 help="Valid primary flavor to use in database tests."),
Peter Stachowski320f9c72014-04-21 16:13:23 -0400799 cfg.StrOpt('db_current_version',
800 default="v1.0",
801 help="Current database version to use in database tests."),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800802]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200803
Steve Bakerc60e4e32013-05-06 15:22:41 +1200804orchestration_group = cfg.OptGroup(name='orchestration',
805 title='Orchestration Service Options')
806
807OrchestrationGroup = [
808 cfg.StrOpt('catalog_type',
809 default='orchestration',
810 help="Catalog type of the Orchestration service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900811 cfg.StrOpt('region',
812 default='',
813 help="The orchestration region name to use. If empty, the "
814 "value of identity.region is used instead. If no such "
815 "region is found in the service catalog, the first found "
816 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000817 cfg.StrOpt('endpoint_type',
818 default='publicURL',
819 choices=['public', 'admin', 'internal',
820 'publicURL', 'adminURL', 'internalURL'],
821 help="The endpoint type to use for the orchestration service."),
Matthew Treinishdb9721d2015-03-18 14:21:28 -0400822 cfg.StrOpt('stack_owner_role', default='heat_stack_owner',
823 help='Role required for users to be able to manage stacks'),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200824 cfg.IntOpt('build_interval',
825 default=1,
826 help="Time in seconds between build status checks."),
827 cfg.IntOpt('build_timeout',
Matthew Treinisha2dfd492014-04-15 11:15:34 -0400828 default=1200,
Steve Bakerc60e4e32013-05-06 15:22:41 +1200829 help="Timeout in seconds to wait for a stack to build."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200830 cfg.StrOpt('instance_type',
Steve Baker9e86b832013-05-22 15:40:28 +1200831 default='m1.micro',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200832 help="Instance type for tests. Needs to be big enough for a "
833 "full OS plus the test workload"),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200834 cfg.StrOpt('keypair_name',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200835 help="Name of existing keypair to launch servers with."),
Clint Byrum71f27632013-09-09 11:41:32 -0700836 cfg.IntOpt('max_template_size',
Joe Gordon0e51b222013-10-24 14:11:10 +0100837 default=524288,
Clint Byrum71f27632013-09-09 11:41:32 -0700838 help="Value must match heat configuration of the same name."),
Steven Hardyfdc6bd72014-03-21 16:56:04 +0000839 cfg.IntOpt('max_resources_per_stack',
840 default=1000,
841 help="Value must match heat configuration of the same name."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200842]
843
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300844data_processing_group = cfg.OptGroup(name="data-processing",
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400845 title="Data Processing options")
846
847DataProcessingGroup = [
848 cfg.StrOpt('catalog_type',
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300849 default='data-processing',
850 deprecated_group="data_processing",
JordanPfc62c902014-02-26 14:47:28 +0000851 help="Catalog type of the data processing service."),
852 cfg.StrOpt('endpoint_type',
853 default='publicURL',
854 choices=['public', 'admin', 'internal',
855 'publicURL', 'adminURL', 'internalURL'],
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300856 deprecated_group="data_processing",
JordanPfc62c902014-02-26 14:47:28 +0000857 help="The endpoint type to use for the data processing "
858 "service."),
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400859]
860
861
Luigi Toscano14d172d2015-01-23 16:37:47 +0100862data_processing_feature_group = cfg.OptGroup(
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300863 name="data-processing-feature-enabled",
Luigi Toscano14d172d2015-01-23 16:37:47 +0100864 title="Enabled Data Processing features")
865
866DataProcessingFeaturesGroup = [
867 cfg.ListOpt('plugins',
Javier Penad750c2d2016-03-08 16:04:09 +0100868 default=["vanilla", "cdh"],
Telles Nobrega6189b0a2014-11-18 23:22:17 -0300869 deprecated_group="data_processing-feature-enabled",
Luigi Toscano14d172d2015-01-23 16:37:47 +0100870 help="List of enabled data processing plugins")
871]
872
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500873stress_group = cfg.OptGroup(name='stress', title='Stress Test Options')
874
875StressGroup = [
876 cfg.StrOpt('nova_logdir',
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500877 help='Directory containing log files on the compute nodes'),
878 cfg.IntOpt('max_instances',
879 default=16,
880 help='Maximum number of instances to create during test.'),
881 cfg.StrOpt('controller',
David Kranzb9d97502013-05-01 15:55:04 -0400882 help='Controller host.'),
883 # new stress options
884 cfg.StrOpt('target_controller',
David Kranzb9d97502013-05-01 15:55:04 -0400885 help='Controller host.'),
886 cfg.StrOpt('target_ssh_user',
David Kranzb9d97502013-05-01 15:55:04 -0400887 help='ssh user.'),
888 cfg.StrOpt('target_private_key_path',
David Kranzb9d97502013-05-01 15:55:04 -0400889 help='Path to private key.'),
890 cfg.StrOpt('target_logfiles',
David Kranzb9d97502013-05-01 15:55:04 -0400891 help='regexp for list of log files.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000892 cfg.IntOpt('log_check_interval',
David Kranzb9d97502013-05-01 15:55:04 -0400893 default=60,
Marc Koderer32221b8e2013-08-23 13:57:50 +0200894 help='time (in seconds) between log file error checks.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000895 cfg.IntOpt('default_thread_number_per_action',
Marc Koderer32221b8e2013-08-23 13:57:50 +0200896 default=4,
Julien Leloup04d40f72014-01-28 11:17:18 +0100897 help='The number of threads created while stress test.'),
898 cfg.BoolOpt('leave_dirty_stack',
899 default=False,
900 help='Prevent the cleaning (tearDownClass()) between'
901 ' each stress test run if an exception occurs'
Julien Leloupa5ee5422014-02-13 14:29:02 +0100902 ' during this run.'),
903 cfg.BoolOpt('full_clean_stack',
904 default=False,
905 help='Allows a full cleaning process after a stress test.'
906 ' Caution : this cleanup will remove every objects of'
Sean Dagueed6e5862016-04-04 10:49:13 -0400907 ' every project.')
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500908]
909
910
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900911scenario_group = cfg.OptGroup(name='scenario', title='Scenario Test Options')
912
913ScenarioGroup = [
914 cfg.StrOpt('img_dir',
915 default='/opt/stack/new/devstack/files/images/'
916 'cirros-0.3.1-x86_64-uec',
Matthew Treinish5d5e20a2016-01-14 10:54:30 -0500917 help='Directory containing image files',
918 deprecated_for_removal=True),
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300919 cfg.StrOpt('img_file', deprecated_name='qcow2_img_file',
Masayuki Igawa4f71bf02014-02-21 14:02:29 +0900920 default='cirros-0.3.1-x86_64-disk.img',
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300921 help='Image file name'),
922 cfg.StrOpt('img_disk_format',
923 default='qcow2',
924 help='Image disk format'),
925 cfg.StrOpt('img_container_format',
926 default='bare',
927 help='Image container format'),
Evgeny Antyshev7ba0d5f2015-04-28 13:18:07 +0000928 cfg.DictOpt('img_properties', help='Glance image properties. '
929 'Use for custom images which require them'),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900930 cfg.StrOpt('ami_img_file',
931 default='cirros-0.3.1-x86_64-blank.img',
Matthew Treinish5d5e20a2016-01-14 10:54:30 -0500932 help='AMI image file name',
933 deprecated_for_removal=True),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900934 cfg.StrOpt('ari_img_file',
935 default='cirros-0.3.1-x86_64-initrd',
Matthew Treinish5d5e20a2016-01-14 10:54:30 -0500936 help='ARI image file name',
937 deprecated_for_removal=True),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900938 cfg.StrOpt('aki_img_file',
939 default='cirros-0.3.1-x86_64-vmlinuz',
Matthew Treinish5d5e20a2016-01-14 10:54:30 -0500940 help='AKI image file name',
941 deprecated_for_removal=True),
Yair Fried413bf2d2014-11-19 17:07:11 +0200942 # TODO(yfried): add support for dhcpcd
943 cfg.StrOpt('dhcp_client',
944 default='udhcpc',
Yaroslav Lobankovceae2042015-09-09 19:25:14 +0300945 choices=["udhcpc", "dhclient", ""],
Yair Fried413bf2d2014-11-19 17:07:11 +0200946 help='DHCP client used by images to renew DCHP lease. '
947 'If left empty, update operation will be skipped. '
948 'Supported clients: "udhcpc", "dhclient"')
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900949]
950
951
Matthew Treinish4c412922013-07-16 15:27:42 -0400952service_available_group = cfg.OptGroup(name="service_available",
953 title="Available OpenStack Services")
954
955ServiceAvailableGroup = [
956 cfg.BoolOpt('cinder',
957 default=True,
958 help="Whether or not cinder is expected to be available"),
Matthew Treinishfaa340d2013-07-19 16:26:21 -0400959 cfg.BoolOpt('neutron',
960 default=False,
961 help="Whether or not neutron is expected to be available"),
Matthew Treinish853ae442013-07-19 16:36:07 -0400962 cfg.BoolOpt('glance',
963 default=True,
964 help="Whether or not glance is expected to be available"),
Matthew Treinish61e332b2013-07-19 16:42:31 -0400965 cfg.BoolOpt('swift',
966 default=True,
967 help="Whether or not swift is expected to be available"),
Matthew Treinish6b41e242013-07-19 16:49:28 -0400968 cfg.BoolOpt('nova',
969 default=True,
970 help="Whether or not nova is expected to be available"),
Matthew Treinisha9d43882013-07-19 16:54:52 -0400971 cfg.BoolOpt('heat',
972 default=False,
973 help="Whether or not Heat is expected to be available"),
Sergey Lukjanov9c95a252014-03-13 23:59:22 +0400974 cfg.BoolOpt('sahara',
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400975 default=False,
Sergey Lukjanov9c95a252014-03-13 23:59:22 +0400976 help="Whether or not Sahara is expected to be available"),
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +0300977 cfg.BoolOpt('ironic',
978 default=False,
979 help="Whether or not Ironic is expected to be available"),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800980 cfg.BoolOpt('trove',
981 default=False,
982 help="Whether or not Trove is expected to be available"),
Matthew Treinish4c412922013-07-16 15:27:42 -0400983]
984
Attila Fazekasaeeeefd2013-08-06 17:01:56 +0200985debug_group = cfg.OptGroup(name="debug",
986 title="Debug System")
987
988DebugGroup = [
Sean Daguec522c092014-03-24 10:43:22 -0400989 cfg.StrOpt('trace_requests',
990 default='',
991 help="""A regex to determine which requests should be traced.
992
993This is a regex to match the caller for rest client requests to be able to
994selectively trace calls out of specific classes and methods. It largely
995exists for test development, and is not expected to be used in a real deploy
996of tempest. This will be matched against the discovered ClassName:method
997in the test environment.
998
999Expected values for this field are:
1000
1001 * ClassName:test_method_name - traces one test_method
1002 * ClassName:setUp(Class) - traces specific setup functions
1003 * ClassName:tearDown(Class) - traces specific teardown functions
1004 * ClassName:_run_cleanups - traces the cleanup functions
1005
1006If nothing is specified, this feature is not enabled. To trace everything
1007specify .* as the regex.
1008""")
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001009]
1010
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001011input_scenario_group = cfg.OptGroup(name="input-scenario",
1012 title="Filters and values for"
1013 " input scenarios")
1014
1015InputScenarioGroup = [
1016 cfg.StrOpt('image_regex',
1017 default='^cirros-0.3.1-x86_64-uec$',
1018 help="Matching images become parameters for scenario tests"),
1019 cfg.StrOpt('flavor_regex',
Andrea Frittoli99901c02014-01-30 18:06:49 +00001020 default='^m1.nano$',
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001021 help="Matching flavors become parameters for scenario tests"),
1022 cfg.StrOpt('non_ssh_image_regex',
1023 default='^.*[Ww]in.*$',
1024 help="SSH verification in tests is skipped"
1025 "for matching images"),
1026 cfg.StrOpt('ssh_user_regex',
Marc Koderer07f5a522015-03-27 15:02:41 +01001027 default="[[\"^.*[Cc]irros.*$\", \"cirros\"]]",
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001028 help="List of user mapped to regex "
1029 "to matching image names."),
1030]
1031
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001032
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001033baremetal_group = cfg.OptGroup(name='baremetal',
Chris Hoge8f1401b2014-11-19 14:00:37 -08001034 title='Baremetal provisioning service options',
1035 help='When enabling baremetal tests, Nova '
1036 'must be configured to use the Ironic '
Shuquan Huang33376522015-08-27 11:20:50 +00001037 'driver. The following parameters for the '
Chris Hoge8f1401b2014-11-19 14:00:37 -08001038 '[compute] section must be disabled: '
1039 'console_output, interface_attach, '
1040 'live_migration, pause, rescue, resize '
1041 'shelve, snapshot, and suspend')
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001042
Devananda van der Veenf385bde2016-02-03 07:56:01 -08001043
Andrea Frittoli (andreaf)1370baf2016-04-29 14:26:22 -05001044# NOTE(deva): Ironic tests have been ported to tempest.lib. New config options
Devananda van der Veenf385bde2016-02-03 07:56:01 -08001045# should be added to ironic/ironic_tempest_plugin/config.py.
1046# However, these options need to remain here for testing stable
1047# branches until Liberty release reaches EOL.
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001048BaremetalGroup = [
1049 cfg.StrOpt('catalog_type',
1050 default='baremetal',
Adam Gandelman4a48a602014-03-20 18:23:18 -07001051 help="Catalog type of the baremetal provisioning service"),
1052 cfg.BoolOpt('driver_enabled',
1053 default=False,
1054 help="Whether the Ironic nova-compute driver is enabled"),
Yuiko Takada1ee1b322014-07-04 09:55:30 +09001055 cfg.StrOpt('driver',
1056 default='fake',
1057 help="Driver name which Ironic uses"),
JordanPfc62c902014-02-26 14:47:28 +00001058 cfg.StrOpt('endpoint_type',
1059 default='publicURL',
1060 choices=['public', 'admin', 'internal',
1061 'publicURL', 'adminURL', 'internalURL'],
1062 help="The endpoint type to use for the baremetal provisioning "
Adam Gandelman4a48a602014-03-20 18:23:18 -07001063 "service"),
1064 cfg.IntOpt('active_timeout',
1065 default=300,
1066 help="Timeout for Ironic node to completely provision"),
1067 cfg.IntOpt('association_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001068 default=30,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001069 help="Timeout for association of Nova instance and Ironic "
1070 "node"),
1071 cfg.IntOpt('power_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001072 default=60,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001073 help="Timeout for Ironic power transitions."),
1074 cfg.IntOpt('unprovision_timeout',
Devananda van der Veend1e52a92015-04-13 12:58:49 -07001075 default=300,
1076 help="Timeout for unprovisioning an Ironic node. "
1077 "Takes longer since Kilo as Ironic performs an extra "
1078 "step in Node cleaning.")
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001079]
1080
Marc Koderer6ee82dc2014-02-17 10:26:29 +01001081negative_group = cfg.OptGroup(name='negative', title="Negative Test Options")
1082
1083NegativeGroup = [
1084 cfg.StrOpt('test_generator',
1085 default='tempest.common.' +
1086 'generator.negative_generator.NegativeTestGenerator',
1087 help="Test generator class for all negative tests"),
1088]
1089
Andrea Frittoli (andreaf)8def7ca2015-05-13 14:24:19 +01001090DefaultGroup = [
1091 cfg.StrOpt('resources_prefix',
1092 default='tempest',
1093 help="Prefix to be added when generating the name for "
1094 "test resources. It can be used to discover all "
1095 "resources associated with a specific test run when "
1096 "running tempest on a real-life cloud"),
1097]
1098
Jon Grimm270bd7f2014-08-05 18:11:29 +00001099_opts = [
1100 (auth_group, AuthGroup),
1101 (compute_group, ComputeGroup),
1102 (compute_features_group, ComputeFeaturesGroup),
1103 (identity_group, IdentityGroup),
1104 (identity_feature_group, IdentityFeatureGroup),
1105 (image_group, ImageGroup),
1106 (image_feature_group, ImageFeaturesGroup),
1107 (network_group, NetworkGroup),
1108 (network_feature_group, NetworkFeaturesGroup),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +00001109 (validation_group, ValidationGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001110 (volume_group, VolumeGroup),
1111 (volume_feature_group, VolumeFeaturesGroup),
1112 (object_storage_group, ObjectStoreGroup),
1113 (object_storage_feature_group, ObjectStoreFeaturesGroup),
1114 (database_group, DatabaseGroup),
1115 (orchestration_group, OrchestrationGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001116 (data_processing_group, DataProcessingGroup),
Luigi Toscano14d172d2015-01-23 16:37:47 +01001117 (data_processing_feature_group, DataProcessingFeaturesGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001118 (stress_group, StressGroup),
1119 (scenario_group, ScenarioGroup),
1120 (service_available_group, ServiceAvailableGroup),
1121 (debug_group, DebugGroup),
1122 (baremetal_group, BaremetalGroup),
1123 (input_scenario_group, InputScenarioGroup),
Andrea Frittoli (andreaf)8def7ca2015-05-13 14:24:19 +01001124 (negative_group, NegativeGroup),
1125 (None, DefaultGroup)
Jon Grimm270bd7f2014-08-05 18:11:29 +00001126]
1127
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001128
Matthew Treinish43b296a2014-02-28 15:23:00 -05001129def register_opts():
Matthew Treinisha966d0f2015-07-01 17:37:31 -04001130 ext_plugins = plugins.TempestTestPluginManager()
1131 # Register in-tree tempest config options
Jon Grimm270bd7f2014-08-05 18:11:29 +00001132 for g, o in _opts:
Maru Newbyf440c292015-03-31 15:58:47 +00001133 register_opt_group(_CONF, g, o)
Matthew Treinisha966d0f2015-07-01 17:37:31 -04001134 # Call external plugin config option registration
1135 ext_plugins.register_plugin_opts(_CONF)
Jon Grimm270bd7f2014-08-05 18:11:29 +00001136
1137
1138def list_opts():
1139 """Return a list of oslo.config options available.
1140
1141 The purpose of this is to allow tools like the Oslo sample config file
1142 generator to discover the options exposed to users.
1143 """
Matthew Treinish83a19aa2015-07-23 13:06:13 -04001144 ext_plugins = plugins.TempestTestPluginManager()
Chris Hoged7b4fd12015-11-11 10:24:52 -08001145 # Make a shallow copy of the options list that can be
1146 # extended by plugins. Send back the group object
1147 # to allow group help text to be generated.
1148 opt_list = [(g, o) for g, o in _opts]
Matthew Treinish83a19aa2015-07-23 13:06:13 -04001149 opt_list.extend(ext_plugins.get_plugin_options_list())
1150 return opt_list
Matthew Treinish43b296a2014-02-28 15:23:00 -05001151
1152
Sean Dague3b9b1f32013-12-20 17:04:54 -05001153# this should never be called outside of this class
1154class TempestConfigPrivate(object):
Daryl Walleck1465d612011-11-02 02:22:15 -05001155 """Provides OpenStack configuration information."""
1156
David Patersonbe9f9832015-10-15 09:10:45 -07001157 DEFAULT_CONFIG_DIR = os.path.join(os.getcwd(), "etc")
Daryl Walleck1465d612011-11-02 02:22:15 -05001158
Brian Waldon738cd632011-12-12 18:45:09 -05001159 DEFAULT_CONFIG_FILE = "tempest.conf"
1160
Andrea Frittolia96ee212014-08-15 18:34:20 +01001161 def __getattr__(self, attr):
1162 # Handles config options from the default group
Maru Newbyf440c292015-03-31 15:58:47 +00001163 return getattr(_CONF, attr)
Andrea Frittolia96ee212014-08-15 18:34:20 +01001164
Matthew Treinish43b296a2014-02-28 15:23:00 -05001165 def _set_attrs(self):
Maru Newbyf440c292015-03-31 15:58:47 +00001166 self.auth = _CONF.auth
1167 self.compute = _CONF.compute
1168 self.compute_feature_enabled = _CONF['compute-feature-enabled']
1169 self.identity = _CONF.identity
1170 self.identity_feature_enabled = _CONF['identity-feature-enabled']
1171 self.image = _CONF.image
1172 self.image_feature_enabled = _CONF['image-feature-enabled']
1173 self.network = _CONF.network
1174 self.network_feature_enabled = _CONF['network-feature-enabled']
Joseph Lanoux2f81cc12015-01-12 16:01:20 +00001175 self.validation = _CONF.validation
Maru Newbyf440c292015-03-31 15:58:47 +00001176 self.volume = _CONF.volume
1177 self.volume_feature_enabled = _CONF['volume-feature-enabled']
1178 self.object_storage = _CONF['object-storage']
1179 self.object_storage_feature_enabled = _CONF[
Matthew Treinishd5c96022013-10-17 21:51:23 +00001180 'object-storage-feature-enabled']
Maru Newbyf440c292015-03-31 15:58:47 +00001181 self.database = _CONF.database
1182 self.orchestration = _CONF.orchestration
Telles Nobrega6189b0a2014-11-18 23:22:17 -03001183 self.data_processing = _CONF['data-processing']
Maru Newbyf440c292015-03-31 15:58:47 +00001184 self.data_processing_feature_enabled = _CONF[
Telles Nobrega6189b0a2014-11-18 23:22:17 -03001185 'data-processing-feature-enabled']
Maru Newbyf440c292015-03-31 15:58:47 +00001186 self.stress = _CONF.stress
1187 self.scenario = _CONF.scenario
1188 self.service_available = _CONF.service_available
1189 self.debug = _CONF.debug
1190 self.baremetal = _CONF.baremetal
1191 self.input_scenario = _CONF['input-scenario']
Maru Newbyf440c292015-03-31 15:58:47 +00001192 self.negative = _CONF.negative
Matthew Treinish46008082015-04-14 18:32:47 -04001193 logging.tempest_set_log_file('tempest.log')
Sean Dague86bd8422013-12-20 09:56:44 -05001194
Joe Gordon28a84ae2014-07-17 15:38:28 +00001195 def __init__(self, parse_conf=True, config_path=None):
Matthew Treinish43b296a2014-02-28 15:23:00 -05001196 """Initialize a configuration from a conf directory and conf file."""
1197 super(TempestConfigPrivate, self).__init__()
1198 config_files = []
1199 failsafe_path = "/etc/tempest/" + self.DEFAULT_CONFIG_FILE
1200
Joe Gordon28a84ae2014-07-17 15:38:28 +00001201 if config_path:
1202 path = config_path
1203 else:
1204 # Environment variables override defaults...
1205 conf_dir = os.environ.get('TEMPEST_CONFIG_DIR',
1206 self.DEFAULT_CONFIG_DIR)
1207 conf_file = os.environ.get('TEMPEST_CONFIG',
1208 self.DEFAULT_CONFIG_FILE)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001209
Joe Gordon28a84ae2014-07-17 15:38:28 +00001210 path = os.path.join(conf_dir, conf_file)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001211
1212 if not os.path.isfile(path):
1213 path = failsafe_path
1214
1215 # only parse the config file if we expect one to exist. This is needed
1216 # to remove an issue with the config file up to date checker.
1217 if parse_conf:
1218 config_files.append(path)
Maru Newbyf440c292015-03-31 15:58:47 +00001219 logging.register_options(_CONF)
Matthew Treinish5440a402014-10-02 14:36:16 -04001220 if os.path.isfile(path):
Maru Newbyf440c292015-03-31 15:58:47 +00001221 _CONF([], project='tempest', default_config_files=config_files)
Matthew Treinish5440a402014-10-02 14:36:16 -04001222 else:
Maru Newbyf440c292015-03-31 15:58:47 +00001223 _CONF([], project='tempest')
Marc Kodererc81c7672015-12-17 12:10:12 +01001224
1225 logging_cfg_path = "%s/logging.conf" % os.path.dirname(path)
Tom Patzige6f7c7d2016-02-17 16:46:11 +01001226 if ((not hasattr(_CONF, 'log_config_append') or
1227 _CONF.log_config_append is None) and
Marc Kodererc81c7672015-12-17 12:10:12 +01001228 os.path.isfile(logging_cfg_path)):
1229 # if logging conf is in place we need to set log_config_append
1230 _CONF.log_config_append = logging_cfg_path
1231
Maru Newbyf440c292015-03-31 15:58:47 +00001232 logging.setup(_CONF, 'tempest')
Matthew Treinish43b296a2014-02-28 15:23:00 -05001233 LOG = logging.getLogger('tempest')
1234 LOG.info("Using tempest config file %s" % path)
1235 register_opts()
1236 self._set_attrs()
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001237 if parse_conf:
Maru Newbyf440c292015-03-31 15:58:47 +00001238 _CONF.log_opt_values(LOG, std_logging.DEBUG)
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001239
Sean Dague86bd8422013-12-20 09:56:44 -05001240
1241class TempestConfigProxy(object):
1242 _config = None
Joe Gordon28a84ae2014-07-17 15:38:28 +00001243 _path = None
Sean Dague86bd8422013-12-20 09:56:44 -05001244
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001245 _extra_log_defaults = [
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001246 ('paramiko.transport', std_logging.INFO),
1247 ('requests.packages.urllib3.connectionpool', std_logging.WARN),
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001248 ]
1249
1250 def _fix_log_levels(self):
1251 """Tweak the oslo log defaults."""
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001252 for name, level in self._extra_log_defaults:
1253 std_logging.getLogger(name).setLevel(level)
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001254
Sean Dague86bd8422013-12-20 09:56:44 -05001255 def __getattr__(self, attr):
1256 if not self._config:
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001257 self._fix_log_levels()
Matthew Treinishaa29c7e2015-04-23 16:35:09 -04001258 lock_dir = os.path.join(tempfile.gettempdir(), 'tempest-lock')
1259 lockutils.set_defaults(lock_dir)
Joe Gordon28a84ae2014-07-17 15:38:28 +00001260 self._config = TempestConfigPrivate(config_path=self._path)
Sean Dague86bd8422013-12-20 09:56:44 -05001261
1262 return getattr(self._config, attr)
1263
Joe Gordon28a84ae2014-07-17 15:38:28 +00001264 def set_config_path(self, path):
1265 self._path = path
1266
Sean Dague86bd8422013-12-20 09:56:44 -05001267
1268CONF = TempestConfigProxy()
Matthew Treinishca5a9ff2016-04-16 15:04:34 -04001269
1270
1271def skip_unless_config(*args):
Ken'ichi Ohmichi0385e102016-05-06 19:29:40 -07001272 """Decorator to raise a skip if a config opt doesn't exist or is False
Matthew Treinishca5a9ff2016-04-16 15:04:34 -04001273
1274 :param str group: The first arg, the option group to check
1275 :param str name: The second arg, the option name to check
1276 :param str msg: Optional third arg, the skip msg to use if a skip is raised
1277 :raises testtools.TestCaseskipException: If the specified config option
1278 doesn't exist or it exists and evaluates to False
1279 """
1280 def decorator(f):
1281 group = args[0]
1282 name = args[1]
1283
1284 @functools.wraps(f)
1285 def wrapper(self, *func_args, **func_kwargs):
1286 if not hasattr(CONF, group):
1287 msg = "Config group %s doesn't exist" % group
1288 raise testtools.TestCase.skipException(msg)
Ken'ichi Ohmichi0385e102016-05-06 19:29:40 -07001289
1290 conf_group = getattr(CONF, group)
1291 if not hasattr(conf_group, name):
1292 msg = "Config option %s.%s doesn't exist" % (group,
1293 name)
1294 raise testtools.TestCase.skipException(msg)
1295
1296 value = getattr(conf_group, name)
1297 if not value:
1298 if len(args) == 3:
1299 msg = args[2]
Matthew Treinishca5a9ff2016-04-16 15:04:34 -04001300 else:
Ken'ichi Ohmichi0385e102016-05-06 19:29:40 -07001301 msg = "Config option %s.%s is false" % (group,
1302 name)
1303 raise testtools.TestCase.skipException(msg)
Matthew Treinishca5a9ff2016-04-16 15:04:34 -04001304 return f(self, *func_args, **func_kwargs)
1305 return wrapper
1306 return decorator
1307
1308
1309def skip_if_config(*args):
1310 """Raise a skipException if a config exists and is True
1311
1312 :param str group: The first arg, the option group to check
1313 :param str name: The second arg, the option name to check
1314 :param str msg: Optional third arg, the skip msg to use if a skip is raised
1315 :raises testtools.TestCase.skipException: If the specified config option
1316 exists and evaluates to True
1317 """
1318 def decorator(f):
1319 group = args[0]
1320 name = args[1]
1321
1322 @functools.wraps(f)
1323 def wrapper(self, *func_args, **func_kwargs):
1324 if hasattr(CONF, group):
1325 conf_group = getattr(CONF, group)
1326 if hasattr(conf_group, name):
1327 value = getattr(conf_group, name)
1328 if value:
1329 if len(args) == 3:
1330 msg = args[2]
1331 else:
1332 msg = "Config option %s.%s is false" % (group,
1333 name)
1334 raise testtools.TestCase.skipException(msg)
1335 return f(self, *func_args, **func_kwargs)
1336 return wrapper
1337 return decorator