Merge "Addresses lp#942382 - refactor configuration for clarity"
diff --git a/etc/tempest.conf.sample b/etc/tempest.conf.sample
index 7f39118..780e48d 100644
--- a/etc/tempest.conf.sample
+++ b/etc/tempest.conf.sample
@@ -1,27 +1,30 @@
-[nova]
+[identity]
+use_ssl=False
host=127.0.0.1
port=5000
-apiVer=v2.0
+api_version=v2.0
path=tokens
user=admin
-api_key=admin-key
+password=admin-password
tenant_name=admin-project
+strategy=keystone
+
+[compute]
+# Reference data for tests. The ref and ref_alt should be
+# distinct images/flavors.
+image_ref=e7ddc02e-92fa-4f82-b36f-59b39bf66a67
+image_ref_alt=346f4039-a81e-44e0-9223-4a3d13c92a07
+flavor_ref=1
+flavor_ref_alt=2
ssh_timeout=300
build_interval=10
build_timeout=600
catalog_type=compute
+create_image_enabled=true
+resize_available=true
[image]
username=admin
password=********
tenant=admin
auth_url=http://localhost:5000/v2.0
-
-[environment]
-image_ref=3
-image_ref_alt=4
-flavor_ref=1
-flavor_ref_alt=2
-create_image_enabled=true
-resize_available=true
-authentication=keystone_v2
diff --git a/tempest/common/rest_client.py b/tempest/common/rest_client.py
index 7dd3a86..325d56b 100644
--- a/tempest/common/rest_client.py
+++ b/tempest/common/rest_client.py
@@ -12,29 +12,30 @@
class RestClient(object):
- def __init__(self, config, user, key, auth_url, service, tenant_name=None):
+ def __init__(self, config, user, password, auth_url, service,
+ tenant_name=None):
self.log = logging.getLogger(__name__)
self.log.setLevel(logging.ERROR)
self.config = config
- if self.config.env.authentication == 'keystone_v2':
- self.token, self.base_url = self.keystone_v2_auth(user,
- key,
- auth_url,
- service,
- tenant_name)
+ if self.config.identity.strategy == 'keystone':
+ self.token, self.base_url = self.keystone_auth(user,
+ password,
+ auth_url,
+ service,
+ tenant_name)
else:
self.token, self.base_url = self.basic_auth(user,
- key,
+ password,
auth_url)
- def basic_auth(self, user, api_key, auth_url):
+ def basic_auth(self, user, password, auth_url):
"""
Provides authentication for the target API
"""
params = {}
params['headers'] = {'User-Agent': 'Test-Client', 'X-Auth-User': user,
- 'X-Auth-Key': api_key}
+ 'X-Auth-Key': password}
self.http_obj = httplib2.Http()
resp, body = self.http_obj.request(auth_url, 'GET', **params)
@@ -43,15 +44,15 @@
except:
raise
- def keystone_v2_auth(self, user, api_key, auth_url, service, tenant_name):
+ def keystone_auth(self, user, password, auth_url, service, tenant_name):
"""
- Provides authentication via Keystone 2.0
+ Provides authentication via Keystone
"""
creds = {'auth': {
'passwordCredentials': {
'username': user,
- 'password': api_key,
+ 'password': password,
},
'tenantName': tenant_name
}
diff --git a/tempest/common/utils/data_utils.py b/tempest/common/utils/data_utils.py
index 7aed1e1..2d540f4 100644
--- a/tempest/common/utils/data_utils.py
+++ b/tempest/common/utils/data_utils.py
@@ -1,14 +1,22 @@
import random
+import re
import urllib
+from tempest import exceptions
def rand_name(name='test'):
return name + str(random.randint(1, 99999999999))
-def build_url(host, port, apiVer=None, path=None, params=None, use_ssl=False):
+def build_url(host, port, api_version=None, path=None,
+ params=None, use_ssl=False):
"""Build the request URL from given host, port, path and parameters"""
+ pattern = 'v\d\.\d'
+ if re.match(pattern, path):
+ message = 'Version should not be included in path.'
+ raise exceptions.InvalidConfiguration(message=message)
+
if use_ssl:
url = "https://" + host
else:
@@ -18,8 +26,8 @@
url += ":" + port
url += "/"
- if apiVer is not None:
- url += apiVer + "/"
+ if api_version is not None:
+ url += api_version + "/"
if path is not None:
url += path
diff --git a/tempest/config.py b/tempest/config.py
index b100530..8e62c55 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -6,33 +6,33 @@
LOG = logging.getLogger(__name__)
-class NovaConfig(object):
- """Provides configuration information for connecting to Nova."""
+class IdentityConfig(object):
+ """Provides configuration information for authenticating with Keystone."""
def __init__(self, conf):
- """Initialize a Nova-specific configuration object"""
+ """Initialize an Identity-specific configuration object"""
self.conf = conf
def get(self, item_name, default_value=None):
try:
- return self.conf.get("nova", item_name)
+ return self.conf.get("identity", item_name)
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
return default_value
@property
def host(self):
- """Host IP for making Nova API requests. Defaults to '127.0.0.1'."""
+ """Host IP for making Identity API requests."""
return self.get("host", "127.0.0.1")
@property
def port(self):
- """Listen port of the Nova service."""
+ """Port for the Identity service."""
return self.get("port", "8773")
@property
- def apiVer(self):
- """Version of the API"""
- return self.get("apiVer", "v1.1")
+ def api_version(self):
+ """Version of the Identity API"""
+ return self.get("api_version", "v1.1")
@property
def path(self):
@@ -41,18 +41,14 @@
@property
def auth_url(self):
- """The Auth URL (derived)"""
+ """The Identity URL (derived)"""
auth_url = data_utils.build_url(self.host,
self.port,
- self.apiVer,
+ self.api_version,
self.path,
use_ssl=self.use_ssl)
return auth_url
- def params(self):
- """Parameters to be passed with the API request"""
- return self.get("params", "")
-
@property
def use_ssl(self):
"""Specifies if we are using https."""
@@ -60,18 +56,70 @@
@property
def username(self):
- """Username to use for Nova API requests. Defaults to 'admin'."""
- return self.get("user", "admin")
+ """Username to use for Identity API requests."""
+ return self.get("user", None)
@property
def tenant_name(self):
- """Tenant name to use for Nova API requests. Defaults to 'admin'."""
- return self.get("tenant_name", "admin")
+ """Tenant name to use for Identity API requests."""
+ return self.get("tenant_name", None)
@property
- def api_key(self):
- """API key to use when authenticating. Defaults to 'admin_key'."""
- return self.get("api_key", "admin_key")
+ def password(self):
+ """Password to use when authenticating."""
+ return self.get("password", None)
+
+ @property
+ def strategy(self):
+ """Which auth method does the environment use? (basic|keystone)"""
+ return self.get("strategy", 'keystone')
+
+
+class ComputeConfig(object):
+ def __init__(self, conf):
+ """Initialize a Compute-specific configuration object."""
+ self.conf = conf
+
+ def get(self, item_name, default_value):
+ try:
+ return self.conf.get("compute", item_name)
+ except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
+ return default_value
+
+ @property
+ def image_ref(self):
+ """Valid primary image to use in tests."""
+ return self.get("image_ref", 'e7ddc02e-92fa-4f82-b36f-59b39bf66a67')
+
+ @property
+ def image_ref_alt(self):
+ """Valid secondary image reference to be used in tests."""
+ return self.get("image_ref_alt", '346f4039-a81e-44e0-9223-4a3d13c907')
+
+ @property
+ def flavor_ref(self):
+ """Valid primary flavor to use in tests."""
+ return self.get("flavor_ref", 1)
+
+ @property
+ def flavor_ref_alt(self):
+ """Valid secondary flavor to be used in tests."""
+ return self.get("flavor_ref_alt", 2)
+
+ @property
+ def resize_available(self):
+ """Does the test environment support resizing?"""
+ return self.get("resize_available", 'false') != 'false'
+
+ @property
+ def create_image_enabled(self):
+ """Does the test environment support snapshots?"""
+ return self.get("create_image_enabled", 'false') != 'false'
+
+ @property
+ def release_name(self):
+ """Which release is this?"""
+ return self.get("release_name", 'essex')
@property
def build_interval(self):
@@ -90,62 +138,10 @@
@property
def catalog_type(self):
- """Catalog name of the Nova service."""
+ """Catalog type of the Compute service."""
return self.get("catalog_type", 'compute')
-class EnvironmentConfig(object):
- def __init__(self, conf):
- """Initialize a Environment-specific configuration object."""
- self.conf = conf
-
- def get(self, item_name, default_value):
- try:
- return self.conf.get("environment", item_name)
- except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
- return default_value
-
- @property
- def image_ref(self):
- """Valid imageRef to use """
- return self.get("image_ref", 3)
-
- @property
- def image_ref_alt(self):
- """Valid imageRef to rebuild images with"""
- return self.get("image_ref_alt", 3)
-
- @property
- def flavor_ref(self):
- """Valid flavorRef to use"""
- return self.get("flavor_ref", 1)
-
- @property
- def flavor_ref_alt(self):
- """Valid flavorRef to resize images with"""
- return self.get("flavor_ref_alt", 2)
-
- @property
- def resize_available(self):
- """ Does the test environment support resizing """
- return self.get("resize_available", 'false') != 'false'
-
- @property
- def create_image_enabled(self):
- """ Does the test environment support snapshots """
- return self.get("create_image_enabled", 'false') != 'false'
-
- @property
- def authentication(self):
- """ What auth method does the environment use (basic|keystone) """
- return self.get("authentication", 'keystone')
-
- @property
- def release_name(self):
- """ Which release is this? """
- return self.get("release_name", 'essex')
-
-
class ImagesConfig(object):
"""
Provides configuration information for connecting to an
@@ -229,8 +225,8 @@
raise RuntimeError(msg)
self._conf = self.load_config(path)
- self.nova = NovaConfig(self._conf)
- self.env = EnvironmentConfig(self._conf)
+ self.compute = ComputeConfig(self._conf)
+ self.identity = IdentityConfig(self._conf)
self.images = ImagesConfig(self._conf)
def load_config(self, path):
diff --git a/tempest/exceptions.py b/tempest/exceptions.py
index a3fabe3..9f33740 100644
--- a/tempest/exceptions.py
+++ b/tempest/exceptions.py
@@ -27,6 +27,10 @@
return self._error_string
+class InvalidConfiguration(TempestException):
+ message = "Invalid Configuration"
+
+
class NotFound(TempestException):
message = "Object not found"
diff --git a/tempest/openstack.py b/tempest/openstack.py
index 3504589..862b517 100644
--- a/tempest/openstack.py
+++ b/tempest/openstack.py
@@ -1,4 +1,5 @@
import tempest.config
+from tempest import exceptions
from tempest.services.image import service as image_service
from tempest.services.nova.json.images_client import ImagesClient
from tempest.services.nova.json.flavors_client import FlavorsClient
@@ -8,7 +9,6 @@
from tempest.services.nova.json.security_groups_client \
import SecurityGroupsClient
from tempest.services.nova.json.floating_ips_client import FloatingIPsClient
-
from tempest.services.nova.json.keypairs_client import KeyPairsClient
@@ -19,82 +19,29 @@
Top level manager for all Openstack APIs
"""
self.config = tempest.config.TempestConfig()
+ username = self.config.identity.username
+ password = self.config.identity.password
+ tenant_name = self.config.identity.tenant_name
- if self.config.env.authentication == 'keystone_v2':
- self.servers_client = ServersClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url,
- self.config.nova.tenant_name)
- self.flavors_client = FlavorsClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url,
- self.config.nova.tenant_name)
- self.images_client = ImagesClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url,
- self.config.nova.tenant_name)
- self.limits_client = LimitsClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url,
- self.config.nova.tenant_name)
- self.extensions_client = ExtensionsClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url,
- self.config.nova.tenant_name)
- self.keypairs_client = KeyPairsClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url,
- self.config.nova.tenant_name)
- self.security_groups_client = SecurityGroupsClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url,
- self.config.nova.tenant_name)
- self.floating_ips_client = FloatingIPsClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url,
- self.config.nova.tenant_name)
+ if None in [username, password, tenant_name]:
+ raise exceptions.InvalidConfiguration(message="Missing complete \
+ user credentials.")
+ auth_url = self.config.identity.auth_url
+
+ if self.config.identity.strategy == 'keystone':
+ client_args = (self.config, username, password, auth_url,
+ tenant_name)
else:
- #Assuming basic/native authentication
- self.servers_client = ServersClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url)
- self.flavors_client = FlavorsClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url)
- self.images_client = ImagesClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url)
- self.limits_client = LimitsClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url)
- self.extensions_client = ExtensionsClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url)
- self.security_groups_client = SecurityGroupsClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url)
- self.keypairs_client = KeyPairsClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url)
- self.floating_ips_client = FloatingIPsClient(self.config,
- self.config.nova.username,
- self.config.nova.api_key,
- self.config.nova.auth_url)
+ client_args = (self.config, username, password, auth_url)
+
+ self.servers_client = ServersClient(*client_args)
+ self.flavors_client = FlavorsClient(*client_args)
+ self.images_client = ImagesClient(*client_args)
+ self.limits_client = LimitsClient(*client_args)
+ self.extensions_client = ExtensionsClient(*client_args)
+ self.keypairs_client = KeyPairsClient(*client_args)
+ self.security_groups_client = SecurityGroupsClient(*client_args)
+ self.floating_ips_client = FloatingIPsClient(*client_args)
class ServiceManager(object):
diff --git a/tempest/services/nova/json/extensions_client.py b/tempest/services/nova/json/extensions_client.py
index 8f26847..284a655 100644
--- a/tempest/services/nova/json/extensions_client.py
+++ b/tempest/services/nova/json/extensions_client.py
@@ -4,10 +4,10 @@
class ExtensionsClient(object):
- def __init__(self, config, username, key, auth_url, tenant_name=None):
+ def __init__(self, config, username, password, auth_url, tenant_name=None):
self.config = config
- catalog_type = self.config.nova.catalog_type
- self.client = rest_client.RestClient(config, username, key,
+ catalog_type = self.config.compute.catalog_type
+ self.client = rest_client.RestClient(config, username, password,
auth_url, catalog_type,
tenant_name)
diff --git a/tempest/services/nova/json/flavors_client.py b/tempest/services/nova/json/flavors_client.py
index 990990b..7d612d7 100644
--- a/tempest/services/nova/json/flavors_client.py
+++ b/tempest/services/nova/json/flavors_client.py
@@ -4,10 +4,10 @@
class FlavorsClient(object):
- def __init__(self, config, username, key, auth_url, tenant_name=None):
+ def __init__(self, config, username, password, auth_url, tenant_name=None):
self.config = config
- catalog_type = self.config.nova.catalog_type
- self.client = rest_client.RestClient(config, username, key,
+ catalog_type = self.config.compute.catalog_type
+ self.client = rest_client.RestClient(config, username, password,
auth_url, catalog_type,
tenant_name)
diff --git a/tempest/services/nova/json/floating_ips_client.py b/tempest/services/nova/json/floating_ips_client.py
index 8a179b9..3ab8f28 100644
--- a/tempest/services/nova/json/floating_ips_client.py
+++ b/tempest/services/nova/json/floating_ips_client.py
@@ -4,10 +4,10 @@
class FloatingIPsClient(object):
- def __init__(self, config, username, key, auth_url, tenant_name=None):
+ def __init__(self, config, username, password, auth_url, tenant_name=None):
self.config = config
- catalog_type = self.config.nova.catalog_type
- self.client = rest_client.RestClient(config, username, key,
+ catalog_type = self.config.compute.catalog_type
+ self.client = rest_client.RestClient(config, username, password,
auth_url, catalog_type,
tenant_name)
self.headers = {'Content-Type': 'application/json',
diff --git a/tempest/services/nova/json/images_client.py b/tempest/services/nova/json/images_client.py
index e4d2c65..5bf10ef 100644
--- a/tempest/services/nova/json/images_client.py
+++ b/tempest/services/nova/json/images_client.py
@@ -6,15 +6,15 @@
class ImagesClient(object):
- def __init__(self, config, username, key, auth_url, tenant_name=None):
+ def __init__(self, config, username, password, auth_url, tenant_name=None):
self.config = config
- catalog_type = self.config.nova.catalog_type
- self.client = rest_client.RestClient(config, username, key,
+ catalog_type = self.config.compute.catalog_type
+ self.client = rest_client.RestClient(config, username, password,
auth_url, catalog_type,
tenant_name)
- self.build_interval = self.config.nova.build_interval
- self.build_timeout = self.config.nova.build_timeout
+ self.build_interval = self.config.compute.build_interval
+ self.build_timeout = self.config.compute.build_timeout
self.headers = {'Content-Type': 'application/json',
'Accept': 'application/json'}
diff --git a/tempest/services/nova/json/keypairs_client.py b/tempest/services/nova/json/keypairs_client.py
index 9c912ef..a0bef15 100644
--- a/tempest/services/nova/json/keypairs_client.py
+++ b/tempest/services/nova/json/keypairs_client.py
@@ -4,10 +4,10 @@
class KeyPairsClient(object):
- def __init__(self, config, username, key, auth_url, tenant_name=None):
+ def __init__(self, config, username, password, auth_url, tenant_name=None):
self.config = config
- catalog_type = self.config.nova.catalog_type
- self.client = rest_client.RestClient(config, username, key,
+ catalog_type = self.config.compute.catalog_type
+ self.client = rest_client.RestClient(config, username, password,
auth_url, catalog_type,
tenant_name)
self.headers = {'Content-Type': 'application/json',
diff --git a/tempest/services/nova/json/limits_client.py b/tempest/services/nova/json/limits_client.py
index 93be33e..6f5f57a 100644
--- a/tempest/services/nova/json/limits_client.py
+++ b/tempest/services/nova/json/limits_client.py
@@ -4,10 +4,10 @@
class LimitsClient(object):
- def __init__(self, config, username, key, auth_url, tenant_name=None):
+ def __init__(self, config, username, password, auth_url, tenant_name=None):
self.config = config
- catalog_type = self.config.nova.catalog_type
- self.client = rest_client.RestClient(config, username, key,
+ catalog_type = self.config.compute.catalog_type
+ self.client = rest_client.RestClient(config, username, password,
auth_url, catalog_type,
tenant_name)
diff --git a/tempest/services/nova/json/security_groups_client.py b/tempest/services/nova/json/security_groups_client.py
index 0e6b6cf..29223ea 100644
--- a/tempest/services/nova/json/security_groups_client.py
+++ b/tempest/services/nova/json/security_groups_client.py
@@ -4,10 +4,10 @@
class SecurityGroupsClient(object):
- def __init__(self, config, username, key, auth_url, tenant_name=None):
+ def __init__(self, config, username, password, auth_url, tenant_name=None):
self.config = config
- catalog_type = self.config.nova.catalog_type
- self.client = rest_client.RestClient(config, username, key,
+ catalog_type = self.config.compute.catalog_type
+ self.client = rest_client.RestClient(config, username, password,
auth_url, catalog_type,
tenant_name)
self.headers = {'Content-Type': 'application/json',
diff --git a/tempest/services/nova/json/servers_client.py b/tempest/services/nova/json/servers_client.py
index e0a26de..35e5782 100644
--- a/tempest/services/nova/json/servers_client.py
+++ b/tempest/services/nova/json/servers_client.py
@@ -6,15 +6,15 @@
class ServersClient(object):
- def __init__(self, config, username, key, auth_url, tenant_name=None):
+ def __init__(self, config, username, password, auth_url, tenant_name=None):
self.config = config
- catalog_type = self.config.nova.catalog_type
- self.client = rest_client.RestClient(config, username, key,
+ catalog_type = self.config.compute.catalog_type
+ self.client = rest_client.RestClient(config, username, password,
auth_url, catalog_type,
tenant_name)
- self.build_interval = self.config.nova.build_interval
- self.build_timeout = self.config.nova.build_timeout
+ self.build_interval = self.config.compute.build_interval
+ self.build_timeout = self.config.compute.build_timeout
self.headers = {'Content-Type': 'application/json',
'Accept': 'application/json'}
diff --git a/tempest/tests/compute/test_server_addresses.py b/tempest/tests/compute/test_server_addresses.py
index 3416baf..4f4bfb3 100644
--- a/tempest/tests/compute/test_server_addresses.py
+++ b/tempest/tests/compute/test_server_addresses.py
@@ -12,8 +12,8 @@
cls.os = openstack.Manager()
cls.client = cls.os.servers_client
cls.config = cls.os.config
- cls.image_ref = cls.config.env.image_ref
- cls.flavor_ref = cls.config.env.flavor_ref
+ cls.image_ref = cls.config.compute.image_ref
+ cls.flavor_ref = cls.config.compute.flavor_ref
cls.name = rand_name('server')
resp, cls.server = cls.client.create_server(cls.name,
diff --git a/tempest/tests/test_flavors.py b/tempest/tests/test_flavors.py
index 3ddcb58..ac58dba 100644
--- a/tempest/tests/test_flavors.py
+++ b/tempest/tests/test_flavors.py
@@ -7,14 +7,14 @@
class FlavorsTest(unittest.TestCase):
- release = tempest.config.TempestConfig().env.release_name
+ release = tempest.config.TempestConfig().compute.release_name
@classmethod
def setUpClass(cls):
cls.os = openstack.Manager()
cls.client = cls.os.flavors_client
cls.config = cls.os.config
- cls.flavor_id = cls.config.env.flavor_ref
+ cls.flavor_id = cls.config.compute.flavor_ref
@attr(type='smoke')
def test_list_flavors(self):
diff --git a/tempest/tests/test_floating_ips_actions.py b/tempest/tests/test_floating_ips_actions.py
index e5862c1..1c0331c 100644
--- a/tempest/tests/test_floating_ips_actions.py
+++ b/tempest/tests/test_floating_ips_actions.py
@@ -15,8 +15,8 @@
cls.client = cls.os.floating_ips_client
cls.servers_client = cls.os.servers_client
cls.config = cls.os.config
- cls.image_ref = cls.config.env.image_ref
- cls.flavor_ref = cls.config.env.flavor_ref
+ cls.image_ref = cls.config.compute.image_ref
+ cls.flavor_ref = cls.config.compute.flavor_ref
#Server creation
resp, server = cls.servers_client.create_server('floating-server',
cls.image_ref,
diff --git a/tempest/tests/test_image_metadata.py b/tempest/tests/test_image_metadata.py
index 80f5a0a..50d4182 100644
--- a/tempest/tests/test_image_metadata.py
+++ b/tempest/tests/test_image_metadata.py
@@ -13,8 +13,8 @@
cls.servers_client = cls.os.servers_client
cls.client = cls.os.images_client
cls.config = cls.os.config
- cls.image_ref = cls.config.env.image_ref
- cls.flavor_ref = cls.config.env.flavor_ref
+ cls.image_ref = cls.config.compute.image_ref
+ cls.flavor_ref = cls.config.compute.flavor_ref
cls.ssh_timeout = cls.config.nova.ssh_timeout
name = rand_name('server')
diff --git a/tempest/tests/test_images.py b/tempest/tests/test_images.py
index e761034..c422708 100644
--- a/tempest/tests/test_images.py
+++ b/tempest/tests/test_images.py
@@ -14,7 +14,7 @@
class ImagesTest(unittest.TestCase):
create_image_enabled = tempest.config.TempestConfig().\
- env.create_image_enabled
+ compute.create_image_enabled
@classmethod
def setUpClass(cls):
@@ -22,9 +22,9 @@
cls.client = cls.os.images_client
cls.servers_client = cls.os.servers_client
cls.config = cls.os.config
- cls.image_ref = cls.config.env.image_ref
- cls.flavor_ref = cls.config.env.flavor_ref
- cls.create_image_enabled = cls.config.env.create_image_enabled
+ cls.image_ref = cls.config.compute.image_ref
+ cls.flavor_ref = cls.config.compute.flavor_ref
+ cls.create_image_enabled = cls.config.compute.create_image_enabled
@attr(type='smoke')
@unittest.skipUnless(create_image_enabled,
diff --git a/tempest/tests/test_keypairs.py b/tempest/tests/test_keypairs.py
index 53fcd0b..9f17922 100644
--- a/tempest/tests/test_keypairs.py
+++ b/tempest/tests/test_keypairs.py
@@ -8,7 +8,7 @@
class KeyPairsTest(unittest.TestCase):
- release = tempest.config.TempestConfig().env.release_name
+ release = tempest.config.TempestConfig().compute.release_name
@classmethod
def setUpClass(cls):
diff --git a/tempest/tests/test_list_images.py b/tempest/tests/test_list_images.py
index b81ee27..e63c447 100644
--- a/tempest/tests/test_list_images.py
+++ b/tempest/tests/test_list_images.py
@@ -20,8 +20,8 @@
cls.client = cls.os.images_client
cls.servers_client = cls.os.servers_client
cls.config = cls.os.config
- cls.image_ref = cls.config.env.image_ref
- cls.flavor_ref = cls.config.env.flavor_ref
+ cls.image_ref = cls.config.compute.image_ref
+ cls.flavor_ref = cls.config.compute.flavor_ref
name = rand_name('server')
resp, cls.server1 = cls.servers_client.create_server(name,
diff --git a/tempest/tests/test_list_servers.py b/tempest/tests/test_list_servers.py
index fa95d54..de69cb3 100644
--- a/tempest/tests/test_list_servers.py
+++ b/tempest/tests/test_list_servers.py
@@ -16,10 +16,10 @@
cls.client = cls.os.servers_client
cls.images_client = cls.os.images_client
cls.config = cls.os.config
- cls.image_ref = cls.config.env.image_ref
- cls.flavor_ref = cls.config.env.flavor_ref
- cls.image_ref_alt = cls.config.env.image_ref_alt
- cls.flavor_ref_alt = cls.config.env.flavor_ref_alt
+ cls.image_ref = cls.config.compute.image_ref
+ cls.flavor_ref = cls.config.compute.flavor_ref
+ cls.image_ref_alt = cls.config.compute.image_ref_alt
+ cls.flavor_ref_alt = cls.config.compute.flavor_ref_alt
# Check to see if the alternate image ref actually exists...
images_client = cls.os.images_client
diff --git a/tempest/tests/test_server_actions.py b/tempest/tests/test_server_actions.py
index 46e7ed5..d9f6a1e 100644
--- a/tempest/tests/test_server_actions.py
+++ b/tempest/tests/test_server_actions.py
@@ -11,19 +11,19 @@
class ServerActionsTest(unittest.TestCase):
- resize_available = tempest.config.TempestConfig().env.resize_available
+ resize_available = tempest.config.TempestConfig().compute.resize_available
@classmethod
def setUpClass(cls):
cls.os = openstack.Manager()
cls.client = cls.os.servers_client
cls.config = cls.os.config
- cls.image_ref = cls.config.env.image_ref
- cls.image_ref_alt = cls.config.env.image_ref_alt
- cls.flavor_ref = cls.config.env.flavor_ref
- cls.flavor_ref_alt = cls.config.env.flavor_ref_alt
- cls.build_interval = cls.config.nova.build_interval
- cls.build_timeout = cls.config.nova.build_timeout
+ cls.image_ref = cls.config.compute.image_ref
+ cls.image_ref_alt = cls.config.compute.image_ref_alt
+ cls.flavor_ref = cls.config.compute.flavor_ref
+ cls.flavor_ref_alt = cls.config.compute.flavor_ref_alt
+ cls.build_interval = cls.config.compute.build_interval
+ cls.build_timeout = cls.config.compute.build_timeout
def setUp(self):
self.name = rand_name('server')
diff --git a/tempest/tests/test_server_metadata.py b/tempest/tests/test_server_metadata.py
index 18491ca..e2dc111 100644
--- a/tempest/tests/test_server_metadata.py
+++ b/tempest/tests/test_server_metadata.py
@@ -11,8 +11,8 @@
cls.os = openstack.Manager()
cls.client = cls.os.servers_client
cls.config = cls.os.config
- cls.image_ref = cls.config.env.image_ref
- cls.flavor_ref = cls.config.env.flavor_ref
+ cls.image_ref = cls.config.compute.image_ref
+ cls.flavor_ref = cls.config.compute.flavor_ref
#Create a server to be used for all read only tests
name = rand_name('server')
diff --git a/tempest/tests/test_server_personality.py b/tempest/tests/test_server_personality.py
index e81f5fa..3b516c5 100644
--- a/tempest/tests/test_server_personality.py
+++ b/tempest/tests/test_server_personality.py
@@ -13,8 +13,8 @@
cls.os = openstack.Manager()
cls.client = cls.os.servers_client
cls.config = cls.config = cls.os.config
- cls.image_ref = cls.config.env.image_ref
- cls.flavor_ref = cls.config.env.flavor_ref
+ cls.image_ref = cls.config.compute.image_ref
+ cls.flavor_ref = cls.config.compute.flavor_ref
cls.user_client = cls.os.limits_client
def test_personality_files_exceed_limit(self):
diff --git a/tempest/tests/test_servers.py b/tempest/tests/test_servers.py
index 71d9aa7..cdb2e89 100644
--- a/tempest/tests/test_servers.py
+++ b/tempest/tests/test_servers.py
@@ -12,8 +12,8 @@
cls.os = openstack.Manager()
cls.client = cls.os.servers_client
cls.config = cls.os.config
- cls.image_ref = cls.config.env.image_ref
- cls.flavor_ref = cls.config.env.flavor_ref
+ cls.image_ref = cls.config.compute.image_ref
+ cls.flavor_ref = cls.config.compute.flavor_ref
@attr(type='smoke')
def test_create_delete_server(self):
diff --git a/tempest/tests/test_servers_negative.py b/tempest/tests/test_servers_negative.py
index b038b61..f8de727 100644
--- a/tempest/tests/test_servers_negative.py
+++ b/tempest/tests/test_servers_negative.py
@@ -7,16 +7,16 @@
class ServersNegativeTest(unittest.TestCase):
release = tempest.config.TempestConfig().\
- env.release_name
+ compute.release_name
@classmethod
def setUpClass(cls):
cls.os = openstack.Manager()
cls.client = cls.os.servers_client
cls.config = cls.os.config
- cls.image_ref = cls.config.env.image_ref
- cls.flavor_ref = cls.config.env.flavor_ref
- cls.ssh_timeout = cls.config.nova.ssh_timeout
+ cls.image_ref = cls.config.compute.image_ref
+ cls.flavor_ref = cls.config.compute.flavor_ref
+ cls.ssh_timeout = cls.config.compute.ssh_timeout
def test_server_name_blank(self):
"""Create a server with name parameter empty"""
diff --git a/tempest/tools/conf_from_devstack b/tempest/tools/conf_from_devstack
index 8baa8fb..81df659 100755
--- a/tempest/tools/conf_from_devstack
+++ b/tempest/tools/conf_from_devstack
@@ -135,17 +135,15 @@
if options.verbose:
print "Found base image with UUID %s" % conf_settings['base_image_uuid']
- tempest_conf = """[nova]
+ tempest_conf = """[identity]
host=%(service_host)s
port=%(service_port)s
-apiVer=%(identity_api_version)s
+api_version=%(identity_api_version)s
path=tokens
user=%(user)s
-api_key=%(password)s
+password=%(password)s
tenant_name=%(user)s
-ssh_timeout=300
-build_interval=10
-build_timeout=600
+strategy=keystone
[image]
host = %(service_host)s
@@ -157,14 +155,16 @@
strategy = keystone
service_token = servicetoken
-[environment]
+[compute]
image_ref=%(base_image_uuid)s
image_ref_alt=%(base_image_uuid)s
flavor_ref=1
flavor_ref_alt=2
create_image_enabled=true
-resize_available=true
-authentication=keystone_v2""" % conf_settings
+resize_available=false
+ssh_timeout=300
+build_interval=10
+build_timeout=600""" % conf_settings
if options.outfile:
outfile_path = os.path.abspath(options.outfile)