Add an xml/servers_client.py implementation
This needs to inherit some common bits from the json implementation,
but works for now.
This changes openstack.py::Manager to take an interface argument and
select the appropriate client(s) accordingly. This is ugly, and probably
not the best approach, but for the moment, it avoids the class inflation
that would result from creating subclasses at the Manager _and_ Base*Test
layers.
Change-Id: I7814054eab59bc34258fbbd1df43a4140448f448
diff --git a/tempest/openstack.py b/tempest/openstack.py
index e892082..b9912f1 100644
--- a/tempest/openstack.py
+++ b/tempest/openstack.py
@@ -23,7 +23,7 @@
from tempest.services.network.json.network_client import NetworkClient
from tempest.services.nova.json.images_client import ImagesClient
from tempest.services.nova.json.flavors_client import FlavorsClient
-from tempest.services.nova.json.servers_client import ServersClient
+from tempest.services.nova.json.servers_client import ServersClientJSON
from tempest.services.nova.json.limits_client import LimitsClient
from tempest.services.nova.json.extensions_client import ExtensionsClient
from tempest.services.nova.json.security_groups_client \
@@ -33,9 +33,15 @@
from tempest.services.nova.json.volumes_client import VolumesClient
from tempest.services.nova.json.console_output_client \
import ConsoleOutputsClient
+from tempest.services.nova.xml.servers_client import ServersClientXML
LOG = logging.getLogger(__name__)
+SERVERS_CLIENTS = {
+ "json": ServersClientJSON,
+ "xml": ServersClientXML,
+}
+
class Manager(object):
@@ -43,7 +49,8 @@
Top level manager for OpenStack Compute clients
"""
- def __init__(self, username=None, password=None, tenant_name=None):
+ def __init__(self, username=None, password=None, tenant_name=None,
+ interface='json'):
"""
We allow overriding of the credentials used within the various
client classes managed by the Manager object. Left as None, the
@@ -75,7 +82,11 @@
else:
client_args = (self.config, username, password, auth_url)
- self.servers_client = ServersClient(*client_args)
+ try:
+ self.servers_client = SERVERS_CLIENTS[interface](*client_args)
+ except KeyError:
+ msg = "Unsupported interface type `%s'" % interface
+ raise exceptions.InvalidConfiguration(msg)
self.flavors_client = FlavorsClient(*client_args)
self.images_client = ImagesClient(*client_args)
self.limits_client = LimitsClient(*client_args)