blob: e29ea8e5cfc1cc3d31d35ab740f72960c14d79cc [file] [log] [blame]
Jay Pipes3f981df2012-03-27 18:59:44 -04001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2012 OpenStack, LLC
4# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
17
18import logging
19
Jay Pipesf38eaac2012-06-21 13:37:35 -040020from tempest import config
Daryl Walleck587385b2012-03-03 13:00:26 -060021from tempest import exceptions
Matthew Treinisha83a16e2012-12-07 13:44:02 -050022from tempest.services.boto.clients import APIClientEC2
23from tempest.services.boto.clients import ObjectClientS3
dwallecke62b9f02012-10-10 23:34:42 -050024from tempest.services.compute.json.extensions_client import \
Matthew Treinisha83a16e2012-12-07 13:44:02 -050025 ExtensionsClientJSON
dwallecke62b9f02012-10-10 23:34:42 -050026from tempest.services.compute.json.flavors_client import FlavorsClientJSON
27from tempest.services.compute.json.floating_ips_client import \
Matthew Treinisha83a16e2012-12-07 13:44:02 -050028 FloatingIPsClientJSON
dwallecke62b9f02012-10-10 23:34:42 -050029from tempest.services.compute.json.images_client import ImagesClientJSON
30from tempest.services.compute.json.limits_client import LimitsClientJSON
31from tempest.services.compute.json.servers_client import ServersClientJSON
Matthew Treinisha83a16e2012-12-07 13:44:02 -050032from tempest.services.compute.json.security_groups_client import \
33 SecurityGroupsClientJSON
dwallecke62b9f02012-10-10 23:34:42 -050034from tempest.services.compute.json.keypairs_client import KeyPairsClientJSON
Matthew Treinisha83a16e2012-12-07 13:44:02 -050035from tempest.services.compute.json.quotas_client import QuotasClient
36from tempest.services.compute.json.volumes_extensions_client import \
37 VolumesExtensionsClientJSON
38from tempest.services.compute.json.console_output_client import \
39 ConsoleOutputsClient
dwallecke62b9f02012-10-10 23:34:42 -050040from tempest.services.compute.xml.extensions_client import ExtensionsClientXML
41from tempest.services.compute.xml.flavors_client import FlavorsClientXML
42from tempest.services.compute.xml.floating_ips_client import \
Matthew Treinisha83a16e2012-12-07 13:44:02 -050043 FloatingIPsClientXML
dwallecke62b9f02012-10-10 23:34:42 -050044from tempest.services.compute.xml.images_client import ImagesClientXML
45from tempest.services.compute.xml.keypairs_client import KeyPairsClientXML
46from tempest.services.compute.xml.limits_client import LimitsClientXML
47from tempest.services.compute.xml.security_groups_client \
Vincent Houead03dc2012-08-24 21:35:11 +080048import SecurityGroupsClientXML
dwallecke62b9f02012-10-10 23:34:42 -050049from tempest.services.compute.xml.servers_client import ServersClientXML
Matthew Treinisha83a16e2012-12-07 13:44:02 -050050from tempest.services.compute.xml.volumes_extensions_client import \
51 VolumesExtensionsClientXML
52from tempest.services.identity.json.admin_client import AdminClientJSON
53from tempest.services.identity.json.admin_client import TokenClientJSON
54from tempest.services.identity.xml.admin_client import AdminClientXML
55from tempest.services.identity.xml.admin_client import TokenClientXML
56from tempest.services.image import service as image_service
57from tempest.services.network.json.network_client import NetworkClient
dwalleck5d734432012-10-04 01:11:47 -050058from tempest.services.object_storage.account_client import AccountClient
59from tempest.services.object_storage.container_client import ContainerClient
60from tempest.services.object_storage.object_client import ObjectClient
Matthew Treinisha83a16e2012-12-07 13:44:02 -050061from tempest.services.volume.json.volumes_client import VolumesClientJSON
62from tempest.services.volume.xml.volumes_client import VolumesClientXML
Vincent Hou6b8a7b72012-08-25 01:24:33 +080063
Jay Pipes3f981df2012-03-27 18:59:44 -040064LOG = logging.getLogger(__name__)
65
Mauro S. M. Rodrigues6e373242012-08-27 18:59:19 -040066IMAGES_CLIENTS = {
67 "json": ImagesClientJSON,
68 "xml": ImagesClientXML,
69}
70
Mauro S. M. Rodriguesa636f532012-08-21 11:07:53 -040071KEYPAIRS_CLIENTS = {
72 "json": KeyPairsClientJSON,
73 "xml": KeyPairsClientXML,
74}
75
Dan Smithcf8fab62012-08-14 08:03:48 -070076SERVERS_CLIENTS = {
77 "json": ServersClientJSON,
78 "xml": ServersClientXML,
79}
80
Matthew Treinish33634462012-08-16 16:51:23 -040081LIMITS_CLIENTS = {
82 "json": LimitsClientJSON,
83 "xml": LimitsClientXML,
84}
85
Tiago Melloeda03b52012-08-22 23:47:29 -030086FLAVORS_CLIENTS = {
87 "json": FlavorsClientJSON,
88 "xml": FlavorsClientXML
89}
90
Tiago Mello89126c32012-08-27 11:14:03 -030091EXTENSIONS_CLIENTS = {
92 "json": ExtensionsClientJSON,
93 "xml": ExtensionsClientXML
94}
95
Matthew Treinish4e086902012-08-17 17:52:22 -040096VOLUMES_EXTENSIONS_CLIENTS = {
97 "json": VolumesExtensionsClientJSON,
98 "xml": VolumesExtensionsClientXML,
99}
100
Vincent Hou22f03c72012-08-24 17:55:13 +0800101FLOAT_CLIENTS = {
102 "json": FloatingIPsClientJSON,
103 "xml": FloatingIPsClientXML,
104}
105
Matthew Treinish9854d5b2012-09-20 10:22:13 -0400106VOLUMES_CLIENTS = {
107 "json": VolumesClientJSON,
108 "xml": VolumesClientXML,
109}
110
Vincent Hou6b8a7b72012-08-25 01:24:33 +0800111ADMIN_CLIENT = {
112 "json": AdminClientJSON,
113 "xml": AdminClientXML,
114}
115
116TOKEN_CLIENT = {
117 "json": TokenClientJSON,
118 "xml": TokenClientXML,
119}
120
Vincent Houead03dc2012-08-24 21:35:11 +0800121SECURITY_GROUPS_CLIENT = {
122 "json": SecurityGroupsClientJSON,
123 "xml": SecurityGroupsClientXML,
124}
125
Vincent Hou6b8a7b72012-08-25 01:24:33 +0800126
Daryl Walleck1465d612011-11-02 02:22:15 -0500127class Manager(object):
128
Jay Pipes3f981df2012-03-27 18:59:44 -0400129 """
130 Top level manager for OpenStack Compute clients
131 """
132
Dan Smithcf8fab62012-08-14 08:03:48 -0700133 def __init__(self, username=None, password=None, tenant_name=None,
134 interface='json'):
Jay Pipesff10d552012-04-06 14:18:50 -0400135 """
136 We allow overriding of the credentials used within the various
137 client classes managed by the Manager object. Left as None, the
138 standard username/password/tenant_name is used.
139
140 :param username: Override of the username
141 :param password: Override of the password
142 :param tenant_name: Override of the tenant name
143 """
Jay Pipesf38eaac2012-06-21 13:37:35 -0400144 self.config = config.TempestConfig()
Rohit Karajgie1b050d2011-12-02 16:13:18 -0800145
Jay Pipesf38eaac2012-06-21 13:37:35 -0400146 # If no creds are provided, we fall back on the defaults
147 # in the config file for the Compute API.
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700148 self.username = username or self.config.compute.username
149 self.password = password or self.config.compute.password
150 self.tenant_name = tenant_name or self.config.compute.tenant_name
Daryl Walleckced8eb82012-03-19 13:52:37 -0500151
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700152 if None in (self.username, self.password, self.tenant_name):
Jay Pipes3f981df2012-03-27 18:59:44 -0400153 msg = ("Missing required credentials. "
154 "username: %(username)s, password: %(password)s, "
155 "tenant_name: %(tenant_name)s") % locals()
156 raise exceptions.InvalidConfiguration(msg)
157
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700158 self.auth_url = self.config.identity.auth_url
Daryl Walleck587385b2012-03-03 13:00:26 -0600159
160 if self.config.identity.strategy == 'keystone':
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700161 client_args = (self.config, self.username, self.password,
162 self.auth_url, self.tenant_name)
Daryl Walleck1465d612011-11-02 02:22:15 -0500163 else:
Rohit Karajgidd47d7e2012-07-31 04:11:01 -0700164 client_args = (self.config, self.username, self.password,
165 self.auth_url)
Daryl Walleck587385b2012-03-03 13:00:26 -0600166
Dan Smithcf8fab62012-08-14 08:03:48 -0700167 try:
168 self.servers_client = SERVERS_CLIENTS[interface](*client_args)
Matthew Treinish33634462012-08-16 16:51:23 -0400169 self.limits_client = LIMITS_CLIENTS[interface](*client_args)
Mauro S. M. Rodrigues6e373242012-08-27 18:59:19 -0400170 self.images_client = IMAGES_CLIENTS[interface](*client_args)
Mauro S. M. Rodriguesa636f532012-08-21 11:07:53 -0400171 self.keypairs_client = KEYPAIRS_CLIENTS[interface](*client_args)
Tiago Melloeda03b52012-08-22 23:47:29 -0300172 self.flavors_client = FLAVORS_CLIENTS[interface](*client_args)
Zhongyue Luoe0884a32012-09-25 17:24:17 +0800173 ext_cli = EXTENSIONS_CLIENTS[interface](*client_args)
174 self.extensions_client = ext_cli
175 vol_ext_cli = VOLUMES_EXTENSIONS_CLIENTS[interface](*client_args)
176 self.volumes_extensions_client = vol_ext_cli
Vincent Hou22f03c72012-08-24 17:55:13 +0800177 self.floating_ips_client = FLOAT_CLIENTS[interface](*client_args)
Matthew Treinish9854d5b2012-09-20 10:22:13 -0400178 self.volumes_client = VOLUMES_CLIENTS[interface](*client_args)
Vincent Hou6b8a7b72012-08-25 01:24:33 +0800179 self.admin_client = ADMIN_CLIENT[interface](*client_args)
180 self.token_client = TOKEN_CLIENT[interface](self.config)
Vincent Houead03dc2012-08-24 21:35:11 +0800181 self.security_groups_client = \
182 SECURITY_GROUPS_CLIENT[interface](*client_args)
Dan Smithcf8fab62012-08-14 08:03:48 -0700183 except KeyError:
184 msg = "Unsupported interface type `%s'" % interface
185 raise exceptions.InvalidConfiguration(msg)
rajalakshmi-ganesan72ea31a2012-05-25 11:59:10 +0530186 self.console_outputs_client = ConsoleOutputsClient(*client_args)
Rohit Karajgi07599c52012-11-02 05:35:16 -0700187 self.quotas_client = QuotasClient(*client_args)
Unmesh Gurjar44986832012-05-08 19:57:10 +0530188 self.network_client = NetworkClient(*client_args)
dwalleck5d734432012-10-04 01:11:47 -0500189 self.account_client = AccountClient(*client_args)
190 self.container_client = ContainerClient(*client_args)
191 self.object_client = ObjectClient(*client_args)
Attila Fazekasa23f5002012-10-23 19:32:45 +0200192 self.ec2api_client = APIClientEC2(*client_args)
193 self.s3_client = ObjectClientS3(*client_args)
Jay Pipes50677282012-01-06 15:39:20 -0500194
195
Jay Pipesff10d552012-04-06 14:18:50 -0400196class AltManager(Manager):
197
198 """
199 Manager object that uses the alt_XXX credentials for its
200 managed client objects
201 """
202
203 def __init__(self):
Jay Pipesf38eaac2012-06-21 13:37:35 -0400204 conf = config.TempestConfig()
Jay Pipesff10d552012-04-06 14:18:50 -0400205 super(AltManager, self).__init__(conf.compute.alt_username,
206 conf.compute.alt_password,
207 conf.compute.alt_tenant_name)
208
209
210class AdminManager(Manager):
211
212 """
213 Manager object that uses the alt_XXX credentials for its
214 managed client objects
215 """
216
Tiago Melloeda03b52012-08-22 23:47:29 -0300217 def __init__(self, interface='json'):
Jay Pipesf38eaac2012-06-21 13:37:35 -0400218 conf = config.TempestConfig()
Jay Pipesff10d552012-04-06 14:18:50 -0400219 super(AdminManager, self).__init__(conf.compute_admin.username,
220 conf.compute_admin.password,
Tiago Melloeda03b52012-08-22 23:47:29 -0300221 conf.compute_admin.tenant_name,
222 interface=interface)
Jay Pipesff10d552012-04-06 14:18:50 -0400223
224
Jay Pipes50677282012-01-06 15:39:20 -0500225class ServiceManager(object):
226
227 """
228 Top-level object housing clients for OpenStack APIs
229 """
230
231 def __init__(self):
Jay Pipesf38eaac2012-06-21 13:37:35 -0400232 self.config = config.TempestConfig()
Jay Pipes50677282012-01-06 15:39:20 -0500233 self.services = {}
234 self.services['image'] = image_service.Service(self.config)
235 self.images = self.services['image']
Vincent Hou6b8a7b72012-08-25 01:24:33 +0800236
237
238class IdentityManager(Manager):
239
240 """
241 Manager object that uses the alt_XXX credentials for its
242 managed client objects
243 """
244
245 def __init__(self, interface='json'):
246 conf = config.TempestConfig()
247 super(IdentityManager, self).__init__(conf.identity_admin.username,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800248 conf.identity_admin.password,
249 conf.identity_admin.tenant_name,
250 interface)
Vincent Hou6b8a7b72012-08-25 01:24:33 +0800251
252
253class IdentityNaManager(Manager):
254
255 """
256 Manager object that uses the alt_XXX credentials for its
257 managed client objects
258 """
259
260 def __init__(self, interface='json'):
261 conf = config.TempestConfig()
262 super(IdentityNaManager, self).__init__(conf.compute.username,
Zhongyue Luo79d8d362012-09-25 13:49:27 +0800263 conf.compute.password,
264 conf.compute.tenant_name,
265 interface)