blob: 69389bd0ac5331035607a052319d8d98fb8a3ae2 [file] [log] [blame]
ZhiQiang Fan39f97222013-09-20 04:49:44 +08001# Copyright 2012 OpenStack Foundation
Jay Pipes3f981df2012-03-27 18:59:44 -04002# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Dirk Muellere746fc22013-06-29 16:29:29 +020016from __future__ import print_function
17
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +090018import logging as std_logging
Jay Pipes7f757632011-12-02 15:53:32 -050019import os
Jay Pipes3f981df2012-03-27 18:59:44 -040020
Doug Hellmann583ce2c2015-03-11 14:55:46 +000021from oslo_config import cfg
Matthew Treinish90aedd12013-02-25 17:56:49 -050022
Doug Hellmann583ce2c2015-03-11 14:55:46 +000023from oslo_log import log as logging
Jay Pipes7f757632011-12-02 15:53:32 -050024
Daryl Walleck1465d612011-11-02 02:22:15 -050025
Maru Newbyf440c292015-03-31 15:58:47 +000026# TODO(marun) Replace use of oslo_config's global ConfigOpts
27# (cfg.CONF) instance with a local instance (cfg.ConfigOpts()) once
28# the cli tests move to the clients. The cli tests rely on oslo
29# incubator modules that use the global cfg.CONF.
30_CONF = cfg.CONF
31
32
DennyZhang88a2dd82013-10-07 12:55:35 -050033def register_opt_group(conf, opt_group, options):
34 conf.register_group(opt_group)
35 for opt in options:
36 conf.register_opt(opt, group=opt_group.name)
37
38
Matthew Treinishc791ac42014-07-16 09:15:23 -040039auth_group = cfg.OptGroup(name='auth',
40 title="Options for authentication and credentials")
41
42
43AuthGroup = [
44 cfg.StrOpt('test_accounts_file',
Matthew Treinishc791ac42014-07-16 09:15:23 -040045 help="Path to the yaml file that contains the list of "
Matthew Treinishfc7cd8f2015-03-30 11:51:55 -040046 "credentials to use for running tests. If used when "
47 "running in parallel you have to make sure sufficient "
48 "credentials are provided in the accounts file. For "
49 "example if no tests with roles are being run it requires "
50 "at least `2 * CONC` distinct accounts configured in "
51 " the `test_accounts_file`, with CONC == the "
52 "number of concurrent test processes."),
Andrea Frittoli8283b4e2014-07-17 13:28:58 +010053 cfg.BoolOpt('allow_tenant_isolation',
Attila Fazekas5dda1582015-02-18 17:16:02 +010054 default=True,
Andrea Frittoli8283b4e2014-07-17 13:28:58 +010055 help="Allows test cases to create/destroy tenants and "
56 "users. This option requires that OpenStack Identity "
57 "API admin credentials are known. If false, isolated "
58 "test cases and parallel execution, can still be "
59 "achieved configuring a list of test accounts",
60 deprecated_opts=[cfg.DeprecatedOpt('allow_tenant_isolation',
61 group='compute'),
62 cfg.DeprecatedOpt('allow_tenant_isolation',
63 group='orchestration')]),
Matthew Treinish167b2be2015-01-15 17:20:27 -050064 cfg.ListOpt('tempest_roles',
65 help="Roles to assign to all users created by tempest",
Andrea Frittolic3280152015-02-26 12:42:34 +000066 default=[]),
67 cfg.StrOpt('tenant_isolation_domain_name',
68 default=None,
69 help="Only applicable when identity.auth_version is v3."
70 "Domain within which isolated credentials are provisioned."
71 "The default \"None\" means that the domain from the"
Matthew Treinish2219d382015-04-24 10:33:04 -040072 "admin user is used instead."),
73 cfg.BoolOpt('create_isolated_networks',
74 default=True,
75 help="If allow_tenant_isolation is set to True and Neutron is "
76 "enabled Tempest will try to create a useable network, "
77 "subnet, and router when needed for each tenant it "
78 "creates. However in some neutron configurations, like "
79 "with VLAN provider networks, this doesn't work. So if "
80 "set to False the isolated networks will not be created"),
Matthew Treinishc791ac42014-07-16 09:15:23 -040081]
82
Matthew Treinish39e48ef2012-12-21 13:36:15 -050083identity_group = cfg.OptGroup(name='identity',
84 title="Keystone Configuration Options")
Daryl Walleck1465d612011-11-02 02:22:15 -050085
Matthew Treinish39e48ef2012-12-21 13:36:15 -050086IdentityGroup = [
87 cfg.StrOpt('catalog_type',
88 default='identity',
89 help="Catalog type of the Identity service."),
Jay Pipescd8eaec2013-01-16 21:03:48 -050090 cfg.BoolOpt('disable_ssl_certificate_validation',
91 default=False,
92 help="Set to True if using self-signed SSL certificates."),
Rob Crittendena7db6692014-11-23 18:44:38 -050093 cfg.StrOpt('ca_certificates_file',
94 default=None,
95 help='Specify a CA bundle file to use in verifying a '
96 'TLS (https) server certificate.'),
Jay Pipes7c88eb22013-01-16 21:32:43 -050097 cfg.StrOpt('uri',
Brant Knudsonc7ca3342013-03-28 21:08:50 -050098 help="Full URI of the OpenStack Identity API (Keystone), v2"),
99 cfg.StrOpt('uri_v3',
100 help='Full URI of the OpenStack Identity API (Keystone), v3'),
Andrea Frittoli8bbdb162014-01-06 11:06:13 +0000101 cfg.StrOpt('auth_version',
102 default='v2',
103 help="Identity API version to be used for authentication "
Andrea Frittoli77f9da42014-02-06 11:18:19 +0000104 "for API tests."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500105 cfg.StrOpt('region',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100106 default='RegionOne',
Arata Notsu8f440392013-09-13 16:14:20 +0900107 help="The identity region name to use. Also used as the other "
108 "services' region name unless they are set explicitly. "
109 "If no such region is found in the service catalog, the "
110 "first found one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000111 cfg.StrOpt('endpoint_type',
112 default='publicURL',
113 choices=['public', 'admin', 'internal',
114 'publicURL', 'adminURL', 'internalURL'],
115 help="The endpoint type to use for the identity service."),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100116 cfg.StrOpt('username',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100117 help="Username to use for Nova API requests."),
118 cfg.StrOpt('tenant_name',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100119 help="Tenant name to use for Nova API requests."),
Russell Sim7f894a52013-09-13 10:35:21 +1000120 cfg.StrOpt('admin_role',
121 default='admin',
122 help="Role required to administrate keystone."),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100123 cfg.StrOpt('password',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100124 help="API key to use when authenticating.",
125 secret=True),
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100126 cfg.StrOpt('domain_name',
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100127 help="Domain name for authentication (Keystone V3)."
128 "The same domain applies to user and project"),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100129 cfg.StrOpt('alt_username',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100130 help="Username of alternate user to use for Nova API "
131 "requests."),
132 cfg.StrOpt('alt_tenant_name',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100133 help="Alternate user's Tenant name to use for Nova API "
134 "requests."),
135 cfg.StrOpt('alt_password',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100136 help="API key to use when authenticating as alternate user.",
137 secret=True),
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100138 cfg.StrOpt('alt_domain_name',
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100139 help="Alternate domain name for authentication (Keystone V3)."
140 "The same domain applies to user and project"),
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100141 cfg.StrOpt('admin_username',
Dirk Mueller14bd5622014-01-14 19:33:05 +0100142 help="Administrative Username to use for "
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100143 "Keystone API requests."),
144 cfg.StrOpt('admin_tenant_name',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100145 help="Administrative Tenant name to use for Keystone API "
146 "requests."),
147 cfg.StrOpt('admin_password',
Attila Fazekascadcb1f2013-01-21 23:10:53 +0100148 help="API key to use when authenticating as admin.",
149 secret=True),
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100150 cfg.StrOpt('admin_domain_name',
Andrea Frittolib1b04bb2014-04-06 11:57:07 +0100151 help="Admin domain name for authentication (Keystone V3)."
152 "The same domain applies to user and project"),
Martin Pavlasek4c3f2ab2014-04-15 17:15:15 +0200153 cfg.StrOpt('default_domain_id',
154 default='default',
155 help="ID of the default domain"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500156]
Jay Pipes3f981df2012-03-27 18:59:44 -0400157
Matthew Treinishd5021a72014-01-09 18:42:51 +0000158identity_feature_group = cfg.OptGroup(name='identity-feature-enabled',
159 title='Enabled Identity Features')
160
161IdentityFeatureGroup = [
162 cfg.BoolOpt('trust',
163 default=True,
164 help='Does the identity service have delegation and '
Matthew Treinishdb2c5972014-01-31 22:18:59 +0000165 'impersonation enabled'),
166 cfg.BoolOpt('api_v2',
167 default=True,
168 help='Is the v2 identity API enabled'),
169 cfg.BoolOpt('api_v3',
170 default=True,
171 help='Is the v3 identity API enabled'),
Matthew Treinishd5021a72014-01-09 18:42:51 +0000172]
173
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500174compute_group = cfg.OptGroup(name='compute',
175 title='Compute Service Options')
Rohit Karajgie1b050d2011-12-02 16:13:18 -0800176
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500177ComputeGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500178 cfg.StrOpt('image_ref',
Matthew Treinishafcb6b42014-05-27 13:50:02 -0400179 help="Valid primary image reference to be used in tests. "
180 "This is a required option"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500181 cfg.StrOpt('image_ref_alt',
Matthew Treinishafcb6b42014-05-27 13:50:02 -0400182 help="Valid secondary image reference to be used in tests. "
183 "This is a required option, but if only one image is "
184 "available duplicate the value of image_ref above"),
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +0900185 cfg.StrOpt('flavor_ref',
186 default="1",
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500187 help="Valid primary flavor to use in tests."),
Ken'ichi Ohmichi35772602013-11-14 15:03:27 +0900188 cfg.StrOpt('flavor_ref_alt',
189 default="2",
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500190 help='Valid secondary flavor to be used in tests.'),
Maru Newbyaf292e82013-05-20 21:32:28 +0000191 cfg.StrOpt('image_ssh_user',
192 default="root",
193 help="User name used to authenticate to an instance."),
Ryan Hsucb2e1252013-09-03 21:44:49 -0700194 cfg.StrOpt('image_ssh_password',
195 default="password",
196 help="Password used to authenticate to an instance."),
Maru Newbyaf292e82013-05-20 21:32:28 +0000197 cfg.StrOpt('image_alt_ssh_user',
198 default="root",
199 help="User name used to authenticate to an instance using "
200 "the alternate image."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500201 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400202 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500203 help="Time in seconds between build status checks."),
204 cfg.IntOpt('build_timeout',
205 default=300,
Hugh Saunders5b139ad2014-12-15 09:08:41 +0000206 help="Timeout in seconds to wait for an instance to build. "
207 "Other services that do not define build_timeout will "
Lucian Petrut1cfe2982015-01-06 13:57:36 +0200208 "inherit this value."),
Attila Fazekas423834d2014-03-14 17:33:13 +0100209 cfg.StrOpt('ssh_auth_method',
210 default='keypair',
211 help="Auth method used for authenticate to the instance. "
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000212 "Valid choices are: keypair, configured, adminpass "
213 "and disabled. "
214 "Keypair: start the servers with a ssh keypair. "
215 "Configured: use the configured user and password. "
216 "Adminpass: use the injected adminPass. "
217 "Disabled: avoid using ssh when it is an option."),
Attila Fazekas423834d2014-03-14 17:33:13 +0100218 cfg.StrOpt('ssh_connect_method',
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000219 default='floating',
Attila Fazekas423834d2014-03-14 17:33:13 +0100220 help="How to connect to the instance? "
221 "fixed: using the first ip belongs the fixed network "
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000222 "floating: creating and using a floating ip."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500223 cfg.StrOpt('ssh_user',
224 default='root',
225 help="User name used to authenticate to an instance."),
Nachi Ueno6d580be2013-07-24 10:58:11 -0700226 cfg.IntOpt('ping_timeout',
Darragh O'Reilly6b636672014-01-24 12:17:40 +0000227 default=120,
Nachi Ueno6d580be2013-07-24 10:58:11 -0700228 help="Timeout in seconds to wait for ping to "
229 "succeed."),
Richard Wintersf87059b2015-02-17 11:46:54 -0500230 cfg.IntOpt('ping_size',
231 default=56,
232 help="The packet size for ping packets originating "
233 "from remote linux hosts"),
234 cfg.IntOpt('ping_count',
235 default=1,
236 help="The number of ping packets originating from remote "
237 "linux hosts"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500238 cfg.IntOpt('ssh_timeout',
239 default=300,
Chris Yeoh76916042013-02-27 16:25:25 +1030240 help="Timeout in seconds to wait for authentication to "
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500241 "succeed."),
Attila Fazekas0abbc952013-07-01 19:19:42 +0200242 cfg.IntOpt('ready_wait',
243 default=0,
DennyZhang8912d012013-09-25 18:08:34 -0500244 help="Additional wait time for clean state, when there is "
245 "no OS-EXT-STS extension available"),
Chris Yeoh76916042013-02-27 16:25:25 +1030246 cfg.IntOpt('ssh_channel_timeout',
247 default=60,
248 help="Timeout in seconds to wait for output from ssh "
249 "channel."),
Attila Fazekasb0661652013-05-08 13:01:36 +0200250 cfg.StrOpt('fixed_network_name',
Chris Hoge8f1401b2014-11-19 14:00:37 -0800251 help="Name of the fixed network that is visible to all test "
Matthew Treinish03feae02015-03-27 10:25:45 -0400252 "tenants. If multiple networks are available for a tenant"
253 " this is the network which will be used for creating "
254 "servers if tempest does not create a network or a "
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000255 "network is not specified elsewhere. It may be used for "
256 "ssh validation only if floating IPs are disabled."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500257 cfg.StrOpt('network_for_ssh',
258 default='public',
Chris Hoge8f1401b2014-11-19 14:00:37 -0800259 help="Network used for SSH connections. Ignored if "
Matthew Treinishe5cca002015-05-11 15:36:50 -0400260 "use_floatingip_for_ssh=true or run_validation=false."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500261 cfg.IntOpt('ip_version_for_ssh',
262 default=4,
263 help="IP version used for SSH connections."),
fujioka yuuichia11994e2013-07-09 11:19:51 +0900264 cfg.BoolOpt('use_floatingip_for_ssh',
265 default=True,
Tushar Kalra95a482d2014-03-25 14:24:43 -0700266 help="Does SSH use Floating IPs?"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500267 cfg.StrOpt('catalog_type',
268 default='compute',
269 help="Catalog type of the Compute service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900270 cfg.StrOpt('region',
271 default='',
272 help="The compute region name to use. If empty, the value "
273 "of identity.region is used instead. If no such region "
274 "is found in the service catalog, the first found one is "
275 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000276 cfg.StrOpt('endpoint_type',
277 default='publicURL',
278 choices=['public', 'admin', 'internal',
279 'publicURL', 'adminURL', 'internalURL'],
280 help="The endpoint type to use for the compute service."),
Ryan Hsucb2e1252013-09-03 21:44:49 -0700281 cfg.StrOpt('volume_device_name',
282 default='vdb',
283 help="Expected device name when a volume is attached to "
Ken'ichi Ohmichi39437e22013-10-06 00:21:38 +0900284 "an instance"),
285 cfg.IntOpt('shelved_offload_time',
286 default=0,
287 help='Time in seconds before a shelved instance is eligible '
288 'for removing from a host. -1 never offload, 0 offload '
289 'when shelved. This time should be the same as the time '
290 'of nova.conf, and some tests will run for as long as the '
Ghanshyam06a5b4a2014-04-11 17:32:45 +0900291 'time.'),
292 cfg.StrOpt('floating_ip_range',
293 default='10.0.0.0/29',
294 help='Unallocated floating IP range, which will be used to '
Chris Hoge8f1401b2014-11-19 14:00:37 -0800295 'test the floating IP bulk feature for CRUD operation. '
296 'This block must not overlap an existing floating IP '
297 'pool.')
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500298]
Rohit Karajgie1b050d2011-12-02 16:13:18 -0800299
Matthew Treinishd5c96022013-10-17 21:51:23 +0000300compute_features_group = cfg.OptGroup(name='compute-feature-enabled',
301 title="Enabled Compute Service Features")
302
303ComputeFeaturesGroup = [
304 cfg.BoolOpt('disk_config',
305 default=True,
306 help="If false, skip disk config tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000307 cfg.ListOpt('api_extensions',
308 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800309 help='A list of enabled compute extensions with a special '
Ken'ichi Ohmichia7e68712014-05-06 10:47:26 +0900310 'entry all which indicates every extension is enabled. '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300311 'Each extension should be specified with alias name. '
312 'Empty list indicates all extensions are disabled'),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000313 cfg.BoolOpt('change_password',
314 default=False,
315 help="Does the test environment support changing the admin "
316 "password?"),
Adam Gandelmanc6eefb42014-07-15 16:44:08 -0700317 cfg.BoolOpt('console_output',
318 default=True,
319 help="Does the test environment support obtaining instance "
320 "serial console output?"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000321 cfg.BoolOpt('resize',
322 default=False,
323 help="Does the test environment support resizing?"),
Eric Windischb5538072014-03-09 23:47:35 -0400324 cfg.BoolOpt('pause',
325 default=True,
326 help="Does the test environment support pausing?"),
David Shrewsbury25f666f2014-07-22 12:17:59 -0400327 cfg.BoolOpt('shelve',
328 default=True,
329 help="Does the test environment support shelving/unshelving?"),
Eric Windischaeb7e842014-03-10 01:10:50 -0400330 cfg.BoolOpt('suspend',
331 default=True,
332 help="Does the test environment support suspend/resume?"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000333 cfg.BoolOpt('live_migration',
Joe Gordon31a139a2014-11-17 16:39:04 -0800334 default=True,
Matthew Treinishd5c96022013-10-17 21:51:23 +0000335 help="Does the test environment support live migration "
336 "available?"),
337 cfg.BoolOpt('block_migration_for_live_migration',
338 default=False,
339 help="Does the test environment use block devices for live "
340 "migration"),
341 cfg.BoolOpt('block_migrate_cinder_iscsi',
342 default=False,
343 help="Does the test environment block migration support "
Joe Gordon0a5788f2015-03-17 11:29:38 -0700344 "cinder iSCSI volumes. Note, libvirt doesn't support this, "
345 "see https://bugs.launchpad.net/nova/+bug/1398999"),
Matt Riedemannbb9f7042015-03-03 08:53:11 -0800346 # TODO(gilliard): Remove live_migrate_paused_instances at juno-eol.
347 cfg.BoolOpt('live_migrate_paused_instances',
348 default=False,
349 help="Does the test system allow live-migration of paused "
350 "instances? Note, this is more than just the ANDing of "
351 "paused and live_migrate, but all 3 should be set to True "
352 "to run those tests"),
Ghanshyam Mann41c17572014-02-27 18:52:56 +0900353 cfg.BoolOpt('vnc_console',
354 default=False,
355 help='Enable VNC console. This configuration value should '
Ghanshyam70876d02014-03-11 11:40:18 +0900356 'be same as [nova.vnc]->vnc_enabled in nova.conf'),
357 cfg.BoolOpt('spice_console',
358 default=False,
359 help='Enable Spice console. This configuration value should '
360 'be same as [nova.spice]->enabled in nova.conf'),
361 cfg.BoolOpt('rdp_console',
362 default=False,
363 help='Enable RDP console. This configuration value should '
Adam Gandelman2e37b4f2014-06-18 17:34:21 -0700364 'be same as [nova.rdp]->enabled in nova.conf'),
365 cfg.BoolOpt('rescue',
366 default=True,
367 help='Does the test environment support instance rescue '
Ghanshyam9c2e50d2014-07-22 21:32:05 +0900368 'mode?'),
369 cfg.BoolOpt('enable_instance_password',
370 default=True,
371 help='Enables returning of the instance password by the '
372 'relevant server API calls such as create, rebuild '
Adam Gandelman7186f7a2014-07-23 09:28:56 -0400373 'or rescue.'),
374 cfg.BoolOpt('interface_attach',
375 default=True,
376 help='Does the test environment support dynamic network '
Adam Gandelmanfbc95ac2014-06-19 17:33:43 -0700377 'interface attachment?'),
378 cfg.BoolOpt('snapshot',
379 default=True,
380 help='Does the test environment support creating snapshot '
Matthew Treinishdfd7ac02015-02-09 17:47:31 -0500381 'images of running instances?'),
382 cfg.BoolOpt('ec2_api',
383 default=True,
Matt Riedemann17940732015-03-13 14:18:19 +0000384 help='Does the test environment have the ec2 api running?'),
385 # TODO(mriedem): Remove preserve_ports once juno-eol happens.
386 cfg.BoolOpt('preserve_ports',
387 default=False,
388 help='Does Nova preserve preexisting ports from Neutron '
389 'when deleting an instance? This should be set to True '
390 'if testing Kilo+ Nova.')
Matthew Treinishd5c96022013-10-17 21:51:23 +0000391]
392
393
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500394image_group = cfg.OptGroup(name='image',
395 title="Image Service Options")
Jay Pipesf38eaac2012-06-21 13:37:35 -0400396
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500397ImageGroup = [
Matthew Treinish72ea4422013-02-07 14:42:49 -0500398 cfg.StrOpt('catalog_type',
399 default='image',
Sean Dague83401992013-05-06 17:46:36 -0400400 help='Catalog type of the Image service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900401 cfg.StrOpt('region',
402 default='',
403 help="The image region name to use. If empty, the value "
404 "of identity.region is used instead. If no such region "
405 "is found in the service catalog, the first found one is "
406 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000407 cfg.StrOpt('endpoint_type',
408 default='publicURL',
409 choices=['public', 'admin', 'internal',
410 'publicURL', 'adminURL', 'internalURL'],
411 help="The endpoint type to use for the image service."),
Sean Dague83401992013-05-06 17:46:36 -0400412 cfg.StrOpt('http_image',
413 default='http://download.cirros-cloud.net/0.3.1/'
414 'cirros-0.3.1-x86_64-uec.tar.gz',
Lucian Petrut1cfe2982015-01-06 13:57:36 +0200415 help='http accessible image'),
416 cfg.IntOpt('build_timeout',
417 default=300,
418 help="Timeout in seconds to wait for an image to "
419 "become available."),
420 cfg.IntOpt('build_interval',
421 default=1,
422 help="Time in seconds between image operation status "
423 "checks.")
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500424]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400425
Matthew Treinish2b5287d2013-10-22 17:40:34 +0000426image_feature_group = cfg.OptGroup(name='image-feature-enabled',
427 title='Enabled image service features')
428
429ImageFeaturesGroup = [
430 cfg.BoolOpt('api_v2',
431 default=True,
432 help="Is the v2 image API enabled"),
433 cfg.BoolOpt('api_v1',
434 default=True,
435 help="Is the v1 image API enabled"),
bkopilov81aaae72015-05-15 23:46:25 +0300436 cfg.BoolOpt('deactivate_image',
437 default=False,
438 help="Is the deactivate-image feature enabled."
439 " The feature has been integrated since Kilo."),
Matthew Treinish2b5287d2013-10-22 17:40:34 +0000440]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400441
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500442network_group = cfg.OptGroup(name='network',
443 title='Network Service Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600444
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500445NetworkGroup = [
446 cfg.StrOpt('catalog_type',
447 default='network',
Mark McClainf2982e82013-07-06 17:48:03 -0400448 help='Catalog type of the Neutron service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900449 cfg.StrOpt('region',
450 default='',
451 help="The network region name to use. If empty, the value "
452 "of identity.region is used instead. If no such region "
453 "is found in the service catalog, the first found one is "
454 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000455 cfg.StrOpt('endpoint_type',
456 default='publicURL',
457 choices=['public', 'admin', 'internal',
458 'publicURL', 'adminURL', 'internalURL'],
459 help="The endpoint type to use for the network service."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500460 cfg.StrOpt('tenant_network_cidr',
461 default="10.100.0.0/16",
Henry Gessauffda37a2014-01-16 11:17:55 -0500462 help="The cidr block to allocate tenant ipv4 subnets from"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500463 cfg.IntOpt('tenant_network_mask_bits',
Attila Fazekas8ea181b2013-07-13 16:26:14 +0200464 default=28,
Henry Gessauffda37a2014-01-16 11:17:55 -0500465 help="The mask bits for tenant ipv4 subnets"),
466 cfg.StrOpt('tenant_network_v6_cidr',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400467 default="2003::/48",
Henry Gessauffda37a2014-01-16 11:17:55 -0500468 help="The cidr block to allocate tenant ipv6 subnets from"),
469 cfg.IntOpt('tenant_network_v6_mask_bits',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400470 default=64,
Henry Gessauffda37a2014-01-16 11:17:55 -0500471 help="The mask bits for tenant ipv6 subnets"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500472 cfg.BoolOpt('tenant_networks_reachable',
473 default=False,
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000474 help="Whether tenant networks can be reached directly from "
475 "the test client. This must be set to True when the "
476 "'fixed' ssh_connect_method is selected."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500477 cfg.StrOpt('public_network_id',
478 default="",
479 help="Id of the public network that provides external "
480 "connectivity"),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000481 cfg.StrOpt('floating_network_name',
482 help="Default floating network name. Used to allocate floating "
483 "IPs when neutron is enabled."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500484 cfg.StrOpt('public_router_id',
485 default="",
486 help="Id of the public router that provides external "
Yair Fried1eb27f52014-11-10 15:24:19 +0200487 "connectivity. This should only be used when Neutron's "
488 "'allow_overlapping_ips' is set to 'False' in "
489 "neutron.conf. usually not needed past 'Grizzly' release"),
izikpensod9a01a62014-02-17 20:02:32 +0200490 cfg.IntOpt('build_timeout',
491 default=300,
492 help="Timeout in seconds to wait for network operation to "
493 "complete."),
494 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400495 default=1,
izikpensod9a01a62014-02-17 20:02:32 +0200496 help="Time in seconds between network operation status "
497 "checks."),
Attila Fazekas640392b2014-06-12 15:58:10 +0200498 cfg.ListOpt('dns_servers',
499 default=["8.8.8.8", "8.8.4.4"],
Itzik Brown5be44582014-12-24 09:05:13 +0200500 help="List of dns servers which should be used"
Itzik Brown2ca01cd2014-12-08 12:58:20 +0200501 " for subnet creation"),
502 cfg.StrOpt('port_vnic_type',
503 choices=[None, 'normal', 'direct', 'macvtap'],
504 help="vnic_type to use when Launching instances"
505 " with pre-configured ports."
506 " Supported ports are:"
507 " ['normal','direct','macvtap']"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500508]
Jay Pipes3f981df2012-03-27 18:59:44 -0400509
Matthew Treinishe3d26142013-11-26 19:14:58 +0000510network_feature_group = cfg.OptGroup(name='network-feature-enabled',
511 title='Enabled network service features')
512
513NetworkFeaturesGroup = [
Matthew Treinishe2e33cf2014-03-03 19:28:41 +0000514 cfg.BoolOpt('ipv6',
515 default=True,
516 help="Allow the execution of IPv6 tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000517 cfg.ListOpt('api_extensions',
518 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800519 help='A list of enabled network extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300520 'entry all which indicates every extension is enabled. '
521 'Empty list indicates all extensions are disabled'),
Sean M. Collinsdd27a4d2014-05-13 10:33:15 -0400522 cfg.BoolOpt('ipv6_subnet_attributes',
523 default=False,
524 help="Allow the execution of IPv6 subnet tests that use "
525 "the extended IPv6 attributes ipv6_ra_mode "
526 "and ipv6_address_mode"
Mark McClain6e07c0d2014-10-10 11:25:03 -0400527 ),
Itzik Brownbeb30d32015-03-29 09:42:54 +0300528 cfg.BoolOpt('port_admin_state_change',
529 default=True,
530 help="Does the test environment support changing"
531 " port admin state"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000532]
533
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300534messaging_group = cfg.OptGroup(name='messaging',
535 title='Messaging Service')
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500536
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300537MessagingGroup = [
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500538 cfg.StrOpt('catalog_type',
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300539 default='messaging',
540 help='Catalog type of the Messaging service.'),
Jorge Chai83ba4ee2014-04-15 18:58:08 +0000541 cfg.IntOpt('max_queues_per_page',
542 default=20,
543 help='The maximum number of queue records per page when '
544 'listing queues'),
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400545 cfg.IntOpt('max_queue_metadata',
546 default=65536,
547 help='The maximum metadata size for a queue'),
548 cfg.IntOpt('max_messages_per_page',
549 default=20,
550 help='The maximum number of queue message per page when '
551 'listing (or) posting messages'),
552 cfg.IntOpt('max_message_size',
553 default=262144,
554 help='The maximum size of a message body'),
555 cfg.IntOpt('max_messages_per_claim',
556 default=20,
557 help='The maximum number of messages per claim'),
558 cfg.IntOpt('max_message_ttl',
559 default=1209600,
560 help='The maximum ttl for a message'),
561 cfg.IntOpt('max_claim_ttl',
562 default=43200,
563 help='The maximum ttl for a claim'),
564 cfg.IntOpt('max_claim_grace',
565 default=43200,
566 help='The maximum grace period for a claim'),
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500567]
568
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000569validation_group = cfg.OptGroup(name='validation',
570 title='SSH Validation options')
571
572ValidationGroup = [
Matthew Treinishe5cca002015-05-11 15:36:50 -0400573 cfg.BoolOpt('run_validation',
574 default=False,
575 help='Enable ssh on created servers and creation of additional'
576 ' validation resources to enable remote access',
577 deprecated_opts=[cfg.DeprecatedOpt('run_ssh',
578 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000579 cfg.StrOpt('connect_method',
580 default='floating',
581 choices=['fixed', 'floating'],
582 help='Default IP type used for validation: '
583 '-fixed: uses the first IP belonging to the fixed network '
584 '-floating: creates and uses a floating IP'),
585 cfg.StrOpt('auth_method',
586 default='keypair',
587 choices=['keypair'],
588 help='Default authentication method to the instance. '
589 'Only ssh via keypair is supported for now. '
590 'Additional methods will be handled in a separate spec.'),
591 cfg.IntOpt('ip_version_for_ssh',
592 default=4,
593 help='Default IP version for ssh connections.'),
594 cfg.IntOpt('ping_timeout',
595 default=120,
596 help='Timeout in seconds to wait for ping to succeed.'),
597 cfg.IntOpt('connect_timeout',
598 default=60,
599 help='Timeout in seconds to wait for the TCP connection to be '
600 'successful.'),
601 cfg.IntOpt('ssh_timeout',
602 default=300,
603 help='Timeout in seconds to wait for the ssh banner.'),
604]
605
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500606volume_group = cfg.OptGroup(name='volume',
607 title='Block Storage Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600608
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500609VolumeGroup = [
610 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400611 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500612 help='Time in seconds between volume availability checks.'),
613 cfg.IntOpt('build_timeout',
614 default=300,
Eric Harney9b1f89c2014-10-14 14:40:19 -0400615 help='Timeout in seconds to wait for a volume to become '
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500616 'available.'),
617 cfg.StrOpt('catalog_type',
Matthew Treinisheb724512013-10-25 15:12:59 +0000618 default='volume',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500619 help="Catalog type of the Volume Service"),
Arata Notsu8f440392013-09-13 16:14:20 +0900620 cfg.StrOpt('region',
621 default='',
622 help="The volume region name to use. If empty, the value "
623 "of identity.region is used instead. If no such region "
624 "is found in the service catalog, the first found one is "
625 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000626 cfg.StrOpt('endpoint_type',
627 default='publicURL',
628 choices=['public', 'admin', 'internal',
629 'publicURL', 'adminURL', 'internalURL'],
630 help="The endpoint type to use for the volume service."),
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100631 cfg.StrOpt('backend1_name',
Giulio Fidentef4fa8942013-05-28 18:48:03 +0200632 default='BACKEND_1',
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100633 help="Name of the backend1 (must be declared in cinder.conf)"),
634 cfg.StrOpt('backend2_name',
Giulio Fidentef4fa8942013-05-28 18:48:03 +0200635 default='BACKEND_2',
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100636 help="Name of the backend2 (must be declared in cinder.conf)"),
Adam Gandelman827ad332013-06-24 17:04:09 -0700637 cfg.StrOpt('storage_protocol',
638 default='iSCSI',
639 help='Backend protocol to target when creating volume types'),
640 cfg.StrOpt('vendor_name',
641 default='Open Source',
642 help='Backend vendor to target when creating volume types'),
Ryan Hsua67f4632013-08-29 16:03:06 -0700643 cfg.StrOpt('disk_format',
644 default='raw',
645 help='Disk format to use when copying a volume to image'),
Jerry Cai9733d0e2014-03-19 15:50:49 +0800646 cfg.IntOpt('volume_size',
647 default=1,
648 help='Default size in GB for volumes created by volumes tests'),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500649]
K Jonathan Harkerd6ba4b42012-12-18 13:50:47 -0800650
Matthew Treinishd5c96022013-10-17 21:51:23 +0000651volume_feature_group = cfg.OptGroup(name='volume-feature-enabled',
652 title='Enabled Cinder Features')
653
654VolumeFeaturesGroup = [
655 cfg.BoolOpt('multi_backend',
656 default=False,
Matthew Treinishe3d26142013-11-26 19:14:58 +0000657 help="Runs Cinder multi-backend test (requires 2 backends)"),
Giulio Fidente74b08ad2014-01-18 04:02:51 +0100658 cfg.BoolOpt('backup',
659 default=True,
660 help='Runs Cinder volumes backup test'),
JordanPbce55532014-03-19 12:10:32 +0100661 cfg.BoolOpt('snapshot',
662 default=True,
663 help='Runs Cinder volume snapshot test'),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000664 cfg.ListOpt('api_extensions',
665 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800666 help='A list of enabled volume extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300667 'entry all which indicates every extension is enabled. '
668 'Empty list indicates all extensions are disabled'),
Zhi Kun Liubb363a22013-11-28 18:47:39 +0800669 cfg.BoolOpt('api_v1',
670 default=True,
671 help="Is the v1 volume API enabled"),
Zhi Kun Liu8cc3c842014-01-07 10:44:34 +0800672 cfg.BoolOpt('api_v2',
673 default=True,
674 help="Is the v2 volume API enabled"),
bkopilov8a657ae2015-05-11 11:45:23 +0300675 cfg.BoolOpt('bootable',
676 default=False,
677 help='Update bootable status of a volume '
678 'Not implemented on icehouse ')
Matthew Treinishd5c96022013-10-17 21:51:23 +0000679]
680
Daryl Walleck587385b2012-03-03 13:00:26 -0600681
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500682object_storage_group = cfg.OptGroup(name='object-storage',
683 title='Object Storage Service Options')
Attila Fazekasa23f5002012-10-23 19:32:45 +0200684
DennyZhang1e71b612013-09-26 12:35:40 -0500685ObjectStoreGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500686 cfg.StrOpt('catalog_type',
687 default='object-store',
688 help="Catalog type of the Object-Storage service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900689 cfg.StrOpt('region',
690 default='',
691 help="The object-storage region name to use. If empty, the "
692 "value of identity.region is used instead. If no such "
693 "region is found in the service catalog, the first found "
694 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000695 cfg.StrOpt('endpoint_type',
696 default='publicURL',
697 choices=['public', 'admin', 'internal',
698 'publicURL', 'adminURL', 'internalURL'],
699 help="The endpoint type to use for the object-store service."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000700 cfg.IntOpt('container_sync_timeout',
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900701 default=600,
Fabien Boucher2178d312013-12-31 15:38:57 +0100702 help="Number of seconds to time on waiting for a container "
nayna-patelb4989b32013-01-09 06:25:13 +0000703 "to container synchronization complete."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000704 cfg.IntOpt('container_sync_interval',
nayna-patelb4989b32013-01-09 06:25:13 +0000705 default=5,
Fabien Boucher2178d312013-12-31 15:38:57 +0100706 help="Number of seconds to wait while looping to check the "
nayna-patelb4989b32013-01-09 06:25:13 +0000707 "status of a container to container synchronization"),
Matthew Treinish3fdb80c2013-08-15 11:13:19 -0400708 cfg.StrOpt('operator_role',
709 default='Member',
710 help="Role to add to users created for swift tests to "
711 "enable creating containers"),
Matthew Treinish998c91d2014-03-01 12:39:49 -0500712 cfg.StrOpt('reseller_admin_role',
713 default='ResellerAdmin',
714 help="User role that has reseller admin"),
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900715 cfg.StrOpt('realm_name',
716 default='realm1',
717 help="Name of sync realm. A sync realm is a set of clusters "
718 "that have agreed to allow container syncing with each "
719 "other. Set the same realm name as Swift's "
720 "container-sync-realms.conf"),
721 cfg.StrOpt('cluster_name',
722 default='name1',
723 help="One name of cluster which is set in the realm whose name "
724 "is set in 'realm_name' item in this file. Set the "
725 "same cluster name as Swift's container-sync-realms.conf"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500726]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200727
Matthew Treinishd5c96022013-10-17 21:51:23 +0000728object_storage_feature_group = cfg.OptGroup(
729 name='object-storage-feature-enabled',
730 title='Enabled object-storage features')
731
732ObjectStoreFeaturesGroup = [
Matthew Treinish20345382013-12-13 17:04:23 +0000733 cfg.ListOpt('discoverable_apis',
734 default=['all'],
735 help="A list of the enabled optional discoverable apis. "
736 "A single entry, all, indicates that all of these "
737 "features are expected to be enabled"),
Daisuke Morita20a183f2014-08-25 14:43:36 +0900738 cfg.BoolOpt('container_sync',
739 default=True,
740 help="Execute (old style) container-sync tests"),
741 cfg.BoolOpt('object_versioning',
742 default=True,
743 help="Execute object-versioning tests"),
744 cfg.BoolOpt('discoverability',
745 default=True,
746 help="Execute discoverability tests"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000747]
748
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800749database_group = cfg.OptGroup(name='database',
750 title='Database Service Options')
751
752DatabaseGroup = [
753 cfg.StrOpt('catalog_type',
754 default='database',
755 help="Catalog type of the Database service."),
756 cfg.StrOpt('db_flavor_ref',
757 default="1",
758 help="Valid primary flavor to use in database tests."),
Peter Stachowski320f9c72014-04-21 16:13:23 -0400759 cfg.StrOpt('db_current_version',
760 default="v1.0",
761 help="Current database version to use in database tests."),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800762]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200763
Steve Bakerc60e4e32013-05-06 15:22:41 +1200764orchestration_group = cfg.OptGroup(name='orchestration',
765 title='Orchestration Service Options')
766
767OrchestrationGroup = [
768 cfg.StrOpt('catalog_type',
769 default='orchestration',
770 help="Catalog type of the Orchestration service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900771 cfg.StrOpt('region',
772 default='',
773 help="The orchestration region name to use. If empty, the "
774 "value of identity.region is used instead. If no such "
775 "region is found in the service catalog, the first found "
776 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000777 cfg.StrOpt('endpoint_type',
778 default='publicURL',
779 choices=['public', 'admin', 'internal',
780 'publicURL', 'adminURL', 'internalURL'],
781 help="The endpoint type to use for the orchestration service."),
Matthew Treinishdb9721d2015-03-18 14:21:28 -0400782 cfg.StrOpt('stack_owner_role', default='heat_stack_owner',
783 help='Role required for users to be able to manage stacks'),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200784 cfg.IntOpt('build_interval',
785 default=1,
786 help="Time in seconds between build status checks."),
787 cfg.IntOpt('build_timeout',
Matthew Treinisha2dfd492014-04-15 11:15:34 -0400788 default=1200,
Steve Bakerc60e4e32013-05-06 15:22:41 +1200789 help="Timeout in seconds to wait for a stack to build."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200790 cfg.StrOpt('instance_type',
Steve Baker9e86b832013-05-22 15:40:28 +1200791 default='m1.micro',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200792 help="Instance type for tests. Needs to be big enough for a "
793 "full OS plus the test workload"),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200794 cfg.StrOpt('keypair_name',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200795 help="Name of existing keypair to launch servers with."),
Clint Byrum71f27632013-09-09 11:41:32 -0700796 cfg.IntOpt('max_template_size',
Joe Gordon0e51b222013-10-24 14:11:10 +0100797 default=524288,
Clint Byrum71f27632013-09-09 11:41:32 -0700798 help="Value must match heat configuration of the same name."),
Steven Hardyfdc6bd72014-03-21 16:56:04 +0000799 cfg.IntOpt('max_resources_per_stack',
800 default=1000,
801 help="Value must match heat configuration of the same name."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200802]
803
804
Yassine Lamgarchalb158d412013-12-27 19:29:42 +0100805telemetry_group = cfg.OptGroup(name='telemetry',
806 title='Telemetry Service Options')
807
808TelemetryGroup = [
809 cfg.StrOpt('catalog_type',
810 default='metering',
811 help="Catalog type of the Telemetry service."),
JordanPfc62c902014-02-26 14:47:28 +0000812 cfg.StrOpt('endpoint_type',
813 default='publicURL',
814 choices=['public', 'admin', 'internal',
815 'publicURL', 'adminURL', 'internalURL'],
816 help="The endpoint type to use for the telemetry service."),
Vadim Rovachev7bcea352013-12-26 15:56:17 +0400817 cfg.BoolOpt('too_slow_to_test',
818 default=True,
819 help="This variable is used as flag to enable "
820 "notification tests")
Yassine Lamgarchalb158d412013-12-27 19:29:42 +0100821]
822
823
Julie Pichond1017642013-07-24 16:37:23 +0100824dashboard_group = cfg.OptGroup(name="dashboard",
825 title="Dashboard options")
826
827DashboardGroup = [
828 cfg.StrOpt('dashboard_url',
829 default='http://localhost/',
830 help="Where the dashboard can be found"),
831 cfg.StrOpt('login_url',
832 default='http://localhost/auth/login/',
833 help="Login page for the dashboard"),
834]
835
836
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400837data_processing_group = cfg.OptGroup(name="data_processing",
838 title="Data Processing options")
839
840DataProcessingGroup = [
841 cfg.StrOpt('catalog_type',
842 default='data_processing',
JordanPfc62c902014-02-26 14:47:28 +0000843 help="Catalog type of the data processing service."),
844 cfg.StrOpt('endpoint_type',
845 default='publicURL',
846 choices=['public', 'admin', 'internal',
847 'publicURL', 'adminURL', 'internalURL'],
848 help="The endpoint type to use for the data processing "
849 "service."),
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400850]
851
852
Luigi Toscano14d172d2015-01-23 16:37:47 +0100853data_processing_feature_group = cfg.OptGroup(
854 name="data_processing-feature-enabled",
855 title="Enabled Data Processing features")
856
857DataProcessingFeaturesGroup = [
858 cfg.ListOpt('plugins',
859 default=["vanilla", "hdp"],
860 help="List of enabled data processing plugins")
861]
862
863
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500864boto_group = cfg.OptGroup(name='boto',
865 title='EC2/S3 options')
DennyZhang1e71b612013-09-26 12:35:40 -0500866BotoGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500867 cfg.StrOpt('ec2_url',
868 default="http://localhost:8773/services/Cloud",
869 help="EC2 URL"),
870 cfg.StrOpt('s3_url',
871 default="http://localhost:8080",
872 help="S3 URL"),
873 cfg.StrOpt('aws_secret',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500874 help="AWS Secret Key",
875 secret=True),
876 cfg.StrOpt('aws_access',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500877 help="AWS Access Key"),
Attila Fazekas27dd92e2014-02-21 14:49:40 +0100878 cfg.StrOpt('aws_zone',
879 default="nova",
880 help="AWS Zone for EC2 tests"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500881 cfg.StrOpt('s3_materials_path',
882 default="/opt/stack/devstack/files/images/"
883 "s3-materials/cirros-0.3.0",
884 help="S3 Materials Path"),
885 cfg.StrOpt('ari_manifest',
886 default="cirros-0.3.0-x86_64-initrd.manifest.xml",
887 help="ARI Ramdisk Image manifest"),
888 cfg.StrOpt('ami_manifest',
889 default="cirros-0.3.0-x86_64-blank.img.manifest.xml",
890 help="AMI Machine Image manifest"),
891 cfg.StrOpt('aki_manifest',
892 default="cirros-0.3.0-x86_64-vmlinuz.manifest.xml",
893 help="AKI Kernel Image manifest"),
894 cfg.StrOpt('instance_type',
895 default="m1.tiny",
896 help="Instance type"),
897 cfg.IntOpt('http_socket_timeout',
898 default=3,
899 help="boto Http socket timeout"),
900 cfg.IntOpt('num_retries',
901 default=1,
902 help="boto num_retries on error"),
903 cfg.IntOpt('build_timeout',
904 default=60,
905 help="Status Change Timeout"),
906 cfg.IntOpt('build_interval',
907 default=1,
908 help="Status Change Test Interval"),
909]
Attila Fazekasf7f2d932012-12-13 09:14:38 +0100910
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500911stress_group = cfg.OptGroup(name='stress', title='Stress Test Options')
912
913StressGroup = [
914 cfg.StrOpt('nova_logdir',
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500915 help='Directory containing log files on the compute nodes'),
916 cfg.IntOpt('max_instances',
917 default=16,
918 help='Maximum number of instances to create during test.'),
919 cfg.StrOpt('controller',
David Kranzb9d97502013-05-01 15:55:04 -0400920 help='Controller host.'),
921 # new stress options
922 cfg.StrOpt('target_controller',
David Kranzb9d97502013-05-01 15:55:04 -0400923 help='Controller host.'),
924 cfg.StrOpt('target_ssh_user',
David Kranzb9d97502013-05-01 15:55:04 -0400925 help='ssh user.'),
926 cfg.StrOpt('target_private_key_path',
David Kranzb9d97502013-05-01 15:55:04 -0400927 help='Path to private key.'),
928 cfg.StrOpt('target_logfiles',
David Kranzb9d97502013-05-01 15:55:04 -0400929 help='regexp for list of log files.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000930 cfg.IntOpt('log_check_interval',
David Kranzb9d97502013-05-01 15:55:04 -0400931 default=60,
Marc Koderer32221b8e2013-08-23 13:57:50 +0200932 help='time (in seconds) between log file error checks.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000933 cfg.IntOpt('default_thread_number_per_action',
Marc Koderer32221b8e2013-08-23 13:57:50 +0200934 default=4,
Julien Leloup04d40f72014-01-28 11:17:18 +0100935 help='The number of threads created while stress test.'),
936 cfg.BoolOpt('leave_dirty_stack',
937 default=False,
938 help='Prevent the cleaning (tearDownClass()) between'
939 ' each stress test run if an exception occurs'
Julien Leloupa5ee5422014-02-13 14:29:02 +0100940 ' during this run.'),
941 cfg.BoolOpt('full_clean_stack',
942 default=False,
943 help='Allows a full cleaning process after a stress test.'
944 ' Caution : this cleanup will remove every objects of'
945 ' every tenant.')
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500946]
947
948
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900949scenario_group = cfg.OptGroup(name='scenario', title='Scenario Test Options')
950
951ScenarioGroup = [
952 cfg.StrOpt('img_dir',
953 default='/opt/stack/new/devstack/files/images/'
954 'cirros-0.3.1-x86_64-uec',
955 help='Directory containing image files'),
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300956 cfg.StrOpt('img_file', deprecated_name='qcow2_img_file',
Masayuki Igawa4f71bf02014-02-21 14:02:29 +0900957 default='cirros-0.3.1-x86_64-disk.img',
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300958 help='Image file name'),
959 cfg.StrOpt('img_disk_format',
960 default='qcow2',
961 help='Image disk format'),
962 cfg.StrOpt('img_container_format',
963 default='bare',
964 help='Image container format'),
Evgeny Antyshev7ba0d5f2015-04-28 13:18:07 +0000965 cfg.DictOpt('img_properties', help='Glance image properties. '
966 'Use for custom images which require them'),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900967 cfg.StrOpt('ami_img_file',
968 default='cirros-0.3.1-x86_64-blank.img',
969 help='AMI image file name'),
970 cfg.StrOpt('ari_img_file',
971 default='cirros-0.3.1-x86_64-initrd',
972 help='ARI image file name'),
973 cfg.StrOpt('aki_img_file',
974 default='cirros-0.3.1-x86_64-vmlinuz',
975 help='AKI image file name'),
976 cfg.StrOpt('ssh_user',
977 default='cirros',
Joe Gordonb5e10cd2013-07-10 15:51:12 +0000978 help='ssh username for the image file'),
979 cfg.IntOpt(
980 'large_ops_number',
981 default=0,
982 help="specifies how many resources to request at once. Used "
Yair Fried413bf2d2014-11-19 17:07:11 +0200983 "for large operations testing."),
984 # TODO(yfried): add support for dhcpcd
985 cfg.StrOpt('dhcp_client',
986 default='udhcpc',
987 choices=["udhcpc", "dhclient"],
988 help='DHCP client used by images to renew DCHP lease. '
989 'If left empty, update operation will be skipped. '
990 'Supported clients: "udhcpc", "dhclient"')
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900991]
992
993
Matthew Treinish4c412922013-07-16 15:27:42 -0400994service_available_group = cfg.OptGroup(name="service_available",
995 title="Available OpenStack Services")
996
997ServiceAvailableGroup = [
998 cfg.BoolOpt('cinder',
999 default=True,
1000 help="Whether or not cinder is expected to be available"),
Matthew Treinishfaa340d2013-07-19 16:26:21 -04001001 cfg.BoolOpt('neutron',
1002 default=False,
1003 help="Whether or not neutron is expected to be available"),
Matthew Treinish853ae442013-07-19 16:36:07 -04001004 cfg.BoolOpt('glance',
1005 default=True,
1006 help="Whether or not glance is expected to be available"),
Matthew Treinish61e332b2013-07-19 16:42:31 -04001007 cfg.BoolOpt('swift',
1008 default=True,
1009 help="Whether or not swift is expected to be available"),
Matthew Treinish6b41e242013-07-19 16:49:28 -04001010 cfg.BoolOpt('nova',
1011 default=True,
1012 help="Whether or not nova is expected to be available"),
Matthew Treinisha9d43882013-07-19 16:54:52 -04001013 cfg.BoolOpt('heat',
1014 default=False,
1015 help="Whether or not Heat is expected to be available"),
Mehdi Abaakouk8581c0b2013-10-04 10:45:42 +02001016 cfg.BoolOpt('ceilometer',
1017 default=True,
1018 help="Whether or not Ceilometer is expected to be available"),
Julie Pichond1017642013-07-24 16:37:23 +01001019 cfg.BoolOpt('horizon',
1020 default=True,
1021 help="Whether or not Horizon is expected to be available"),
Sergey Lukjanov9c95a252014-03-13 23:59:22 +04001022 cfg.BoolOpt('sahara',
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +04001023 default=False,
Sergey Lukjanov9c95a252014-03-13 23:59:22 +04001024 help="Whether or not Sahara is expected to be available"),
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001025 cfg.BoolOpt('ironic',
1026 default=False,
1027 help="Whether or not Ironic is expected to be available"),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -08001028 cfg.BoolOpt('trove',
1029 default=False,
1030 help="Whether or not Trove is expected to be available"),
Malini Kamalambal8681e922014-08-18 10:10:45 -04001031 cfg.BoolOpt('zaqar',
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -05001032 default=False,
Malini Kamalambal8681e922014-08-18 10:10:45 -04001033 help="Whether or not Zaqar is expected to be available"),
Matthew Treinish4c412922013-07-16 15:27:42 -04001034]
1035
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001036debug_group = cfg.OptGroup(name="debug",
1037 title="Debug System")
1038
1039DebugGroup = [
Sean Daguec522c092014-03-24 10:43:22 -04001040 cfg.StrOpt('trace_requests',
1041 default='',
1042 help="""A regex to determine which requests should be traced.
1043
1044This is a regex to match the caller for rest client requests to be able to
1045selectively trace calls out of specific classes and methods. It largely
1046exists for test development, and is not expected to be used in a real deploy
1047of tempest. This will be matched against the discovered ClassName:method
1048in the test environment.
1049
1050Expected values for this field are:
1051
1052 * ClassName:test_method_name - traces one test_method
1053 * ClassName:setUp(Class) - traces specific setup functions
1054 * ClassName:tearDown(Class) - traces specific teardown functions
1055 * ClassName:_run_cleanups - traces the cleanup functions
1056
1057If nothing is specified, this feature is not enabled. To trace everything
1058specify .* as the regex.
1059""")
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001060]
1061
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001062input_scenario_group = cfg.OptGroup(name="input-scenario",
1063 title="Filters and values for"
1064 " input scenarios")
1065
1066InputScenarioGroup = [
1067 cfg.StrOpt('image_regex',
1068 default='^cirros-0.3.1-x86_64-uec$',
1069 help="Matching images become parameters for scenario tests"),
1070 cfg.StrOpt('flavor_regex',
Andrea Frittoli99901c02014-01-30 18:06:49 +00001071 default='^m1.nano$',
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001072 help="Matching flavors become parameters for scenario tests"),
1073 cfg.StrOpt('non_ssh_image_regex',
1074 default='^.*[Ww]in.*$',
1075 help="SSH verification in tests is skipped"
1076 "for matching images"),
1077 cfg.StrOpt('ssh_user_regex',
Marc Koderer07f5a522015-03-27 15:02:41 +01001078 default="[[\"^.*[Cc]irros.*$\", \"cirros\"]]",
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001079 help="List of user mapped to regex "
1080 "to matching image names."),
1081]
1082
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001083
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001084baremetal_group = cfg.OptGroup(name='baremetal',
Chris Hoge8f1401b2014-11-19 14:00:37 -08001085 title='Baremetal provisioning service options',
1086 help='When enabling baremetal tests, Nova '
1087 'must be configured to use the Ironic '
1088 'driver. The following paremeters for the '
1089 '[compute] section must be disabled: '
1090 'console_output, interface_attach, '
1091 'live_migration, pause, rescue, resize '
1092 'shelve, snapshot, and suspend')
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001093
1094BaremetalGroup = [
1095 cfg.StrOpt('catalog_type',
1096 default='baremetal',
Adam Gandelman4a48a602014-03-20 18:23:18 -07001097 help="Catalog type of the baremetal provisioning service"),
1098 cfg.BoolOpt('driver_enabled',
1099 default=False,
1100 help="Whether the Ironic nova-compute driver is enabled"),
Yuiko Takada1ee1b322014-07-04 09:55:30 +09001101 cfg.StrOpt('driver',
1102 default='fake',
1103 help="Driver name which Ironic uses"),
JordanPfc62c902014-02-26 14:47:28 +00001104 cfg.StrOpt('endpoint_type',
1105 default='publicURL',
1106 choices=['public', 'admin', 'internal',
1107 'publicURL', 'adminURL', 'internalURL'],
1108 help="The endpoint type to use for the baremetal provisioning "
Adam Gandelman4a48a602014-03-20 18:23:18 -07001109 "service"),
1110 cfg.IntOpt('active_timeout',
1111 default=300,
1112 help="Timeout for Ironic node to completely provision"),
1113 cfg.IntOpt('association_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001114 default=30,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001115 help="Timeout for association of Nova instance and Ironic "
1116 "node"),
1117 cfg.IntOpt('power_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001118 default=60,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001119 help="Timeout for Ironic power transitions."),
1120 cfg.IntOpt('unprovision_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001121 default=60,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001122 help="Timeout for unprovisioning an Ironic node.")
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001123]
1124
Marc Koderer6ee82dc2014-02-17 10:26:29 +01001125negative_group = cfg.OptGroup(name='negative', title="Negative Test Options")
1126
1127NegativeGroup = [
1128 cfg.StrOpt('test_generator',
1129 default='tempest.common.' +
1130 'generator.negative_generator.NegativeTestGenerator',
1131 help="Test generator class for all negative tests"),
1132]
1133
Jon Grimm270bd7f2014-08-05 18:11:29 +00001134_opts = [
1135 (auth_group, AuthGroup),
1136 (compute_group, ComputeGroup),
1137 (compute_features_group, ComputeFeaturesGroup),
1138 (identity_group, IdentityGroup),
1139 (identity_feature_group, IdentityFeatureGroup),
1140 (image_group, ImageGroup),
1141 (image_feature_group, ImageFeaturesGroup),
1142 (network_group, NetworkGroup),
1143 (network_feature_group, NetworkFeaturesGroup),
1144 (messaging_group, MessagingGroup),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +00001145 (validation_group, ValidationGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001146 (volume_group, VolumeGroup),
1147 (volume_feature_group, VolumeFeaturesGroup),
1148 (object_storage_group, ObjectStoreGroup),
1149 (object_storage_feature_group, ObjectStoreFeaturesGroup),
1150 (database_group, DatabaseGroup),
1151 (orchestration_group, OrchestrationGroup),
1152 (telemetry_group, TelemetryGroup),
1153 (dashboard_group, DashboardGroup),
1154 (data_processing_group, DataProcessingGroup),
Luigi Toscano14d172d2015-01-23 16:37:47 +01001155 (data_processing_feature_group, DataProcessingFeaturesGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001156 (boto_group, BotoGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001157 (stress_group, StressGroup),
1158 (scenario_group, ScenarioGroup),
1159 (service_available_group, ServiceAvailableGroup),
1160 (debug_group, DebugGroup),
1161 (baremetal_group, BaremetalGroup),
1162 (input_scenario_group, InputScenarioGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001163 (negative_group, NegativeGroup)
1164]
1165
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001166
Matthew Treinish43b296a2014-02-28 15:23:00 -05001167def register_opts():
Jon Grimm270bd7f2014-08-05 18:11:29 +00001168 for g, o in _opts:
Maru Newbyf440c292015-03-31 15:58:47 +00001169 register_opt_group(_CONF, g, o)
Jon Grimm270bd7f2014-08-05 18:11:29 +00001170
1171
1172def list_opts():
1173 """Return a list of oslo.config options available.
1174
1175 The purpose of this is to allow tools like the Oslo sample config file
1176 generator to discover the options exposed to users.
1177 """
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001178 return [(g.name, o) for g, o in _opts]
Matthew Treinish43b296a2014-02-28 15:23:00 -05001179
1180
Sean Dague3b9b1f32013-12-20 17:04:54 -05001181# this should never be called outside of this class
1182class TempestConfigPrivate(object):
Daryl Walleck1465d612011-11-02 02:22:15 -05001183 """Provides OpenStack configuration information."""
1184
Brian Waldon738cd632011-12-12 18:45:09 -05001185 DEFAULT_CONFIG_DIR = os.path.join(
Zhongyue Luoa1343de2013-01-04 16:21:35 +08001186 os.path.abspath(os.path.dirname(os.path.dirname(__file__))),
Brian Waldon738cd632011-12-12 18:45:09 -05001187 "etc")
Daryl Walleck1465d612011-11-02 02:22:15 -05001188
Brian Waldon738cd632011-12-12 18:45:09 -05001189 DEFAULT_CONFIG_FILE = "tempest.conf"
1190
Andrea Frittolia96ee212014-08-15 18:34:20 +01001191 def __getattr__(self, attr):
1192 # Handles config options from the default group
Maru Newbyf440c292015-03-31 15:58:47 +00001193 return getattr(_CONF, attr)
Andrea Frittolia96ee212014-08-15 18:34:20 +01001194
Matthew Treinish43b296a2014-02-28 15:23:00 -05001195 def _set_attrs(self):
Maru Newbyf440c292015-03-31 15:58:47 +00001196 self.auth = _CONF.auth
1197 self.compute = _CONF.compute
1198 self.compute_feature_enabled = _CONF['compute-feature-enabled']
1199 self.identity = _CONF.identity
1200 self.identity_feature_enabled = _CONF['identity-feature-enabled']
1201 self.image = _CONF.image
1202 self.image_feature_enabled = _CONF['image-feature-enabled']
1203 self.network = _CONF.network
1204 self.network_feature_enabled = _CONF['network-feature-enabled']
Joseph Lanoux2f81cc12015-01-12 16:01:20 +00001205 self.validation = _CONF.validation
Maru Newbyf440c292015-03-31 15:58:47 +00001206 self.volume = _CONF.volume
1207 self.volume_feature_enabled = _CONF['volume-feature-enabled']
1208 self.object_storage = _CONF['object-storage']
1209 self.object_storage_feature_enabled = _CONF[
Matthew Treinishd5c96022013-10-17 21:51:23 +00001210 'object-storage-feature-enabled']
Maru Newbyf440c292015-03-31 15:58:47 +00001211 self.database = _CONF.database
1212 self.orchestration = _CONF.orchestration
1213 self.messaging = _CONF.messaging
1214 self.telemetry = _CONF.telemetry
1215 self.dashboard = _CONF.dashboard
1216 self.data_processing = _CONF.data_processing
1217 self.data_processing_feature_enabled = _CONF[
Luigi Toscano14d172d2015-01-23 16:37:47 +01001218 'data_processing-feature-enabled']
Maru Newbyf440c292015-03-31 15:58:47 +00001219 self.boto = _CONF.boto
1220 self.stress = _CONF.stress
1221 self.scenario = _CONF.scenario
1222 self.service_available = _CONF.service_available
1223 self.debug = _CONF.debug
1224 self.baremetal = _CONF.baremetal
1225 self.input_scenario = _CONF['input-scenario']
Maru Newbyf440c292015-03-31 15:58:47 +00001226 self.negative = _CONF.negative
1227 _CONF.set_default('domain_name', self.identity.admin_domain_name,
1228 group='identity')
1229 _CONF.set_default('alt_domain_name', self.identity.admin_domain_name,
1230 group='identity')
Sean Dague86bd8422013-12-20 09:56:44 -05001231
Joe Gordon28a84ae2014-07-17 15:38:28 +00001232 def __init__(self, parse_conf=True, config_path=None):
Matthew Treinish43b296a2014-02-28 15:23:00 -05001233 """Initialize a configuration from a conf directory and conf file."""
1234 super(TempestConfigPrivate, self).__init__()
1235 config_files = []
1236 failsafe_path = "/etc/tempest/" + self.DEFAULT_CONFIG_FILE
1237
Joe Gordon28a84ae2014-07-17 15:38:28 +00001238 if config_path:
1239 path = config_path
1240 else:
1241 # Environment variables override defaults...
1242 conf_dir = os.environ.get('TEMPEST_CONFIG_DIR',
1243 self.DEFAULT_CONFIG_DIR)
1244 conf_file = os.environ.get('TEMPEST_CONFIG',
1245 self.DEFAULT_CONFIG_FILE)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001246
Joe Gordon28a84ae2014-07-17 15:38:28 +00001247 path = os.path.join(conf_dir, conf_file)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001248
1249 if not os.path.isfile(path):
1250 path = failsafe_path
1251
1252 # only parse the config file if we expect one to exist. This is needed
1253 # to remove an issue with the config file up to date checker.
1254 if parse_conf:
1255 config_files.append(path)
Maru Newbyf440c292015-03-31 15:58:47 +00001256 logging.register_options(_CONF)
Matthew Treinish5440a402014-10-02 14:36:16 -04001257 if os.path.isfile(path):
Maru Newbyf440c292015-03-31 15:58:47 +00001258 _CONF([], project='tempest', default_config_files=config_files)
Matthew Treinish5440a402014-10-02 14:36:16 -04001259 else:
Maru Newbyf440c292015-03-31 15:58:47 +00001260 _CONF([], project='tempest')
1261 logging.setup(_CONF, 'tempest')
Matthew Treinish43b296a2014-02-28 15:23:00 -05001262 LOG = logging.getLogger('tempest')
1263 LOG.info("Using tempest config file %s" % path)
1264 register_opts()
1265 self._set_attrs()
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001266 if parse_conf:
Maru Newbyf440c292015-03-31 15:58:47 +00001267 _CONF.log_opt_values(LOG, std_logging.DEBUG)
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001268
Sean Dague86bd8422013-12-20 09:56:44 -05001269
1270class TempestConfigProxy(object):
1271 _config = None
Joe Gordon28a84ae2014-07-17 15:38:28 +00001272 _path = None
Sean Dague86bd8422013-12-20 09:56:44 -05001273
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001274 _extra_log_defaults = [
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001275 ('paramiko.transport', std_logging.INFO),
1276 ('requests.packages.urllib3.connectionpool', std_logging.WARN),
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001277 ]
1278
1279 def _fix_log_levels(self):
1280 """Tweak the oslo log defaults."""
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001281 for name, level in self._extra_log_defaults:
1282 std_logging.getLogger(name).setLevel(level)
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001283
Sean Dague86bd8422013-12-20 09:56:44 -05001284 def __getattr__(self, attr):
1285 if not self._config:
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001286 self._fix_log_levels()
Joe Gordon28a84ae2014-07-17 15:38:28 +00001287 self._config = TempestConfigPrivate(config_path=self._path)
Sean Dague86bd8422013-12-20 09:56:44 -05001288
1289 return getattr(self._config, attr)
1290
Joe Gordon28a84ae2014-07-17 15:38:28 +00001291 def set_config_path(self, path):
1292 self._path = path
1293
Sean Dague86bd8422013-12-20 09:56:44 -05001294
1295CONF = TempestConfigProxy()