blob: e21deeae88b200162d423ef7aabc00215f3e81e0 [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
9config file which explains the purpose of each individual option.
10
11Lock Path
12---------
13
14There are some tests and operations inside of tempest that need to be
15externally locked when running in parallel to prevent them from running at
16the same time. This is a mandatory step for configuring tempest and is still
17needed even when running serially. All that is needed to do this is:
18
19 #. Set the lock_path option in the oslo_concurrency group
20
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050021Auth/Credentials
22----------------
23
24Tempest currently has 2 different ways in configuration to provide credentials
25to use when running tempest. One is a traditional set of configuration options
26in the tempest.conf file. These options are in the identity section and let you
27specify a regular user, a global admin user, and a alternate user set of
28credentials. (which consist of a username, password, and project/tenant name)
29These options should be clearly labelled in the sample config file in the
30identity section.
31
32The other method to provide credentials is using the accounts.yaml file. This
33file is used to specify an arbitrary number of users available to run tests
34with. You can specify the location of the file in the
35auth section in the tempest.conf file. To see the specific format used in
36the file please refer to the accounts.yaml.sample file included in tempest.
37Currently users that are specified in the accounts.yaml file are assumed to
38have the same set of roles which can be used for executing all the tests you
39are running. This will be addressed in the future, but is a current limitation.
40Eventually the config options for providing credentials to tempest will be
41deprecated and removed in favor of the accounts.yaml file.
42
Matthew Treinish7909e122015-04-15 15:43:50 -040043Keystone Connection Info
44^^^^^^^^^^^^^^^^^^^^^^^^
45In order for tempest to be able to talk to your OpenStack deployment you need
46to provide it with information about how it communicates with keystone.
47This involves configuring the following options in the identity section:
48
49 #. auth_version
50 #. uri
51 #. uri_v3
52
53The *auth_version* option is used to tell tempest whether it should be using
54keystone's v2 or v3 api for communicating with keystone. (except for the
55identity api tests which will test a specific version) The 2 uri options are
56used to tell tempest the url of the keystone endpoint. The *uri* option is used
57for keystone v2 request and *uri_v3* is used for keystone v3. You want to ensure
58that which ever version you set for *auth_version* has its uri option defined.
59
60
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050061Credential Provider Mechanisms
62^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
63
64Tempest currently also has 3 different internal methods for providing
65authentication to tests. Tenant isolation, locking test accounts, and
66non-locking test accounts. Depending on which one is in use the configuration
67of tempest is slightly different.
68
69Tenant Isolation
70""""""""""""""""
71Tenant isolation was originally create to enable running tempest in parallel.
72For each test class it creates a unique set of user credentials to use for the
73tests in the class. It can create up to 3 sets of username, password, and
74tenant/project names for a primary user, an admin user, and an alternate user.
75To enable and use tenant isolation you only need to configure 2 things:
76
77 #. A set of admin credentials with permissions to create users and
78 tenants/projects. This is specified in the identity section with the
79 admin_username, admin_tenant_name, and admin_password options
80 #. To enable tenant_isolation in the auth section with the
81 allow_tenant_isolation option.
82
Matthew Treinish0fd69e42015-03-06 00:40:51 -050083This is also the currently the default credential provider enabled by tempest,
84due to it's common use and ease of configuration.
Matthew Treinishbc1b15b2015-02-20 15:56:07 -050085
86Locking Test Accounts
87"""""""""""""""""""""
88For a long time using tenant isolation was the only method available if you
89wanted to enable parallel execution of tempest tests. However this was
90insufficient for certain use cases because of the admin credentials requirement
91to create the credential sets on demand. To get around that the accounts.yaml
92file was introduced and with that a new internal credential provider to enable
93using the list of credentials instead of creating them on demand. With locking
94test accounts each test class will reserve a set of credentials from the
95accounts.yaml before executing any of its tests so that each class is isolated
96like in tenant isolation.
97
Matthew Treinish0fd69e42015-03-06 00:40:51 -050098Currently, this mechanism has some limitations, mostly around networking. The
99locking test accounts provider will only work with a single flat network as
Matthew Treinishbc1b15b2015-02-20 15:56:07 -0500100the default for each tenant/project. If another network configuration is used
101in your cloud you might face unexpected failures.
102
103To enable and use locking test accounts you need do a few things:
104
Matthew Treinishbc1b15b2015-02-20 15:56:07 -0500105 #. Create a accounts.yaml file which contains the set of pre-existing
106 credentials to use for testing. To make sure you don't have a credentials
107 starvation issue when running in parallel make sure you have at least 2
Matthew Treinishfc7cd8f2015-03-30 11:51:55 -0400108 times the number of worker processes you are using to execute tempest
109 available in the file. (if running serially the worker count is 1)
Matthew Treinish0fd69e42015-03-06 00:40:51 -0500110
111 You can check the sample file packaged in tempest for the yaml format
Matthew Treinishbc1b15b2015-02-20 15:56:07 -0500112 #. Provide tempest with the location of you accounts.yaml file with the
113 test_accounts_file option in the auth section
114
115
116Non-locking test accounts
117"""""""""""""""""""""""""
118When tempest was refactored to allow for locking test accounts, the original
119non-tenant isolated case was converted to support the new accounts.yaml file.
120This mechanism is the non-locking test accounts provider. It only makes sense
121to use it if parallel execution isn't needed. If the role restrictions were too
122limiting with the locking accounts provider and tenant isolation is not wanted
123then you can use the non-locking test accounts credential provider without the
Matthew Treinish0fd69e42015-03-06 00:40:51 -0500124accounts.yaml file.
Matthew Treinishbc1b15b2015-02-20 15:56:07 -0500125
126To use the non-locking test accounts provider you have 2 ways to configure it.
127First you can specify the sets of credentials in the configuration file like
128detailed above with following 9 options in the identity section:
129
130 #. username
131 #. password
132 #. tenant_name
133 #. admin_username
134 #. admin_password
135 #. admin_tenant_name
136 #. alt_username
137 #. alt_password
138 #. alt_tenant_name
139
Matthew Treinish0fd69e42015-03-06 00:40:51 -0500140The only restriction with using the traditional config options for credentials
141is that if a test requires specific roles on accounts these tests can not be
142run. This is because the config options do not give sufficient flexibility to
143describe the roles assigned to a user for running the tests.
Matthew Treinish2b7f0482015-04-10 12:49:01 -0400144
Matthew Treinish7909e122015-04-15 15:43:50 -0400145Compute
146-------
147
148Flavors
149^^^^^^^
150For tempest to be able to create servers you need to specify flavors that it
151can use to boot the servers with. There are 2 options in the tempest config
152for doing this:
153
154 #. flavor_ref
155 #. flavor_ref_alt
156
157Both of these options are in the compute section of the config file and take
158in the flavor id (not the name) from nova. The *flavor_ref* option is what will
159be used for booting almost all of the guests, *flavor_ref_alt* is only used in
160tests where 2 different sized servers are required. (for example a resize test)
161
162Using a smaller flavor is generally recommended, when larger flavors are used
163the extra time required to bring up servers will likely affect total run time
164and probably require tweaking timeout values to ensure tests have ample time to
165finish.
166
167Images
168^^^^^^
169Just like with flavors, tempest needs to know which images to use for booting
170servers. There are 2 options in the compute section just like with flavors:
171
172 #. image_ref
173 #. image_ref_alt
174
175Both options are expecting an image id (not name) from nova. The *image_ref*
176option is what what will be used for booting the majority of servers in tempest.
177*image_ref_alt* is used for tests that require 2 images such as rebuild. If 2
178images are not available you can set both options to the same image_ref and
179those tests will be skipped.
180
181There are also options in the scenario section for images:
182
183 #. img_file
184 #. img_dir
185 #. aki_img_file
186 #. ari_img_file
187 #. ami_img_file
188 #. img_container_format
189 #. img_disk_format
190
191however unlike the other image options these are used for a very small subset
192of scenario tests which are uploading an image. These options are used to tell
193tempest where an image file is located and describe it's metadata for when it's
194uploaded.
195
196The behavior of these options is a bit convoluted (which will likely be fixed
197in future versions). You first need to specify *img_dir*, which is the directory
198tempest will look for the image files in. First it will check if the filename
199set for *img_file* could be found in *img_dir*. If it is found then the
200*img_container_format* and *img_disk_format* options are used to upload that
201image to glance. However if it's not found tempest will look for the 3 uec image
202file name options as a fallback. If neither is found the tests requiring an
203image to upload will fail.
204
205It is worth pointing out that using `cirros`_ is a very good choice for running
206tempest. It's what is used for upstream testing, they boot quickly and have a
207small footprint.
208
209.. _cirros: https://launchpad.net/cirros
210
Matthew Treinish2b7f0482015-04-10 12:49:01 -0400211Networking
212----------
213OpenStack has a myriad of different networking configurations possible and
214depending on which of the 2 network backends, nova-network or neutron, you are
215using things can vary drastically. Due to this complexity Tempest has to provide
216a certain level of flexibility in it's configuration to ensure it will work
217against any cloud. This ends up causing a large number of permutations in
218Tempest's config around network configuration.
219
220
221Enabling Remote Access to Created Servers
222^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
223When Tempest creates servers for testing, some tests require being able to
224connect those servers. Depending on the configuration of the cloud, the methods
225for doing this can be different. In certain configurations it is required to
226specify a single network with server create calls. Accordingly, Tempest provides
227a few different methods for providing this information in configuration to try
228and ensure that regardless of the clouds configuration it'll still be able to
229run. This section covers the different methods of configuring Tempest to provide
230a network when creating servers.
231
232Fixed Network Name
233""""""""""""""""""
234This is the simplest method of specifying how networks should be used. You can
235just specify a single network name/label to use for all server creations. The
236limitation with this is that all tenants/projects and users must be able to see
237that network name/label if they were to perform a network list and be able to
238use it.
239
240If no network name is assigned in the config file and none of the below
241alternatives are used, then Tempest will not specify a network on server
242creations, which depending on the cloud configuration might prevent them from
243booting.
244
245To set a fixed network name simply do:
246
247 #. Set the fixed_network_name option in the compute group
248
249In the case that the configured fixed network name can not be found by a user
250network list call, it will be treated like one was not provided except that a
251warning will be logged stating that it couldn't be found.
252
253
254Accounts File
255"""""""""""""
256If you are using an accounts file to provide credentials for running Tempest
257then you can leverage it to also specify which network should be used with
258server creations on a per tenant/project and user pair basis. This provides
259the necessary flexibility to work with more intricate networking configurations
260by enabling the user to specify exactly which network to use for which
261tenants/projects. You can refer to the accounts.yaml sample file included in
262the tempest repo for the syntax around specifying networks in the file.
263
264However, specifying a network is not required when using an accounts file. If
265one is not specified you can use a fixed network name to specify the network to
266use when creating servers just as without an accounts file. However, any network
267specified in the accounts file will take precedence over the fixed network name
268provided. If no network is provided in the accounts file and a fixed network
269name is not set then no network will be included in create server requests.
270
271If a fixed network is provided and the accounts.yaml file also contains networks
272this has the benefit of enabling a couple more tests which require a static
273network to perform operations like server lists with a network filter. If a
274fixed network name is not provided these tests are skipped. Additionally, if a
275fixed network name is provided it will serve as a fallback in case of a
276misconfiguration or a missing network in the accounts file.
277
278
279With Tenant Isolation
280"""""""""""""""""""""
281With tenant isolation enabled and using nova-network then nothing changes. Your
282only option for configuration is to either set a fixed network name or not.
283However, in most cases it shouldn't matter because nova-network should have no
284problem booting a server with multiple networks. If this is not the case for
285your cloud then using an accounts file is recommended because it provides the
286necessary flexibility to describe your configuration. Tenant isolation is not
287able to dynamically allocate things as necessary if neutron is not enabled.
288
289With neutron and tenant isolation enabled there should not be any additional
290configuration necessary to enable Tempest to create servers with working
291networking, assuming you have properly configured the network section to work
292for your cloud. Tempest will dynamically create the neutron resources necessary
293to enable using servers with that network. Also, just as with the accounts
294file, if you specify a fixed network name while using neutron and tenant
295isolation it will enable running tests which require a static network and it
296will additionally be used as a fallback for server creation. However, unlike
297accounts.yaml this should never be triggered.
Matthew Treinish3220cad2015-04-15 16:25:48 -0400298
Matthew Treinishf96ab3a2015-04-15 19:11:31 -0400299Configuring Available Services
300------------------------------
301OpenStack is really a constellation of several different projects which
302are running together to create a cloud. However which projects you're running
303is not set in stone, and which services are running is up to the deployer.
304Tempest however needs to know which services are available so it can figure
305out which tests it is able to run and certain setup steps which differ based
306on the available services.
307
308The *service_available* section of the config file is used to set which
309services are available. It contains a boolean option for each service (except
310for keystone which is a hard requirement) set it to True if the service is
311available or False if it is not.
312
313Service Catalog
314^^^^^^^^^^^^^^^
315Each project which has its own REST API contains an entry in the service
316catalog. Like most things in OpenStack this is also completely configurable.
317However, for tempest to be able to figure out the endpoints to send REST API
318calls for each service to it needs to know how that project is defined in the
319service catalog. There are 3 options for each service section to accomplish
320this:
321
322 #. catalog_type
323 #. endpoint_type
324 #. region
325
326Setting *catalog_type* and *endpoint_type* should normally give Tempest enough
327information to determine which endpoint it should pull from the service
328catalog to use for talking to that particular service. However, if you're cloud
329has multiple regions available and you need to specify a particular one to use
330a service you can set the *region* option in that service's section.
331
332It should also be noted that the default values for these options are set
333to what devstack uses. (which is a de facto standard for service catalog
334entries) So often nothing actually needs to be set on these options to enable
335communication to a particular service. It is only if you are either not using
336the same *catalog_type* as devstack or you want Tempest to talk to a different
337endpoint type instead of publicURL for a service that these need to be changed.
338
339
Matthew Treinish3220cad2015-04-15 16:25:48 -0400340Service feature configuration
341-----------------------------
342
343OpenStack provides its deployers a myriad of different configuration options
344to enable anyone deploying it to create a cloud tailor-made for any individual
345use case. It provides options for several different backend type, databases,
346message queues, etc. However, the downside to this configurability is that
347certain operations and features aren't supported depending on the configuration.
348These features may or may not be discoverable from the API so the burden is
349often on the user to figure out what the cloud they're talking to supports.
350Besides the obvious interoperability issues with this it also leaves Tempest
351in an interesting situation trying to figure out which tests are expected to
352work. However, Tempest tests do not rely on dynamic api discovery for a feature
353(assuming one exists). Instead Tempest has to be explicitly configured as to
354which optional features are enabled. This is in order to prevent bugs in the
355discovery mechanisms from masking failures.
356
357The service feature-enabled config sections are how Tempest addresses the
358optional feature question. Each service that has tests for optional features
359contains one of these sections. The only options in it are boolean options
360with the name of a feature which is used. If it is set to false any test which
361depends on that functionality will be skipped. For a complete list of all these
362options refer to the sample config file.
363
364
365API Extensions
366^^^^^^^^^^^^^^
367The service feature-enabled sections often contain an *api-extensions* option
368(or in the case of swift a *discoverable_apis* option) this is used to tell
369tempest which api extensions (or configurable middleware) is used in your
370deployment. It has 2 valid config states, either it contains a single value
371"all" (which is the default) which means that every api extension is assumed
372to be enabled, or it is set to a list of each individual extension that is
373enabled for that service.