blob: 603ccd279688edd97e96b19e787506671c07fb29 [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"),
436]
Jay Pipesf38eaac2012-06-21 13:37:35 -0400437
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500438network_group = cfg.OptGroup(name='network',
439 title='Network Service Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600440
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500441NetworkGroup = [
442 cfg.StrOpt('catalog_type',
443 default='network',
Mark McClainf2982e82013-07-06 17:48:03 -0400444 help='Catalog type of the Neutron service.'),
Arata Notsu8f440392013-09-13 16:14:20 +0900445 cfg.StrOpt('region',
446 default='',
447 help="The network region name to use. If empty, the value "
448 "of identity.region is used instead. If no such region "
449 "is found in the service catalog, the first found one is "
450 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000451 cfg.StrOpt('endpoint_type',
452 default='publicURL',
453 choices=['public', 'admin', 'internal',
454 'publicURL', 'adminURL', 'internalURL'],
455 help="The endpoint type to use for the network service."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500456 cfg.StrOpt('tenant_network_cidr',
457 default="10.100.0.0/16",
Henry Gessauffda37a2014-01-16 11:17:55 -0500458 help="The cidr block to allocate tenant ipv4 subnets from"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500459 cfg.IntOpt('tenant_network_mask_bits',
Attila Fazekas8ea181b2013-07-13 16:26:14 +0200460 default=28,
Henry Gessauffda37a2014-01-16 11:17:55 -0500461 help="The mask bits for tenant ipv4 subnets"),
462 cfg.StrOpt('tenant_network_v6_cidr',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400463 default="2003::/48",
Henry Gessauffda37a2014-01-16 11:17:55 -0500464 help="The cidr block to allocate tenant ipv6 subnets from"),
465 cfg.IntOpt('tenant_network_v6_mask_bits',
Sergey Shnaidman1f3659a2014-08-27 18:26:42 +0400466 default=64,
Henry Gessauffda37a2014-01-16 11:17:55 -0500467 help="The mask bits for tenant ipv6 subnets"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500468 cfg.BoolOpt('tenant_networks_reachable',
469 default=False,
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000470 help="Whether tenant networks can be reached directly from "
471 "the test client. This must be set to True when the "
472 "'fixed' ssh_connect_method is selected."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500473 cfg.StrOpt('public_network_id',
474 default="",
475 help="Id of the public network that provides external "
476 "connectivity"),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000477 cfg.StrOpt('floating_network_name',
478 help="Default floating network name. Used to allocate floating "
479 "IPs when neutron is enabled."),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500480 cfg.StrOpt('public_router_id',
481 default="",
482 help="Id of the public router that provides external "
Yair Fried1eb27f52014-11-10 15:24:19 +0200483 "connectivity. This should only be used when Neutron's "
484 "'allow_overlapping_ips' is set to 'False' in "
485 "neutron.conf. usually not needed past 'Grizzly' release"),
izikpensod9a01a62014-02-17 20:02:32 +0200486 cfg.IntOpt('build_timeout',
487 default=300,
488 help="Timeout in seconds to wait for network operation to "
489 "complete."),
490 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400491 default=1,
izikpensod9a01a62014-02-17 20:02:32 +0200492 help="Time in seconds between network operation status "
493 "checks."),
Attila Fazekas640392b2014-06-12 15:58:10 +0200494 cfg.ListOpt('dns_servers',
495 default=["8.8.8.8", "8.8.4.4"],
Itzik Brown5be44582014-12-24 09:05:13 +0200496 help="List of dns servers which should be used"
Itzik Brown2ca01cd2014-12-08 12:58:20 +0200497 " for subnet creation"),
498 cfg.StrOpt('port_vnic_type',
499 choices=[None, 'normal', 'direct', 'macvtap'],
500 help="vnic_type to use when Launching instances"
501 " with pre-configured ports."
502 " Supported ports are:"
503 " ['normal','direct','macvtap']"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500504]
Jay Pipes3f981df2012-03-27 18:59:44 -0400505
Matthew Treinishe3d26142013-11-26 19:14:58 +0000506network_feature_group = cfg.OptGroup(name='network-feature-enabled',
507 title='Enabled network service features')
508
509NetworkFeaturesGroup = [
Matthew Treinishe2e33cf2014-03-03 19:28:41 +0000510 cfg.BoolOpt('ipv6',
511 default=True,
512 help="Allow the execution of IPv6 tests"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000513 cfg.ListOpt('api_extensions',
514 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800515 help='A list of enabled network extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300516 'entry all which indicates every extension is enabled. '
517 'Empty list indicates all extensions are disabled'),
Sean M. Collinsdd27a4d2014-05-13 10:33:15 -0400518 cfg.BoolOpt('ipv6_subnet_attributes',
519 default=False,
520 help="Allow the execution of IPv6 subnet tests that use "
521 "the extended IPv6 attributes ipv6_ra_mode "
522 "and ipv6_address_mode"
Mark McClain6e07c0d2014-10-10 11:25:03 -0400523 ),
Itzik Brownbeb30d32015-03-29 09:42:54 +0300524 cfg.BoolOpt('port_admin_state_change',
525 default=True,
526 help="Does the test environment support changing"
527 " port admin state"),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000528]
529
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300530messaging_group = cfg.OptGroup(name='messaging',
531 title='Messaging Service')
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500532
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300533MessagingGroup = [
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500534 cfg.StrOpt('catalog_type',
Victoria Martínez de la Cruz1173b6e2014-09-22 18:32:13 -0300535 default='messaging',
536 help='Catalog type of the Messaging service.'),
Jorge Chai83ba4ee2014-04-15 18:58:08 +0000537 cfg.IntOpt('max_queues_per_page',
538 default=20,
539 help='The maximum number of queue records per page when '
540 'listing queues'),
Malini Kamalambal7458b4b2014-05-29 11:47:28 -0400541 cfg.IntOpt('max_queue_metadata',
542 default=65536,
543 help='The maximum metadata size for a queue'),
544 cfg.IntOpt('max_messages_per_page',
545 default=20,
546 help='The maximum number of queue message per page when '
547 'listing (or) posting messages'),
548 cfg.IntOpt('max_message_size',
549 default=262144,
550 help='The maximum size of a message body'),
551 cfg.IntOpt('max_messages_per_claim',
552 default=20,
553 help='The maximum number of messages per claim'),
554 cfg.IntOpt('max_message_ttl',
555 default=1209600,
556 help='The maximum ttl for a message'),
557 cfg.IntOpt('max_claim_ttl',
558 default=43200,
559 help='The maximum ttl for a claim'),
560 cfg.IntOpt('max_claim_grace',
561 default=43200,
562 help='The maximum grace period for a claim'),
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -0500563]
564
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000565validation_group = cfg.OptGroup(name='validation',
566 title='SSH Validation options')
567
568ValidationGroup = [
Matthew Treinishe5cca002015-05-11 15:36:50 -0400569 cfg.BoolOpt('run_validation',
570 default=False,
571 help='Enable ssh on created servers and creation of additional'
572 ' validation resources to enable remote access',
573 deprecated_opts=[cfg.DeprecatedOpt('run_ssh',
574 group='compute')]),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +0000575 cfg.StrOpt('connect_method',
576 default='floating',
577 choices=['fixed', 'floating'],
578 help='Default IP type used for validation: '
579 '-fixed: uses the first IP belonging to the fixed network '
580 '-floating: creates and uses a floating IP'),
581 cfg.StrOpt('auth_method',
582 default='keypair',
583 choices=['keypair'],
584 help='Default authentication method to the instance. '
585 'Only ssh via keypair is supported for now. '
586 'Additional methods will be handled in a separate spec.'),
587 cfg.IntOpt('ip_version_for_ssh',
588 default=4,
589 help='Default IP version for ssh connections.'),
590 cfg.IntOpt('ping_timeout',
591 default=120,
592 help='Timeout in seconds to wait for ping to succeed.'),
593 cfg.IntOpt('connect_timeout',
594 default=60,
595 help='Timeout in seconds to wait for the TCP connection to be '
596 'successful.'),
597 cfg.IntOpt('ssh_timeout',
598 default=300,
599 help='Timeout in seconds to wait for the ssh banner.'),
600]
601
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500602volume_group = cfg.OptGroup(name='volume',
603 title='Block Storage Options')
Daryl Walleck587385b2012-03-03 13:00:26 -0600604
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500605VolumeGroup = [
606 cfg.IntOpt('build_interval',
Sean Dague82190852014-05-24 07:42:59 -0400607 default=1,
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500608 help='Time in seconds between volume availability checks.'),
609 cfg.IntOpt('build_timeout',
610 default=300,
Eric Harney9b1f89c2014-10-14 14:40:19 -0400611 help='Timeout in seconds to wait for a volume to become '
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500612 'available.'),
613 cfg.StrOpt('catalog_type',
Matthew Treinisheb724512013-10-25 15:12:59 +0000614 default='volume',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500615 help="Catalog type of the Volume Service"),
Arata Notsu8f440392013-09-13 16:14:20 +0900616 cfg.StrOpt('region',
617 default='',
618 help="The volume region name to use. If empty, the value "
619 "of identity.region is used instead. If no such region "
620 "is found in the service catalog, the first found one is "
621 "used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000622 cfg.StrOpt('endpoint_type',
623 default='publicURL',
624 choices=['public', 'admin', 'internal',
625 'publicURL', 'adminURL', 'internalURL'],
626 help="The endpoint type to use for the volume service."),
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100627 cfg.StrOpt('backend1_name',
Giulio Fidentef4fa8942013-05-28 18:48:03 +0200628 default='BACKEND_1',
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100629 help="Name of the backend1 (must be declared in cinder.conf)"),
630 cfg.StrOpt('backend2_name',
Giulio Fidentef4fa8942013-05-28 18:48:03 +0200631 default='BACKEND_2',
Jérôme Gallard86551ce2013-03-08 11:41:26 +0100632 help="Name of the backend2 (must be declared in cinder.conf)"),
Adam Gandelman827ad332013-06-24 17:04:09 -0700633 cfg.StrOpt('storage_protocol',
634 default='iSCSI',
635 help='Backend protocol to target when creating volume types'),
636 cfg.StrOpt('vendor_name',
637 default='Open Source',
638 help='Backend vendor to target when creating volume types'),
Ryan Hsua67f4632013-08-29 16:03:06 -0700639 cfg.StrOpt('disk_format',
640 default='raw',
641 help='Disk format to use when copying a volume to image'),
Jerry Cai9733d0e2014-03-19 15:50:49 +0800642 cfg.IntOpt('volume_size',
643 default=1,
644 help='Default size in GB for volumes created by volumes tests'),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500645]
K Jonathan Harkerd6ba4b42012-12-18 13:50:47 -0800646
Matthew Treinishd5c96022013-10-17 21:51:23 +0000647volume_feature_group = cfg.OptGroup(name='volume-feature-enabled',
648 title='Enabled Cinder Features')
649
650VolumeFeaturesGroup = [
651 cfg.BoolOpt('multi_backend',
652 default=False,
Matthew Treinishe3d26142013-11-26 19:14:58 +0000653 help="Runs Cinder multi-backend test (requires 2 backends)"),
Giulio Fidente74b08ad2014-01-18 04:02:51 +0100654 cfg.BoolOpt('backup',
655 default=True,
656 help='Runs Cinder volumes backup test'),
JordanPbce55532014-03-19 12:10:32 +0100657 cfg.BoolOpt('snapshot',
658 default=True,
659 help='Runs Cinder volume snapshot test'),
Matthew Treinishe3d26142013-11-26 19:14:58 +0000660 cfg.ListOpt('api_extensions',
661 default=['all'],
Zhi Kun Liude25c022014-02-14 13:25:19 +0800662 help='A list of enabled volume extensions with a special '
Simeon Monov5d7effe2014-07-16 07:32:38 +0300663 'entry all which indicates every extension is enabled. '
664 'Empty list indicates all extensions are disabled'),
Zhi Kun Liubb363a22013-11-28 18:47:39 +0800665 cfg.BoolOpt('api_v1',
666 default=True,
667 help="Is the v1 volume API enabled"),
Zhi Kun Liu8cc3c842014-01-07 10:44:34 +0800668 cfg.BoolOpt('api_v2',
669 default=True,
670 help="Is the v2 volume API enabled"),
bkopilov8a657ae2015-05-11 11:45:23 +0300671 cfg.BoolOpt('bootable',
672 default=False,
673 help='Update bootable status of a volume '
674 'Not implemented on icehouse ')
Matthew Treinishd5c96022013-10-17 21:51:23 +0000675]
676
Daryl Walleck587385b2012-03-03 13:00:26 -0600677
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500678object_storage_group = cfg.OptGroup(name='object-storage',
679 title='Object Storage Service Options')
Attila Fazekasa23f5002012-10-23 19:32:45 +0200680
DennyZhang1e71b612013-09-26 12:35:40 -0500681ObjectStoreGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500682 cfg.StrOpt('catalog_type',
683 default='object-store',
684 help="Catalog type of the Object-Storage service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900685 cfg.StrOpt('region',
686 default='',
687 help="The object-storage region name to use. If empty, the "
688 "value of identity.region is used instead. If no such "
689 "region is found in the service catalog, the first found "
690 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000691 cfg.StrOpt('endpoint_type',
692 default='publicURL',
693 choices=['public', 'admin', 'internal',
694 'publicURL', 'adminURL', 'internalURL'],
695 help="The endpoint type to use for the object-store service."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000696 cfg.IntOpt('container_sync_timeout',
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900697 default=600,
Fabien Boucher2178d312013-12-31 15:38:57 +0100698 help="Number of seconds to time on waiting for a container "
nayna-patelb4989b32013-01-09 06:25:13 +0000699 "to container synchronization complete."),
Matthew Treinishf319a732013-10-24 21:39:24 +0000700 cfg.IntOpt('container_sync_interval',
nayna-patelb4989b32013-01-09 06:25:13 +0000701 default=5,
Fabien Boucher2178d312013-12-31 15:38:57 +0100702 help="Number of seconds to wait while looping to check the "
nayna-patelb4989b32013-01-09 06:25:13 +0000703 "status of a container to container synchronization"),
Matthew Treinish3fdb80c2013-08-15 11:13:19 -0400704 cfg.StrOpt('operator_role',
705 default='Member',
706 help="Role to add to users created for swift tests to "
707 "enable creating containers"),
Matthew Treinish998c91d2014-03-01 12:39:49 -0500708 cfg.StrOpt('reseller_admin_role',
709 default='ResellerAdmin',
710 help="User role that has reseller admin"),
Daisuke Morita1ac3ee02014-08-25 12:59:18 +0900711 cfg.StrOpt('realm_name',
712 default='realm1',
713 help="Name of sync realm. A sync realm is a set of clusters "
714 "that have agreed to allow container syncing with each "
715 "other. Set the same realm name as Swift's "
716 "container-sync-realms.conf"),
717 cfg.StrOpt('cluster_name',
718 default='name1',
719 help="One name of cluster which is set in the realm whose name "
720 "is set in 'realm_name' item in this file. Set the "
721 "same cluster name as Swift's container-sync-realms.conf"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500722]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200723
Matthew Treinishd5c96022013-10-17 21:51:23 +0000724object_storage_feature_group = cfg.OptGroup(
725 name='object-storage-feature-enabled',
726 title='Enabled object-storage features')
727
728ObjectStoreFeaturesGroup = [
Matthew Treinish20345382013-12-13 17:04:23 +0000729 cfg.ListOpt('discoverable_apis',
730 default=['all'],
731 help="A list of the enabled optional discoverable apis. "
732 "A single entry, all, indicates that all of these "
733 "features are expected to be enabled"),
Daisuke Morita20a183f2014-08-25 14:43:36 +0900734 cfg.BoolOpt('container_sync',
735 default=True,
736 help="Execute (old style) container-sync tests"),
737 cfg.BoolOpt('object_versioning',
738 default=True,
739 help="Execute object-versioning tests"),
740 cfg.BoolOpt('discoverability',
741 default=True,
742 help="Execute discoverability tests"),
Matthew Treinishd5c96022013-10-17 21:51:23 +0000743]
744
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800745database_group = cfg.OptGroup(name='database',
746 title='Database Service Options')
747
748DatabaseGroup = [
749 cfg.StrOpt('catalog_type',
750 default='database',
751 help="Catalog type of the Database service."),
752 cfg.StrOpt('db_flavor_ref',
753 default="1",
754 help="Valid primary flavor to use in database tests."),
Peter Stachowski320f9c72014-04-21 16:13:23 -0400755 cfg.StrOpt('db_current_version',
756 default="v1.0",
757 help="Current database version to use in database tests."),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -0800758]
Attila Fazekasa23f5002012-10-23 19:32:45 +0200759
Steve Bakerc60e4e32013-05-06 15:22:41 +1200760orchestration_group = cfg.OptGroup(name='orchestration',
761 title='Orchestration Service Options')
762
763OrchestrationGroup = [
764 cfg.StrOpt('catalog_type',
765 default='orchestration',
766 help="Catalog type of the Orchestration service."),
Arata Notsu8f440392013-09-13 16:14:20 +0900767 cfg.StrOpt('region',
768 default='',
769 help="The orchestration region name to use. If empty, the "
770 "value of identity.region is used instead. If no such "
771 "region is found in the service catalog, the first found "
772 "one is used."),
JordanP5d29b2c2013-12-18 13:56:03 +0000773 cfg.StrOpt('endpoint_type',
774 default='publicURL',
775 choices=['public', 'admin', 'internal',
776 'publicURL', 'adminURL', 'internalURL'],
777 help="The endpoint type to use for the orchestration service."),
Matthew Treinishdb9721d2015-03-18 14:21:28 -0400778 cfg.StrOpt('stack_owner_role', default='heat_stack_owner',
779 help='Role required for users to be able to manage stacks'),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200780 cfg.IntOpt('build_interval',
781 default=1,
782 help="Time in seconds between build status checks."),
783 cfg.IntOpt('build_timeout',
Matthew Treinisha2dfd492014-04-15 11:15:34 -0400784 default=1200,
Steve Bakerc60e4e32013-05-06 15:22:41 +1200785 help="Timeout in seconds to wait for a stack to build."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200786 cfg.StrOpt('instance_type',
Steve Baker9e86b832013-05-22 15:40:28 +1200787 default='m1.micro',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200788 help="Instance type for tests. Needs to be big enough for a "
789 "full OS plus the test workload"),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200790 cfg.StrOpt('keypair_name',
Steve Bakerc60e4e32013-05-06 15:22:41 +1200791 help="Name of existing keypair to launch servers with."),
Clint Byrum71f27632013-09-09 11:41:32 -0700792 cfg.IntOpt('max_template_size',
Joe Gordon0e51b222013-10-24 14:11:10 +0100793 default=524288,
Clint Byrum71f27632013-09-09 11:41:32 -0700794 help="Value must match heat configuration of the same name."),
Steven Hardyfdc6bd72014-03-21 16:56:04 +0000795 cfg.IntOpt('max_resources_per_stack',
796 default=1000,
797 help="Value must match heat configuration of the same name."),
Steve Bakerc60e4e32013-05-06 15:22:41 +1200798]
799
800
Yassine Lamgarchalb158d412013-12-27 19:29:42 +0100801telemetry_group = cfg.OptGroup(name='telemetry',
802 title='Telemetry Service Options')
803
804TelemetryGroup = [
805 cfg.StrOpt('catalog_type',
806 default='metering',
807 help="Catalog type of the Telemetry service."),
JordanPfc62c902014-02-26 14:47:28 +0000808 cfg.StrOpt('endpoint_type',
809 default='publicURL',
810 choices=['public', 'admin', 'internal',
811 'publicURL', 'adminURL', 'internalURL'],
812 help="The endpoint type to use for the telemetry service."),
Vadim Rovachev7bcea352013-12-26 15:56:17 +0400813 cfg.BoolOpt('too_slow_to_test',
814 default=True,
815 help="This variable is used as flag to enable "
816 "notification tests")
Yassine Lamgarchalb158d412013-12-27 19:29:42 +0100817]
818
819
Julie Pichond1017642013-07-24 16:37:23 +0100820dashboard_group = cfg.OptGroup(name="dashboard",
821 title="Dashboard options")
822
823DashboardGroup = [
824 cfg.StrOpt('dashboard_url',
825 default='http://localhost/',
826 help="Where the dashboard can be found"),
827 cfg.StrOpt('login_url',
828 default='http://localhost/auth/login/',
829 help="Login page for the dashboard"),
830]
831
832
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400833data_processing_group = cfg.OptGroup(name="data_processing",
834 title="Data Processing options")
835
836DataProcessingGroup = [
837 cfg.StrOpt('catalog_type',
838 default='data_processing',
JordanPfc62c902014-02-26 14:47:28 +0000839 help="Catalog type of the data processing service."),
840 cfg.StrOpt('endpoint_type',
841 default='publicURL',
842 choices=['public', 'admin', 'internal',
843 'publicURL', 'adminURL', 'internalURL'],
844 help="The endpoint type to use for the data processing "
845 "service."),
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +0400846]
847
848
Luigi Toscano14d172d2015-01-23 16:37:47 +0100849data_processing_feature_group = cfg.OptGroup(
850 name="data_processing-feature-enabled",
851 title="Enabled Data Processing features")
852
853DataProcessingFeaturesGroup = [
854 cfg.ListOpt('plugins',
855 default=["vanilla", "hdp"],
856 help="List of enabled data processing plugins")
857]
858
859
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500860boto_group = cfg.OptGroup(name='boto',
861 title='EC2/S3 options')
DennyZhang1e71b612013-09-26 12:35:40 -0500862BotoGroup = [
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500863 cfg.StrOpt('ec2_url',
864 default="http://localhost:8773/services/Cloud",
865 help="EC2 URL"),
866 cfg.StrOpt('s3_url',
867 default="http://localhost:8080",
868 help="S3 URL"),
869 cfg.StrOpt('aws_secret',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500870 help="AWS Secret Key",
871 secret=True),
872 cfg.StrOpt('aws_access',
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500873 help="AWS Access Key"),
Attila Fazekas27dd92e2014-02-21 14:49:40 +0100874 cfg.StrOpt('aws_zone',
875 default="nova",
876 help="AWS Zone for EC2 tests"),
Matthew Treinish39e48ef2012-12-21 13:36:15 -0500877 cfg.StrOpt('s3_materials_path',
878 default="/opt/stack/devstack/files/images/"
879 "s3-materials/cirros-0.3.0",
880 help="S3 Materials Path"),
881 cfg.StrOpt('ari_manifest',
882 default="cirros-0.3.0-x86_64-initrd.manifest.xml",
883 help="ARI Ramdisk Image manifest"),
884 cfg.StrOpt('ami_manifest',
885 default="cirros-0.3.0-x86_64-blank.img.manifest.xml",
886 help="AMI Machine Image manifest"),
887 cfg.StrOpt('aki_manifest',
888 default="cirros-0.3.0-x86_64-vmlinuz.manifest.xml",
889 help="AKI Kernel Image manifest"),
890 cfg.StrOpt('instance_type',
891 default="m1.tiny",
892 help="Instance type"),
893 cfg.IntOpt('http_socket_timeout',
894 default=3,
895 help="boto Http socket timeout"),
896 cfg.IntOpt('num_retries',
897 default=1,
898 help="boto num_retries on error"),
899 cfg.IntOpt('build_timeout',
900 default=60,
901 help="Status Change Timeout"),
902 cfg.IntOpt('build_interval',
903 default=1,
904 help="Status Change Test Interval"),
905]
Attila Fazekasf7f2d932012-12-13 09:14:38 +0100906
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500907stress_group = cfg.OptGroup(name='stress', title='Stress Test Options')
908
909StressGroup = [
910 cfg.StrOpt('nova_logdir',
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500911 help='Directory containing log files on the compute nodes'),
912 cfg.IntOpt('max_instances',
913 default=16,
914 help='Maximum number of instances to create during test.'),
915 cfg.StrOpt('controller',
David Kranzb9d97502013-05-01 15:55:04 -0400916 help='Controller host.'),
917 # new stress options
918 cfg.StrOpt('target_controller',
David Kranzb9d97502013-05-01 15:55:04 -0400919 help='Controller host.'),
920 cfg.StrOpt('target_ssh_user',
David Kranzb9d97502013-05-01 15:55:04 -0400921 help='ssh user.'),
922 cfg.StrOpt('target_private_key_path',
David Kranzb9d97502013-05-01 15:55:04 -0400923 help='Path to private key.'),
924 cfg.StrOpt('target_logfiles',
David Kranzb9d97502013-05-01 15:55:04 -0400925 help='regexp for list of log files.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000926 cfg.IntOpt('log_check_interval',
David Kranzb9d97502013-05-01 15:55:04 -0400927 default=60,
Marc Koderer32221b8e2013-08-23 13:57:50 +0200928 help='time (in seconds) between log file error checks.'),
Matthew Treinishf319a732013-10-24 21:39:24 +0000929 cfg.IntOpt('default_thread_number_per_action',
Marc Koderer32221b8e2013-08-23 13:57:50 +0200930 default=4,
Julien Leloup04d40f72014-01-28 11:17:18 +0100931 help='The number of threads created while stress test.'),
932 cfg.BoolOpt('leave_dirty_stack',
933 default=False,
934 help='Prevent the cleaning (tearDownClass()) between'
935 ' each stress test run if an exception occurs'
Julien Leloupa5ee5422014-02-13 14:29:02 +0100936 ' during this run.'),
937 cfg.BoolOpt('full_clean_stack',
938 default=False,
939 help='Allows a full cleaning process after a stress test.'
940 ' Caution : this cleanup will remove every objects of'
941 ' every tenant.')
Matthew Treinish615ea6a2013-02-25 17:26:59 -0500942]
943
944
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900945scenario_group = cfg.OptGroup(name='scenario', title='Scenario Test Options')
946
947ScenarioGroup = [
948 cfg.StrOpt('img_dir',
949 default='/opt/stack/new/devstack/files/images/'
950 'cirros-0.3.1-x86_64-uec',
951 help='Directory containing image files'),
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300952 cfg.StrOpt('img_file', deprecated_name='qcow2_img_file',
Masayuki Igawa4f71bf02014-02-21 14:02:29 +0900953 default='cirros-0.3.1-x86_64-disk.img',
Alessandro Pilottib7c1daa2014-08-16 14:24:13 +0300954 help='Image file name'),
955 cfg.StrOpt('img_disk_format',
956 default='qcow2',
957 help='Image disk format'),
958 cfg.StrOpt('img_container_format',
959 default='bare',
960 help='Image container format'),
Evgeny Antyshev7ba0d5f2015-04-28 13:18:07 +0000961 cfg.DictOpt('img_properties', help='Glance image properties. '
962 'Use for custom images which require them'),
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900963 cfg.StrOpt('ami_img_file',
964 default='cirros-0.3.1-x86_64-blank.img',
965 help='AMI image file name'),
966 cfg.StrOpt('ari_img_file',
967 default='cirros-0.3.1-x86_64-initrd',
968 help='ARI image file name'),
969 cfg.StrOpt('aki_img_file',
970 default='cirros-0.3.1-x86_64-vmlinuz',
971 help='AKI image file name'),
972 cfg.StrOpt('ssh_user',
973 default='cirros',
Joe Gordonb5e10cd2013-07-10 15:51:12 +0000974 help='ssh username for the image file'),
975 cfg.IntOpt(
976 'large_ops_number',
977 default=0,
978 help="specifies how many resources to request at once. Used "
Yair Fried413bf2d2014-11-19 17:07:11 +0200979 "for large operations testing."),
980 # TODO(yfried): add support for dhcpcd
981 cfg.StrOpt('dhcp_client',
982 default='udhcpc',
983 choices=["udhcpc", "dhclient"],
984 help='DHCP client used by images to renew DCHP lease. '
985 'If left empty, update operation will be skipped. '
986 'Supported clients: "udhcpc", "dhclient"')
Masayuki Igawa73d9f3a2013-05-24 10:30:01 +0900987]
988
989
Matthew Treinish4c412922013-07-16 15:27:42 -0400990service_available_group = cfg.OptGroup(name="service_available",
991 title="Available OpenStack Services")
992
993ServiceAvailableGroup = [
994 cfg.BoolOpt('cinder',
995 default=True,
996 help="Whether or not cinder is expected to be available"),
Matthew Treinishfaa340d2013-07-19 16:26:21 -0400997 cfg.BoolOpt('neutron',
998 default=False,
999 help="Whether or not neutron is expected to be available"),
Matthew Treinish853ae442013-07-19 16:36:07 -04001000 cfg.BoolOpt('glance',
1001 default=True,
1002 help="Whether or not glance is expected to be available"),
Matthew Treinish61e332b2013-07-19 16:42:31 -04001003 cfg.BoolOpt('swift',
1004 default=True,
1005 help="Whether or not swift is expected to be available"),
Matthew Treinish6b41e242013-07-19 16:49:28 -04001006 cfg.BoolOpt('nova',
1007 default=True,
1008 help="Whether or not nova is expected to be available"),
Matthew Treinisha9d43882013-07-19 16:54:52 -04001009 cfg.BoolOpt('heat',
1010 default=False,
1011 help="Whether or not Heat is expected to be available"),
Mehdi Abaakouk8581c0b2013-10-04 10:45:42 +02001012 cfg.BoolOpt('ceilometer',
1013 default=True,
1014 help="Whether or not Ceilometer is expected to be available"),
Julie Pichond1017642013-07-24 16:37:23 +01001015 cfg.BoolOpt('horizon',
1016 default=True,
1017 help="Whether or not Horizon is expected to be available"),
Sergey Lukjanov9c95a252014-03-13 23:59:22 +04001018 cfg.BoolOpt('sahara',
Sergey Lukjanovcec6c3f2013-12-10 12:38:21 +04001019 default=False,
Sergey Lukjanov9c95a252014-03-13 23:59:22 +04001020 help="Whether or not Sahara is expected to be available"),
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001021 cfg.BoolOpt('ironic',
1022 default=False,
1023 help="Whether or not Ironic is expected to be available"),
Nikhil Manchandadd6886f2014-03-03 01:58:45 -08001024 cfg.BoolOpt('trove',
1025 default=False,
1026 help="Whether or not Trove is expected to be available"),
Malini Kamalambal8681e922014-08-18 10:10:45 -04001027 cfg.BoolOpt('zaqar',
Malini Kamalambal6e7b3b82014-02-06 06:49:04 -05001028 default=False,
Malini Kamalambal8681e922014-08-18 10:10:45 -04001029 help="Whether or not Zaqar is expected to be available"),
Matthew Treinish4c412922013-07-16 15:27:42 -04001030]
1031
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001032debug_group = cfg.OptGroup(name="debug",
1033 title="Debug System")
1034
1035DebugGroup = [
Sean Daguec522c092014-03-24 10:43:22 -04001036 cfg.StrOpt('trace_requests',
1037 default='',
1038 help="""A regex to determine which requests should be traced.
1039
1040This is a regex to match the caller for rest client requests to be able to
1041selectively trace calls out of specific classes and methods. It largely
1042exists for test development, and is not expected to be used in a real deploy
1043of tempest. This will be matched against the discovered ClassName:method
1044in the test environment.
1045
1046Expected values for this field are:
1047
1048 * ClassName:test_method_name - traces one test_method
1049 * ClassName:setUp(Class) - traces specific setup functions
1050 * ClassName:tearDown(Class) - traces specific teardown functions
1051 * ClassName:_run_cleanups - traces the cleanup functions
1052
1053If nothing is specified, this feature is not enabled. To trace everything
1054specify .* as the regex.
1055""")
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001056]
1057
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001058input_scenario_group = cfg.OptGroup(name="input-scenario",
1059 title="Filters and values for"
1060 " input scenarios")
1061
1062InputScenarioGroup = [
1063 cfg.StrOpt('image_regex',
1064 default='^cirros-0.3.1-x86_64-uec$',
1065 help="Matching images become parameters for scenario tests"),
1066 cfg.StrOpt('flavor_regex',
Andrea Frittoli99901c02014-01-30 18:06:49 +00001067 default='^m1.nano$',
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001068 help="Matching flavors become parameters for scenario tests"),
1069 cfg.StrOpt('non_ssh_image_regex',
1070 default='^.*[Ww]in.*$',
1071 help="SSH verification in tests is skipped"
1072 "for matching images"),
1073 cfg.StrOpt('ssh_user_regex',
Marc Koderer07f5a522015-03-27 15:02:41 +01001074 default="[[\"^.*[Cc]irros.*$\", \"cirros\"]]",
Andrea Frittolif5da28b2013-12-06 07:08:07 +00001075 help="List of user mapped to regex "
1076 "to matching image names."),
1077]
1078
Attila Fazekasaeeeefd2013-08-06 17:01:56 +02001079
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001080baremetal_group = cfg.OptGroup(name='baremetal',
Chris Hoge8f1401b2014-11-19 14:00:37 -08001081 title='Baremetal provisioning service options',
1082 help='When enabling baremetal tests, Nova '
1083 'must be configured to use the Ironic '
1084 'driver. The following paremeters for the '
1085 '[compute] section must be disabled: '
1086 'console_output, interface_attach, '
1087 'live_migration, pause, rescue, resize '
1088 'shelve, snapshot, and suspend')
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001089
1090BaremetalGroup = [
1091 cfg.StrOpt('catalog_type',
1092 default='baremetal',
Adam Gandelman4a48a602014-03-20 18:23:18 -07001093 help="Catalog type of the baremetal provisioning service"),
1094 cfg.BoolOpt('driver_enabled',
1095 default=False,
1096 help="Whether the Ironic nova-compute driver is enabled"),
Yuiko Takada1ee1b322014-07-04 09:55:30 +09001097 cfg.StrOpt('driver',
1098 default='fake',
1099 help="Driver name which Ironic uses"),
JordanPfc62c902014-02-26 14:47:28 +00001100 cfg.StrOpt('endpoint_type',
1101 default='publicURL',
1102 choices=['public', 'admin', 'internal',
1103 'publicURL', 'adminURL', 'internalURL'],
1104 help="The endpoint type to use for the baremetal provisioning "
Adam Gandelman4a48a602014-03-20 18:23:18 -07001105 "service"),
1106 cfg.IntOpt('active_timeout',
1107 default=300,
1108 help="Timeout for Ironic node to completely provision"),
1109 cfg.IntOpt('association_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001110 default=30,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001111 help="Timeout for association of Nova instance and Ironic "
1112 "node"),
1113 cfg.IntOpt('power_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001114 default=60,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001115 help="Timeout for Ironic power transitions."),
1116 cfg.IntOpt('unprovision_timeout',
Adam Gandelmane42f0922014-06-10 15:26:37 -07001117 default=60,
Adam Gandelman4a48a602014-03-20 18:23:18 -07001118 help="Timeout for unprovisioning an Ironic node.")
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001119]
1120
Marc Koderer6ee82dc2014-02-17 10:26:29 +01001121negative_group = cfg.OptGroup(name='negative', title="Negative Test Options")
1122
1123NegativeGroup = [
1124 cfg.StrOpt('test_generator',
1125 default='tempest.common.' +
1126 'generator.negative_generator.NegativeTestGenerator',
1127 help="Test generator class for all negative tests"),
1128]
1129
Jon Grimm270bd7f2014-08-05 18:11:29 +00001130_opts = [
1131 (auth_group, AuthGroup),
1132 (compute_group, ComputeGroup),
1133 (compute_features_group, ComputeFeaturesGroup),
1134 (identity_group, IdentityGroup),
1135 (identity_feature_group, IdentityFeatureGroup),
1136 (image_group, ImageGroup),
1137 (image_feature_group, ImageFeaturesGroup),
1138 (network_group, NetworkGroup),
1139 (network_feature_group, NetworkFeaturesGroup),
1140 (messaging_group, MessagingGroup),
Joseph Lanoux2f81cc12015-01-12 16:01:20 +00001141 (validation_group, ValidationGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001142 (volume_group, VolumeGroup),
1143 (volume_feature_group, VolumeFeaturesGroup),
1144 (object_storage_group, ObjectStoreGroup),
1145 (object_storage_feature_group, ObjectStoreFeaturesGroup),
1146 (database_group, DatabaseGroup),
1147 (orchestration_group, OrchestrationGroup),
1148 (telemetry_group, TelemetryGroup),
1149 (dashboard_group, DashboardGroup),
1150 (data_processing_group, DataProcessingGroup),
Luigi Toscano14d172d2015-01-23 16:37:47 +01001151 (data_processing_feature_group, DataProcessingFeaturesGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001152 (boto_group, BotoGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001153 (stress_group, StressGroup),
1154 (scenario_group, ScenarioGroup),
1155 (service_available_group, ServiceAvailableGroup),
1156 (debug_group, DebugGroup),
1157 (baremetal_group, BaremetalGroup),
1158 (input_scenario_group, InputScenarioGroup),
Jon Grimm270bd7f2014-08-05 18:11:29 +00001159 (negative_group, NegativeGroup)
1160]
1161
Roman Prykhodchenko62b1ed12013-10-16 21:51:47 +03001162
Matthew Treinish43b296a2014-02-28 15:23:00 -05001163def register_opts():
Jon Grimm270bd7f2014-08-05 18:11:29 +00001164 for g, o in _opts:
Maru Newbyf440c292015-03-31 15:58:47 +00001165 register_opt_group(_CONF, g, o)
Jon Grimm270bd7f2014-08-05 18:11:29 +00001166
1167
1168def list_opts():
1169 """Return a list of oslo.config options available.
1170
1171 The purpose of this is to allow tools like the Oslo sample config file
1172 generator to discover the options exposed to users.
1173 """
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001174 return [(g.name, o) for g, o in _opts]
Matthew Treinish43b296a2014-02-28 15:23:00 -05001175
1176
Sean Dague3b9b1f32013-12-20 17:04:54 -05001177# this should never be called outside of this class
1178class TempestConfigPrivate(object):
Daryl Walleck1465d612011-11-02 02:22:15 -05001179 """Provides OpenStack configuration information."""
1180
Brian Waldon738cd632011-12-12 18:45:09 -05001181 DEFAULT_CONFIG_DIR = os.path.join(
Zhongyue Luoa1343de2013-01-04 16:21:35 +08001182 os.path.abspath(os.path.dirname(os.path.dirname(__file__))),
Brian Waldon738cd632011-12-12 18:45:09 -05001183 "etc")
Daryl Walleck1465d612011-11-02 02:22:15 -05001184
Brian Waldon738cd632011-12-12 18:45:09 -05001185 DEFAULT_CONFIG_FILE = "tempest.conf"
1186
Andrea Frittolia96ee212014-08-15 18:34:20 +01001187 def __getattr__(self, attr):
1188 # Handles config options from the default group
Maru Newbyf440c292015-03-31 15:58:47 +00001189 return getattr(_CONF, attr)
Andrea Frittolia96ee212014-08-15 18:34:20 +01001190
Matthew Treinish43b296a2014-02-28 15:23:00 -05001191 def _set_attrs(self):
Maru Newbyf440c292015-03-31 15:58:47 +00001192 self.auth = _CONF.auth
1193 self.compute = _CONF.compute
1194 self.compute_feature_enabled = _CONF['compute-feature-enabled']
1195 self.identity = _CONF.identity
1196 self.identity_feature_enabled = _CONF['identity-feature-enabled']
1197 self.image = _CONF.image
1198 self.image_feature_enabled = _CONF['image-feature-enabled']
1199 self.network = _CONF.network
1200 self.network_feature_enabled = _CONF['network-feature-enabled']
Joseph Lanoux2f81cc12015-01-12 16:01:20 +00001201 self.validation = _CONF.validation
Maru Newbyf440c292015-03-31 15:58:47 +00001202 self.volume = _CONF.volume
1203 self.volume_feature_enabled = _CONF['volume-feature-enabled']
1204 self.object_storage = _CONF['object-storage']
1205 self.object_storage_feature_enabled = _CONF[
Matthew Treinishd5c96022013-10-17 21:51:23 +00001206 'object-storage-feature-enabled']
Maru Newbyf440c292015-03-31 15:58:47 +00001207 self.database = _CONF.database
1208 self.orchestration = _CONF.orchestration
1209 self.messaging = _CONF.messaging
1210 self.telemetry = _CONF.telemetry
1211 self.dashboard = _CONF.dashboard
1212 self.data_processing = _CONF.data_processing
1213 self.data_processing_feature_enabled = _CONF[
Luigi Toscano14d172d2015-01-23 16:37:47 +01001214 'data_processing-feature-enabled']
Maru Newbyf440c292015-03-31 15:58:47 +00001215 self.boto = _CONF.boto
1216 self.stress = _CONF.stress
1217 self.scenario = _CONF.scenario
1218 self.service_available = _CONF.service_available
1219 self.debug = _CONF.debug
1220 self.baremetal = _CONF.baremetal
1221 self.input_scenario = _CONF['input-scenario']
Maru Newbyf440c292015-03-31 15:58:47 +00001222 self.negative = _CONF.negative
1223 _CONF.set_default('domain_name', self.identity.admin_domain_name,
1224 group='identity')
1225 _CONF.set_default('alt_domain_name', self.identity.admin_domain_name,
1226 group='identity')
Sean Dague86bd8422013-12-20 09:56:44 -05001227
Joe Gordon28a84ae2014-07-17 15:38:28 +00001228 def __init__(self, parse_conf=True, config_path=None):
Matthew Treinish43b296a2014-02-28 15:23:00 -05001229 """Initialize a configuration from a conf directory and conf file."""
1230 super(TempestConfigPrivate, self).__init__()
1231 config_files = []
1232 failsafe_path = "/etc/tempest/" + self.DEFAULT_CONFIG_FILE
1233
Joe Gordon28a84ae2014-07-17 15:38:28 +00001234 if config_path:
1235 path = config_path
1236 else:
1237 # Environment variables override defaults...
1238 conf_dir = os.environ.get('TEMPEST_CONFIG_DIR',
1239 self.DEFAULT_CONFIG_DIR)
1240 conf_file = os.environ.get('TEMPEST_CONFIG',
1241 self.DEFAULT_CONFIG_FILE)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001242
Joe Gordon28a84ae2014-07-17 15:38:28 +00001243 path = os.path.join(conf_dir, conf_file)
Matthew Treinish43b296a2014-02-28 15:23:00 -05001244
1245 if not os.path.isfile(path):
1246 path = failsafe_path
1247
1248 # only parse the config file if we expect one to exist. This is needed
1249 # to remove an issue with the config file up to date checker.
1250 if parse_conf:
1251 config_files.append(path)
Maru Newbyf440c292015-03-31 15:58:47 +00001252 logging.register_options(_CONF)
Matthew Treinish5440a402014-10-02 14:36:16 -04001253 if os.path.isfile(path):
Maru Newbyf440c292015-03-31 15:58:47 +00001254 _CONF([], project='tempest', default_config_files=config_files)
Matthew Treinish5440a402014-10-02 14:36:16 -04001255 else:
Maru Newbyf440c292015-03-31 15:58:47 +00001256 _CONF([], project='tempest')
1257 logging.setup(_CONF, 'tempest')
Matthew Treinish43b296a2014-02-28 15:23:00 -05001258 LOG = logging.getLogger('tempest')
1259 LOG.info("Using tempest config file %s" % path)
1260 register_opts()
1261 self._set_attrs()
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001262 if parse_conf:
Maru Newbyf440c292015-03-31 15:58:47 +00001263 _CONF.log_opt_values(LOG, std_logging.DEBUG)
Masayuki Igawa9ec4cd82014-02-05 15:04:16 +09001264
Sean Dague86bd8422013-12-20 09:56:44 -05001265
1266class TempestConfigProxy(object):
1267 _config = None
Joe Gordon28a84ae2014-07-17 15:38:28 +00001268 _path = None
Sean Dague86bd8422013-12-20 09:56:44 -05001269
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001270 _extra_log_defaults = [
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001271 ('paramiko.transport', std_logging.INFO),
1272 ('requests.packages.urllib3.connectionpool', std_logging.WARN),
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001273 ]
1274
1275 def _fix_log_levels(self):
1276 """Tweak the oslo log defaults."""
Doug Hellmann583ce2c2015-03-11 14:55:46 +00001277 for name, level in self._extra_log_defaults:
1278 std_logging.getLogger(name).setLevel(level)
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001279
Sean Dague86bd8422013-12-20 09:56:44 -05001280 def __getattr__(self, attr):
1281 if not self._config:
Sean Daguedb6ac6c2014-06-06 16:52:44 -04001282 self._fix_log_levels()
Joe Gordon28a84ae2014-07-17 15:38:28 +00001283 self._config = TempestConfigPrivate(config_path=self._path)
Sean Dague86bd8422013-12-20 09:56:44 -05001284
1285 return getattr(self._config, attr)
1286
Joe Gordon28a84ae2014-07-17 15:38:28 +00001287 def set_config_path(self, path):
1288 self._path = path
1289
Sean Dague86bd8422013-12-20 09:56:44 -05001290
1291CONF = TempestConfigProxy()