blob: a16f3b7216eb574b34cfeb8b7e67eb5c63780692 [file] [log] [blame]
Matthew Treinisha970d652015-03-11 15:39:24 -04001.. _tempest-configuration:
2
Matthew Treinishbc1b15b2015-02-20 15:56:07 -05003Tempest Configuration Guide
4===========================
5
Matthew Treinishf640f662015-03-11 15:13:30 -04006This guide is a starting point for configuring tempest. It aims to elaborate
7on and explain some of the mandatory and common configuration settings and how
8they are used in conjunction. The source of truth on each option is the sample
Matthew Treinishf45ba2e2015-08-24 15:05:01 -04009config file which explains the purpose of each individual option. You can see
10the sample config file here: :ref:`tempest-sampleconf`
Matthew Treinishf640f662015-03-11 15:13:30 -040011
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050012Auth/Credentials
13----------------
14
15Tempest currently has 2 different ways in configuration to provide credentials
16to use when running tempest. One is a traditional set of configuration options
17in the tempest.conf file. These options are in the identity section and let you
Toru Tanami32f45182015-08-20 05:24:50 +000018specify a regular user, a global admin user, and an alternate user set of
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050019credentials. (which consist of a username, password, and project/tenant name)
20These options should be clearly labelled in the sample config file in the
21identity section.
22
23The other method to provide credentials is using the accounts.yaml file. This
24file is used to specify an arbitrary number of users available to run tests
25with. You can specify the location of the file in the
26auth section in the tempest.conf file. To see the specific format used in
27the file please refer to the accounts.yaml.sample file included in tempest.
28Currently users that are specified in the accounts.yaml file are assumed to
29have the same set of roles which can be used for executing all the tests you
30are running. This will be addressed in the future, but is a current limitation.
31Eventually the config options for providing credentials to tempest will be
32deprecated and removed in favor of the accounts.yaml file.
33
Matthew Treinish7909e122015-04-15 15:43:50 -040034Keystone Connection Info
35^^^^^^^^^^^^^^^^^^^^^^^^
36In order for tempest to be able to talk to your OpenStack deployment you need
37to provide it with information about how it communicates with keystone.
38This involves configuring the following options in the identity section:
39
40 #. auth_version
41 #. uri
42 #. uri_v3
43
44The *auth_version* option is used to tell tempest whether it should be using
45keystone's v2 or v3 api for communicating with keystone. (except for the
46identity api tests which will test a specific version) The 2 uri options are
47used to tell tempest the url of the keystone endpoint. The *uri* option is used
48for keystone v2 request and *uri_v3* is used for keystone v3. You want to ensure
49that which ever version you set for *auth_version* has its uri option defined.
50
51
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050052Credential Provider Mechanisms
53^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
54
55Tempest currently also has 3 different internal methods for providing
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070056authentication to tests. Dynamic credentials, locking test accounts, and
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050057non-locking test accounts. Depending on which one is in use the configuration
58of tempest is slightly different.
59
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070060Dynamic Credentials
61"""""""""""""""""""
62Dynamic Credentials (formerly known as Tenant isolation) was originally created
63to enable running tempest in parallel.
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050064For each test class it creates a unique set of user credentials to use for the
65tests in the class. It can create up to 3 sets of username, password, and
66tenant/project names for a primary user, an admin user, and an alternate user.
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070067To enable and use dynamic credentials you only need to configure 2 things:
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050068
69 #. A set of admin credentials with permissions to create users and
Matthew Treinish16cf1e52015-08-11 10:39:23 -040070 tenants/projects. This is specified in the auth section with the
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070071 admin_username, admin_tenant_name, admin_domain_name and admin_password
Matthew Treinish16cf1e52015-08-11 10:39:23 -040072 options
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070073 #. To enable dynamic_creds in the auth section with the
74 use_dynamic_credentials option.
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050075
Matthew Treinish0fd69e42015-03-06 00:40:51 -050076This is also the currently the default credential provider enabled by tempest,
77due to it's common use and ease of configuration.
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050078
Matthew Treinish4fae4722015-04-16 21:03:54 -040079It is worth pointing out that depending on your cloud configuration you might
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070080need to assign a role to each of the users created by Tempest's dynamic
81credentials.
Matthew Treinish4fae4722015-04-16 21:03:54 -040082This can be set using the *tempest_roles* option. It takes in a list of role
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070083names each of which will be assigned to each of the users created by dynamic
84credentials. This option will not have any effect when set and tempest is not
85configured to use dynamic credentials.
Matthew Treinish4fae4722015-04-16 21:03:54 -040086
87
Matthew Treinish93299852015-04-24 09:58:18 -040088Locking Test Accounts (aka accounts.yaml or accounts file)
89""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070090For a long time using dynamic credentials was the only method available if you
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050091wanted to enable parallel execution of tempest tests. However this was
92insufficient for certain use cases because of the admin credentials requirement
93to create the credential sets on demand. To get around that the accounts.yaml
94file was introduced and with that a new internal credential provider to enable
95using the list of credentials instead of creating them on demand. With locking
96test accounts each test class will reserve a set of credentials from the
97accounts.yaml before executing any of its tests so that each class is isolated
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -070098like with dynamic credentials.
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050099
Matthew Treinishbc1b15b2015-02-20 15:56:07 -0500100To enable and use locking test accounts you need do a few things:
101
Matthew Treinishbc1b15b2015-02-20 15:56:07 -0500102 #. Create a accounts.yaml file which contains the set of pre-existing
103 credentials to use for testing. To make sure you don't have a credentials
104 starvation issue when running in parallel make sure you have at least 2
Matthew Treinishfc7cd8f2015-03-30 11:51:55 -0400105 times the number of worker processes you are using to execute tempest
106 available in the file. (if running serially the worker count is 1)
Matthew Treinish0fd69e42015-03-06 00:40:51 -0500107
108 You can check the sample file packaged in tempest for the yaml format
liuchenhongaa4aa692015-06-10 12:18:42 +0800109 #. Provide tempest with the location of your accounts.yaml file with the
Matthew Treinishbc1b15b2015-02-20 15:56:07 -0500110 test_accounts_file option in the auth section
111
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700112 #. Set use_dynamic_credentials = False in the auth group
Fei Long Wang7fee7872015-05-12 11:36:49 +1200113
Matthew Treinish93299852015-04-24 09:58:18 -0400114It is worth pointing out that each set of credentials in the accounts.yaml
115should have a unique tenant. This is required to provide proper isolation
116to the tests using the credentials, and failure to do this will likely cause
117unexpected failures in some tests.
Matthew Treinishbc1b15b2015-02-20 15:56:07 -0500118
Matthew Treinish93299852015-04-24 09:58:18 -0400119
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +0100120Legacy test accounts (aka credentials config options)
121"""""""""""""""""""""""""""""""""""""""""""""""""""""
Matthew Treinish16cf1e52015-08-11 10:39:23 -0400122**Starting in the Liberty release this mechanism was deprecated and will be
123removed in a future release**
124
Matthew Treinish57092132015-04-21 14:21:35 -0400125When Tempest was refactored to allow for locking test accounts, the original
126non-tenant isolated case was converted to internally work similarly to the
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +0100127accounts.yaml file. This mechanism was then called the legacy test accounts
128provider. To use the legacy test accounts provider you can specify the sets of
129credentials in the configuration file like detailed above with following 9
Matthew Treinish57092132015-04-21 14:21:35 -0400130options in the identity section:
Matthew Treinishbc1b15b2015-02-20 15:56:07 -0500131
132 #. username
133 #. password
134 #. tenant_name
135 #. admin_username
136 #. admin_password
137 #. admin_tenant_name
138 #. alt_username
139 #. alt_password
140 #. alt_tenant_name
141
Atsushi SAKAI0a183b82015-07-28 21:52:17 +0900142And in the auth section:
Fei Long Wang7fee7872015-05-12 11:36:49 +1200143
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700144 #. use_dynamic_credentials = False
Fei Long Wang7fee7872015-05-12 11:36:49 +1200145 #. comment out 'test_accounts_file' or keep it as empty
146
Matthew Treinish57092132015-04-21 14:21:35 -0400147It only makes sense to use it if parallel execution isn't needed, since tempest
148won't be able to properly isolate tests using this. Additionally, using the
149traditional config options for credentials is not able to provide credentials to
150tests which requires specific roles on accounts. This is because the config
151options do not give sufficient flexibility to describe the roles assigned to a
152user for running the tests. There are additional limitations with regard to
153network configuration when using this credential provider mechanism, see the
154`Networking`_ section below.
Matthew Treinish2b7f0482015-04-10 12:49:01 -0400155
Matthew Treinish7909e122015-04-15 15:43:50 -0400156Compute
157-------
158
159Flavors
160^^^^^^^
161For tempest to be able to create servers you need to specify flavors that it
162can use to boot the servers with. There are 2 options in the tempest config
163for doing this:
164
165 #. flavor_ref
166 #. flavor_ref_alt
167
168Both of these options are in the compute section of the config file and take
169in the flavor id (not the name) from nova. The *flavor_ref* option is what will
170be used for booting almost all of the guests, *flavor_ref_alt* is only used in
171tests where 2 different sized servers are required. (for example a resize test)
172
173Using a smaller flavor is generally recommended, when larger flavors are used
174the extra time required to bring up servers will likely affect total run time
175and probably require tweaking timeout values to ensure tests have ample time to
176finish.
177
178Images
179^^^^^^
180Just like with flavors, tempest needs to know which images to use for booting
181servers. There are 2 options in the compute section just like with flavors:
182
183 #. image_ref
184 #. image_ref_alt
185
186Both options are expecting an image id (not name) from nova. The *image_ref*
Brandon Palm304bfdd2015-08-18 10:57:21 -0500187option is what will be used for booting the majority of servers in tempest.
Matthew Treinish7909e122015-04-15 15:43:50 -0400188*image_ref_alt* is used for tests that require 2 images such as rebuild. If 2
189images are not available you can set both options to the same image_ref and
190those tests will be skipped.
191
192There are also options in the scenario section for images:
193
194 #. img_file
195 #. img_dir
196 #. aki_img_file
197 #. ari_img_file
198 #. ami_img_file
199 #. img_container_format
200 #. img_disk_format
201
202however unlike the other image options these are used for a very small subset
203of scenario tests which are uploading an image. These options are used to tell
204tempest where an image file is located and describe it's metadata for when it's
205uploaded.
206
207The behavior of these options is a bit convoluted (which will likely be fixed
208in future versions). You first need to specify *img_dir*, which is the directory
209tempest will look for the image files in. First it will check if the filename
210set for *img_file* could be found in *img_dir*. If it is found then the
211*img_container_format* and *img_disk_format* options are used to upload that
212image to glance. However if it's not found tempest will look for the 3 uec image
213file name options as a fallback. If neither is found the tests requiring an
214image to upload will fail.
215
216It is worth pointing out that using `cirros`_ is a very good choice for running
217tempest. It's what is used for upstream testing, they boot quickly and have a
218small footprint.
219
220.. _cirros: https://launchpad.net/cirros
221
Matthew Treinish2b7f0482015-04-10 12:49:01 -0400222Networking
223----------
224OpenStack has a myriad of different networking configurations possible and
225depending on which of the 2 network backends, nova-network or neutron, you are
226using things can vary drastically. Due to this complexity Tempest has to provide
227a certain level of flexibility in it's configuration to ensure it will work
228against any cloud. This ends up causing a large number of permutations in
229Tempest's config around network configuration.
230
231
232Enabling Remote Access to Created Servers
233^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
234When Tempest creates servers for testing, some tests require being able to
235connect those servers. Depending on the configuration of the cloud, the methods
236for doing this can be different. In certain configurations it is required to
237specify a single network with server create calls. Accordingly, Tempest provides
238a few different methods for providing this information in configuration to try
239and ensure that regardless of the clouds configuration it'll still be able to
240run. This section covers the different methods of configuring Tempest to provide
241a network when creating servers.
242
243Fixed Network Name
244""""""""""""""""""
245This is the simplest method of specifying how networks should be used. You can
246just specify a single network name/label to use for all server creations. The
247limitation with this is that all tenants/projects and users must be able to see
248that network name/label if they were to perform a network list and be able to
249use it.
250
251If no network name is assigned in the config file and none of the below
252alternatives are used, then Tempest will not specify a network on server
253creations, which depending on the cloud configuration might prevent them from
254booting.
255
256To set a fixed network name simply do:
257
258 #. Set the fixed_network_name option in the compute group
259
260In the case that the configured fixed network name can not be found by a user
261network list call, it will be treated like one was not provided except that a
262warning will be logged stating that it couldn't be found.
263
264
265Accounts File
266"""""""""""""
267If you are using an accounts file to provide credentials for running Tempest
268then you can leverage it to also specify which network should be used with
269server creations on a per tenant/project and user pair basis. This provides
270the necessary flexibility to work with more intricate networking configurations
271by enabling the user to specify exactly which network to use for which
272tenants/projects. You can refer to the accounts.yaml sample file included in
273the tempest repo for the syntax around specifying networks in the file.
274
275However, specifying a network is not required when using an accounts file. If
276one is not specified you can use a fixed network name to specify the network to
277use when creating servers just as without an accounts file. However, any network
278specified in the accounts file will take precedence over the fixed network name
279provided. If no network is provided in the accounts file and a fixed network
280name is not set then no network will be included in create server requests.
281
282If a fixed network is provided and the accounts.yaml file also contains networks
283this has the benefit of enabling a couple more tests which require a static
284network to perform operations like server lists with a network filter. If a
285fixed network name is not provided these tests are skipped. Additionally, if a
286fixed network name is provided it will serve as a fallback in case of a
287misconfiguration or a missing network in the accounts file.
288
289
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700290With Dynamic Credentials
291""""""""""""""""""""""""
292With dynamic credentials enabled and using nova-network then nothing changes.
293Your only option for configuration is to either set a fixed network name or not.
Matthew Treinish2b7f0482015-04-10 12:49:01 -0400294However, in most cases it shouldn't matter because nova-network should have no
295problem booting a server with multiple networks. If this is not the case for
296your cloud then using an accounts file is recommended because it provides the
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700297necessary flexibility to describe your configuration. Dynamic credentials is not
Matthew Treinish2b7f0482015-04-10 12:49:01 -0400298able to dynamically allocate things as necessary if neutron is not enabled.
299
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700300With neutron and dynamic credentials enabled there should not be any additional
Matthew Treinish2b7f0482015-04-10 12:49:01 -0400301configuration necessary to enable Tempest to create servers with working
302networking, assuming you have properly configured the network section to work
303for your cloud. Tempest will dynamically create the neutron resources necessary
304to enable using servers with that network. Also, just as with the accounts
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700305file, if you specify a fixed network name while using neutron and dynamic
306credentials it will enable running tests which require a static network and it
Matthew Treinish2b7f0482015-04-10 12:49:01 -0400307will additionally be used as a fallback for server creation. However, unlike
308accounts.yaml this should never be triggered.
Matthew Treinish3220cad2015-04-15 16:25:48 -0400309
Andrea Frittoli (andreaf)17209bb2015-05-22 10:16:57 -0700310However, there is an option *create_isolated_networks* to disable dynamic
311credentials's automatic provisioning of network resources. If this option is
Matthew Treinish2219d382015-04-24 10:33:04 -0400312used you will have to either rely on there only being a single/default network
313available for the server creation, or use *fixed_network_name* to inform
314Tempest which network to use.
315
Matthew Treinishf96ab3a2015-04-15 19:11:31 -0400316Configuring Available Services
317------------------------------
318OpenStack is really a constellation of several different projects which
319are running together to create a cloud. However which projects you're running
320is not set in stone, and which services are running is up to the deployer.
321Tempest however needs to know which services are available so it can figure
322out which tests it is able to run and certain setup steps which differ based
323on the available services.
324
325The *service_available* section of the config file is used to set which
326services are available. It contains a boolean option for each service (except
327for keystone which is a hard requirement) set it to True if the service is
328available or False if it is not.
329
330Service Catalog
331^^^^^^^^^^^^^^^
332Each project which has its own REST API contains an entry in the service
333catalog. Like most things in OpenStack this is also completely configurable.
334However, for tempest to be able to figure out the endpoints to send REST API
335calls for each service to it needs to know how that project is defined in the
336service catalog. There are 3 options for each service section to accomplish
337this:
338
339 #. catalog_type
340 #. endpoint_type
341 #. region
342
343Setting *catalog_type* and *endpoint_type* should normally give Tempest enough
344information to determine which endpoint it should pull from the service
345catalog to use for talking to that particular service. However, if you're cloud
346has multiple regions available and you need to specify a particular one to use
347a service you can set the *region* option in that service's section.
348
349It should also be noted that the default values for these options are set
350to what devstack uses. (which is a de facto standard for service catalog
351entries) So often nothing actually needs to be set on these options to enable
352communication to a particular service. It is only if you are either not using
353the same *catalog_type* as devstack or you want Tempest to talk to a different
354endpoint type instead of publicURL for a service that these need to be changed.
355
ghanshyam571dfac2015-10-30 11:21:28 +0900356.. note::
357
358 Tempest does not serve all kind of fancy URLs in the service catalog.
359 Service catalog should be in a standard format (which is going to be
360 standardized at keystone level).
361 Tempest expects URLs in the Service catalog in below format:
362 * http://example.com:1234/<version-info>
363 Examples:
364 * Good - http://example.com:1234/v2.0
365 * Wouldn’t work - http://example.com:1234/xyz/v2.0/
366 (adding prefix/suffix around version etc)
Matthew Treinishf96ab3a2015-04-15 19:11:31 -0400367
Matthew Treinish3220cad2015-04-15 16:25:48 -0400368Service feature configuration
369-----------------------------
370
371OpenStack provides its deployers a myriad of different configuration options
372to enable anyone deploying it to create a cloud tailor-made for any individual
373use case. It provides options for several different backend type, databases,
374message queues, etc. However, the downside to this configurability is that
375certain operations and features aren't supported depending on the configuration.
376These features may or may not be discoverable from the API so the burden is
377often on the user to figure out what the cloud they're talking to supports.
378Besides the obvious interoperability issues with this it also leaves Tempest
379in an interesting situation trying to figure out which tests are expected to
380work. However, Tempest tests do not rely on dynamic api discovery for a feature
381(assuming one exists). Instead Tempest has to be explicitly configured as to
382which optional features are enabled. This is in order to prevent bugs in the
383discovery mechanisms from masking failures.
384
385The service feature-enabled config sections are how Tempest addresses the
386optional feature question. Each service that has tests for optional features
387contains one of these sections. The only options in it are boolean options
388with the name of a feature which is used. If it is set to false any test which
389depends on that functionality will be skipped. For a complete list of all these
390options refer to the sample config file.
391
392
393API Extensions
394^^^^^^^^^^^^^^
395The service feature-enabled sections often contain an *api-extensions* option
396(or in the case of swift a *discoverable_apis* option) this is used to tell
397tempest which api extensions (or configurable middleware) is used in your
398deployment. It has 2 valid config states, either it contains a single value
399"all" (which is the default) which means that every api extension is assumed
400to be enabled, or it is set to a list of each individual extension that is
401enabled for that service.