Credentials Configuration changes

* Credentials are moved to the identity section
* If the compute admin user defined in the compute-admin section it takes precedence
* The region just defined in the identity section

Change-Id: I1241116ce9312c90656a78235a4a91dd31460761
diff --git a/etc/tempest.conf.sample b/etc/tempest.conf.sample
index fc20d0b..53892e8 100644
--- a/etc/tempest.conf.sample
+++ b/etc/tempest.conf.sample
@@ -18,6 +18,28 @@
 # The identity region
 region = RegionOne
 
+# This should be the username of a user WITHOUT administrative privileges
+username = demo
+# The above non-administrative user's password
+password = secret
+# The above non-administrative user's tenant name
+tenant_name = demo
+
+# This should be the username of an alternate user WITHOUT
+# administrative privileges
+alt_username = alt_demo
+# The above non-administrative user's password
+alt_password = secret
+# The above non-administrative user's tenant name
+alt_tenant_name = alt_demo
+
+# This should be the username of a user WITH administrative privileges
+admin_username = admin
+# The above non-administrative user's password
+admin_password = secret
+# The above non-administrative user's tenant name
+admin_tenant_name = admin
+
 [compute]
 # This section contains configuration options used when executing tests
 # against the OpenStack Compute API.
@@ -34,24 +56,6 @@
 # are known.
 allow_tenant_reuse = true
 
-# This should be the username of a user WITHOUT administrative privileges
-username = demo
-# The above non-administrative user's password
-password = pass
-# The above non-administrative user's tenant name
-tenant_name = demo
-
-# This should be the username of an alternate user WITHOUT
-# administrative privileges
-alt_username = alt_demo
-# The above non-administrative user's password
-alt_password = pass
-# The above non-administrative user's tenant name
-alt_tenant_name = alt_demo
-
-# The compute region
-region = RegionOne
-
 # Reference data for tests. The ref and ref_alt should be
 # distinct images/flavors.
 image_ref = {$IMAGE_ID}
@@ -73,13 +77,13 @@
 run_ssh = false
 
 # Name of a user used to authenticated to an instance
-ssh_user = {$SSH_USER}
+ssh_user = cirros
 
 # Network id used for SSH (public, private, etc)
-network_for_ssh = {$SSH_NETWORK}
+network_for_ssh = private
 
 # IP version of the address used for SSH
-ip_version_for_ssh = {$SSH_IP_VERSION}
+ip_version_for_ssh = 4
 
 # Number of seconds to wait to authenticate to an instance
 ssh_timeout = 300
@@ -107,6 +111,18 @@
 # whitebox test cases, which look at internal Nova database state,
 # SSH into VMs to check instance state, etc.
 
+# Run live migration tests (requires 2 hosts)
+live_migration_available = false
+
+# Use block live migration (Otherwise, non-block migration will be
+# performed, which requires XenServer pools in case of using XS)
+use_block_migration_for_live_migration = false
+
+# By default, rely on the status of the diskConfig extension to
+# decide if to execute disk config tests. When set to false, tests
+# are forced to skip, regardless of the extension status
+disk_config_enabled_override = true
+
 # Should we run whitebox tests for Compute?
 whitebox_enabled = true
 
@@ -119,23 +135,20 @@
 # Directory containing nova binaries such as nova-manage
 bin_dir = /usr/local/bin
 
+# Connection string to the database of Compute service
+db_uri = mysql://nova:secret@localhost/nova
+
 # Path to a private key file for SSH access to remote hosts
 path_to_private_key = /home/user/.ssh/id_rsa
 
-# Connection string to the database of Compute service
-db_uri = mysql://user:pass@localhost/nova
-
-# Run live migration tests (requires 2 hosts)
-live_migration_available = false
-
-# Use block live migration (Otherwise, non-block migration will be
-# performed, which requires XenServer pools in case of using XS)
-use_block_migration_for_live_migration = false
-
-# By default, rely on the status of the diskConfig extension to
-# decide if to execute disk config tests. When set to false, tests
-# are forced to skip, regardless of the extension status
-disk_config_enabled_override = true
+[compute-admin]
+# This should be the username of a user WITH administrative privileges
+# If not defined the admin user from the identity section will be used
+username =
+# The above administrative user's password
+password =
+# The above administrative user's tenant name
+tenant_name =
 
 [image]
 # This section contains configuration options used when executing tests
@@ -155,18 +168,6 @@
 # Port that the Image API is running on
 port = 9292
 
-[compute-admin]
-# This section contains configuration options for an administrative
-# user of the Compute API. These options are used in tests that stress
-# the admin-only parts of the Compute API
-
-# This should be the username of a user WITH administrative privileges
-username = admin
-# The above administrative user's password
-password = pass
-# The above administrative user's tenant name
-tenant_name = admin
-
 [network]
 # This section contains configuration options used when executing tests
 # against the OpenStack Network API.
@@ -176,13 +177,6 @@
 # Catalog type of the Quantum Service
 catalog_type = network
 
-# This should be the username of a user WITHOUT administrative privileges
-username = demo
-# The above non-administrative user's password
-password = pass
-# The above non-administrative user's tenant name
-tenant_name = demo
-
 # A large private cidr block from which to allocate smaller blocks for
 # tenant networks.
 tenant_network_cidr = 10.100.0.0/16
@@ -229,9 +223,6 @@
 # this value as "object-store"
 catalog_type = object-store
 
-# The object-store region
-region = RegionOne
-
 # Number of seconds to time on waiting for a container to container
 # synchronization complete
 container_sync_timeout = 120
@@ -252,9 +243,6 @@
 aws_access =
 aws_secret =
 
-#Region
-aws_region = RegionOne
-
 #Image materials for S3 upload
 # ALL content of the specified directory will be uploaded to S3
 s3_materials_path = /opt/stack/devstack/files/images/s3-materials/cirros-0.3.0
diff --git a/stress/tools/nova_destroy_all.py b/stress/tools/nova_destroy_all.py
index 0070e72..00d8883 100755
--- a/stress/tools/nova_destroy_all.py
+++ b/stress/tools/nova_destroy_all.py
@@ -21,10 +21,9 @@
 
 # get the environment variables for credentials
 identity = tempest.config.TempestConfig().identity
-compute = tempest.config.TempestConfig().compute
 
-nt = client.Client(compute.username, compute.password,
-                   compute.tenant_name, identity.uri)
+nt = client.Client(identity.username, identity.password,
+                   identity.tenant_name, identity.uri)
 
 flavor_list = nt.flavors.list()
 server_list = nt.servers.list()
diff --git a/stress/tools/nova_status.py b/stress/tools/nova_status.py
index f9bc707..ee20282 100755
--- a/stress/tools/nova_status.py
+++ b/stress/tools/nova_status.py
@@ -21,12 +21,11 @@
 
 # get the environment variables for credentials
 identity = tempest.config.TempestConfig().identity
-compute = tempest.config.TempestConfig().compute
-print compute.username, compute.password,\
-    compute.tenant_name, identity.uri
+print identity.username, identity.password,\
+    identity.tenant_name, identity.uri
 
-nt = client.Client(compute.username, compute.password,
-                   compute.tenant_name, identity.uri)
+nt = client.Client(identity.username, identity.password,
+                   identity.tenant_name, identity.uri)
 
 flavor_list = nt.flavors.list()
 server_list = nt.servers.list()
diff --git a/tempest/clients.py b/tempest/clients.py
index 801bdcf..29e83bf 100644
--- a/tempest/clients.py
+++ b/tempest/clients.py
@@ -156,9 +156,9 @@
 
         # If no creds are provided, we fall back on the defaults
         # in the config file for the Compute API.
-        self.username = username or self.config.compute.username
-        self.password = password or self.config.compute.password
-        self.tenant_name = tenant_name or self.config.compute.tenant_name
+        self.username = username or self.config.identity.username
+        self.password = password or self.config.identity.password
+        self.tenant_name = tenant_name or self.config.identity.tenant_name
 
         if None in (self.username, self.password, self.tenant_name):
             msg = ("Missing required credentials. "
@@ -208,21 +208,6 @@
             AccountClientCustomizedHeader(*client_args)
 
 
-class NonAdminManager(Manager):
-
-    """
-    Manager object that uses the alt_XXX credentials for its
-    managed client objects
-    """
-
-    def __init__(self, interface='json'):
-        conf = config.TempestConfig()
-        super(NonAdminManager, self).__init__(conf.compute.username,
-                                              conf.compute.password,
-                                              conf.compute.tenant_name,
-                                              interface=interface)
-
-
 class AltManager(Manager):
 
     """
@@ -232,26 +217,42 @@
 
     def __init__(self):
         conf = config.TempestConfig()
-        super(AltManager, self).__init__(conf.compute.alt_username,
-                                         conf.compute.alt_password,
-                                         conf.compute.alt_tenant_name)
+        super(AltManager, self).__init__(conf.identity.alt_username,
+                                         conf.identity.alt_password,
+                                         conf.identity.alt_tenant_name)
 
 
 class AdminManager(Manager):
 
     """
-    Manager object that uses the alt_XXX credentials for its
+    Manager object that uses the admin credentials for its
     managed client objects
     """
 
     def __init__(self, interface='json'):
         conf = config.TempestConfig()
-        super(AdminManager, self).__init__(conf.compute_admin.username,
-                                           conf.compute_admin.password,
-                                           conf.compute_admin.tenant_name,
+        super(AdminManager, self).__init__(conf.identity.admin_username,
+                                           conf.identity.admin_password,
+                                           conf.identity.admin_tenant_name,
                                            interface=interface)
 
 
+class ComputeAdminManager(Manager):
+
+    """
+    Manager object that uses the compute_admin credentials for its
+    managed client objects
+    """
+
+    def __init__(self, interface='json'):
+        conf = config.TempestConfig()
+        base = super(ComputeAdminManager, self)
+        base.__init__(conf.compute_admin.username,
+                      conf.compute_admin.password,
+                      conf.compute_admin.tenant_name,
+                      interface=interface)
+
+
 class ServiceManager(object):
 
     """
diff --git a/tempest/common/rest_client.py b/tempest/common/rest_client.py
index 4213b10..5710f4c 100644
--- a/tempest/common/rest_client.py
+++ b/tempest/common/rest_client.py
@@ -44,7 +44,7 @@
         self.token = None
         self.base_url = None
         self.config = config
-        self.region = {'compute': self.config.compute.region}
+        self.region = {'compute': self.config.identity.region}
         self.endpoint_url = 'publicURL'
         self.strategy = self.config.identity.strategy
         self.headers = {'Content-Type': 'application/%s' % self.TYPE,
diff --git a/tempest/config.py b/tempest/config.py
index e348cce..a166093 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -58,8 +58,42 @@
                help="Which auth method does the environment use? "
                     "(basic|keystone)"),
     cfg.StrOpt('region',
-               default=None,
+               default='RegionOne',
                help="The identity region name to use."),
+    cfg.StrOpt('username',
+               default='demo',
+               help="Username to use for Nova API requests."),
+    cfg.StrOpt('tenant_name',
+               default='demo',
+               help="Tenant name to use for Nova API requests."),
+    cfg.StrOpt('password',
+               default='pass',
+               help="API key to use when authenticating.",
+               secret=True),
+    cfg.StrOpt('alt_username',
+               default=None,
+               help="Username of alternate user to use for Nova API "
+                    "requests."),
+    cfg.StrOpt('alt_tenant_name',
+               default=None,
+               help="Alternate user's Tenant name to use for Nova API "
+                    "requests."),
+    cfg.StrOpt('alt_password',
+               default=None,
+               help="API key to use when authenticating as alternate user.",
+               secret=True),
+    cfg.StrOpt('admin_username',
+               default='admin',
+               help="Administrative Username to use for"
+                    "Keystone API requests."),
+    cfg.StrOpt('admin_tenant_name',
+               default='admin',
+               help="Administrative Tenant name to use for Keystone API "
+                    "requests."),
+    cfg.StrOpt('admin_password',
+               default='pass',
+               help="API key to use when authenticating as admin.",
+               secret=True),
 ]
 
 
@@ -97,31 +131,6 @@
                      "instead of failing because of the conflict. Note that "
                      "this would result in the tenant being deleted at the "
                      "end of a subsequent successful run."),
-    cfg.StrOpt('username',
-               default='demo',
-               help="Username to use for Nova API requests."),
-    cfg.StrOpt('tenant_name',
-               default='demo',
-               help="Tenant name to use for Nova API requests."),
-    cfg.StrOpt('password',
-               default='pass',
-               help="API key to use when authenticating.",
-               secret=True),
-    cfg.StrOpt('alt_username',
-               default=None,
-               help="Username of alternate user to use for Nova API "
-                    "requests."),
-    cfg.StrOpt('alt_tenant_name',
-               default=None,
-               help="Alternate user's Tenant name to use for Nova API "
-                    "requests."),
-    cfg.StrOpt('alt_password',
-               default=None,
-               help="API key to use when authenticating as alternate user.",
-               secret=True),
-    cfg.StrOpt('region',
-               default=None,
-               help="The compute region name to use."),
     cfg.StrOpt('image_ref',
                default="{$IMAGE_ID}",
                help="Valid secondary image reference to be used in tests."),
@@ -180,6 +189,14 @@
     cfg.StrOpt('log_level',
                default="ERROR",
                help="Level for logging compute API calls."),
+    cfg.StrOpt('path_to_private_key',
+               default=None,
+               help="Path to a private key file for SSH access to remote "
+                    "hosts"),
+    cfg.BoolOpt('disk_config_enabled_override',
+                default=True,
+                help="If false, skip config tests regardless of the "
+                     "extension status"),
     cfg.BoolOpt('whitebox_enabled',
                 default=False,
                 help="Does the test environment support whitebox tests for "
@@ -196,14 +213,6 @@
     cfg.StrOpt('bin_dir',
                default="/usr/local/bin/",
                help="Directory containing nova binaries such as nova-manage"),
-    cfg.StrOpt('path_to_private_key',
-               default=None,
-               help="Path to a private key file for SSH access to remote "
-                    "hosts"),
-    cfg.BoolOpt('disk_config_enabled_override',
-                default=True,
-                help="If false, skip config tests regardless of the "
-                     "extension status"),
 ]
 
 
@@ -325,9 +334,6 @@
     cfg.StrOpt('catalog_type',
                default='object-store',
                help="Catalog type of the Object-Storage service."),
-    cfg.StrOpt('region',
-               default=None,
-               help='The object-store region name to use.'),
     cfg.StrOpt('container_sync_timeout',
                default=120,
                help="Number of seconds to time on waiting for a container"
@@ -360,9 +366,6 @@
     cfg.StrOpt('aws_access',
                default=None,
                help="AWS Access Key"),
-    cfg.StrOpt('aws_region',
-               default=None,
-               help="AWS Region"),
     cfg.StrOpt('s3_materials_path',
                default="/opt/stack/devstack/files/images/"
                        "s3-materials/cirros-0.3.0",
@@ -448,17 +451,21 @@
 
         register_compute_opts(cfg.CONF)
         register_identity_opts(cfg.CONF)
-        register_compute_admin_opts(cfg.CONF)
         register_image_opts(cfg.CONF)
         register_network_opts(cfg.CONF)
         register_volume_opts(cfg.CONF)
         register_object_storage_opts(cfg.CONF)
         register_boto_opts(cfg.CONF)
+        register_compute_admin_opts(cfg.CONF)
         self.compute = cfg.CONF.compute
-        self.compute_admin = cfg.CONF['compute-admin']
         self.identity = cfg.CONF.identity
         self.images = cfg.CONF.image
         self.network = cfg.CONF.network
         self.volume = cfg.CONF.volume
         self.object_storage = cfg.CONF['object-storage']
         self.boto = cfg.CONF.boto
+        self.compute_admin = cfg.CONF['compute-admin']
+        if not self.compute_admin.username:
+            self.compute_admin.username = self.identity.admin_username
+            self.compute_admin.password = self.identity.admin_password
+            self.compute_admin.tenant_name = self.identity.admin_tenant_name
diff --git a/tempest/manager.py b/tempest/manager.py
index ef9eed4..4137ec3 100644
--- a/tempest/manager.py
+++ b/tempest/manager.py
@@ -114,11 +114,11 @@
         # identified user, so a new client needs to be created for
         # each user that operations need to be performed for.
         if not username:
-            username = self.config.compute.username
+            username = self.config.identity.username
         if not password:
-            password = self.config.compute.password
+            password = self.config.identity.password
         if not tenant_name:
-            tenant_name = self.config.compute.tenant_name
+            tenant_name = self.config.identity.tenant_name
 
         if None in (username, password, tenant_name):
             msg = ("Missing required credentials for compute client. "
@@ -153,18 +153,17 @@
         # This identity client is not intended to check the security
         # of the identity service, so use admin credentials by default.
         if not username:
-            username = self.config.compute_admin.username
+            username = self.config.identity.admin_username
         if not password:
-            password = self.config.compute_admin.password
+            password = self.config.identity.admin_password
         if not tenant_name:
-            tenant_name = self.config.compute_admin.tenant_name
+            tenant_name = self.config.identity.admin_tenant_name
 
         if None in (username, password, tenant_name):
             msg = ("Missing required credentials for identity client. "
                    "username: %(username)s, password: %(password)s, "
                    "tenant_name: %(tenant_name)s") % locals()
             raise exceptions.InvalidConfiguration(msg)
-        #TODO(afazekas): Above is a code dpulication, net to be resolved
 
         auth_url = self.config.identity.uri
         dscv = self.config.identity.disable_ssl_certificate_validation
@@ -182,9 +181,9 @@
         # preferable to authenticating as a specific user because
         # working with certain resources (public routers and networks)
         # often requires admin privileges anyway.
-        username = self.config.compute_admin.username
-        password = self.config.compute_admin.password
-        tenant_name = self.config.compute_admin.tenant_name
+        username = self.config.identity.admin_username
+        password = self.config.identity.admin_password
+        tenant_name = self.config.identity.admin_tenant_name
 
         if None in (username, password, tenant_name):
             msg = ("Missing required credentials for network client. "
@@ -223,9 +222,9 @@
 
         # If no creds are provided, we fall back on the defaults
         # in the config file for the Compute API.
-        username = username or self.config.compute.username
-        password = password or self.config.compute.password
-        tenant_name = tenant_name or self.config.compute.tenant_name
+        username = username or self.config.identity.username
+        password = password or self.config.identity.password
+        tenant_name = tenant_name or self.config.identity.tenant_name
 
         if None in (username, password, tenant_name):
             msg = ("Missing required credentials. "
@@ -270,9 +269,9 @@
     def __init__(self):
         conf = tempest.config.TempestConfig()
         super(ComputeFuzzClientAltManager, self).__init__(
-            conf.compute.alt_username,
-            conf.compute.alt_password,
-            conf.compute.alt_tenant_name)
+            conf.identity.alt_username,
+            conf.identity.alt_password,
+            conf.identity.alt_tenant_name)
 
 
 class ComputeFuzzClientAdminManager(Manager):
diff --git a/tempest/services/boto/clients.py b/tempest/services/boto/clients.py
index 9cfe234..228e826 100644
--- a/tempest/services/boto/clients.py
+++ b/tempest/services/boto/clients.py
@@ -35,7 +35,7 @@
         aws_secret = config.boto.aws_secret
         purl = urlparse.urlparse(config.boto.ec2_url)
 
-        region = RegionInfo(name=config.boto.aws_region,
+        region = RegionInfo(name=config.identity.region,
                             endpoint=purl.hostname)
         port = purl.port
         if port is None:
diff --git a/tempest/services/image/service.py b/tempest/services/image/service.py
index 270bf03..66ba219 100644
--- a/tempest/services/image/service.py
+++ b/tempest/services/image/service.py
@@ -44,9 +44,9 @@
             dscv = self.config.identity.disable_ssl_certificate_validation
             auth_url = self.config.identity.uri
             keystone = keystoneclient.v2_0.client.Client(
-                    username=config.compute.username,
-                    password=config.compute.password,
-                    tenant_name=config.compute.tenant_name,
+                    username=config.identity.username,
+                    password=config.identity.password,
+                    tenant_name=config.identity.tenant_name,
                     auth_url=auth_url,
                     insecure=dscv)
             token = keystone.auth_token
diff --git a/tempest/tests/compute/__init__.py b/tempest/tests/compute/__init__.py
index a00ec77..398f982 100644
--- a/tempest/tests/compute/__init__.py
+++ b/tempest/tests/compute/__init__.py
@@ -69,11 +69,11 @@
     if CONFIG.compute.allow_tenant_isolation:
         MULTI_USER = True
     else:
-        user1 = CONFIG.compute.username
-        user2 = CONFIG.compute.alt_username
+        user1 = CONFIG.identity.username
+        user2 = CONFIG.identity.alt_username
         if user2 and user1 != user2:
-            user2_password = CONFIG.compute.alt_password
-            user2_tenant_name = CONFIG.compute.alt_tenant_name
+            user2_password = CONFIG.identity.alt_password
+            user2_tenant_name = CONFIG.identity.alt_tenant_name
             if not user2_password or not user2_tenant_name:
                 msg = ("Alternate user specified but not alternate "
                        "tenant or password: alt_tenant_name=%s alt_password=%s"
diff --git a/tempest/tests/compute/admin/test_quotas.py b/tempest/tests/compute/admin/test_quotas.py
index eaf245a..2c2e5da 100644
--- a/tempest/tests/compute/admin/test_quotas.py
+++ b/tempest/tests/compute/admin/test_quotas.py
@@ -27,14 +27,14 @@
     @classmethod
     def setUpClass(cls):
         super(QuotasTest, cls).setUpClass()
-        adm_user = cls.config.compute_admin.username
-        adm_pass = cls.config.compute_admin.password
-        adm_tenant = cls.config.compute_admin.tenant_name
+        c_adm_user = cls.config.compute_admin.username
+        c_adm_pass = cls.config.compute_admin.password
+        c_adm_tenant = cls.config.compute_admin.tenant_name
         auth_url = cls.config.identity.uri
 
-        cls.adm_client = adm_quotas.AdminQuotasClient(cls.config, adm_user,
-                                                      adm_pass, auth_url,
-                                                      adm_tenant)
+        cls.adm_client = adm_quotas.AdminQuotasClient(cls.config, c_adm_user,
+                                                      c_adm_pass, auth_url,
+                                                      c_adm_tenant)
         cls.client = cls.os.quotas_client
         cls.identity_admin_client = cls._get_identity_admin_client()
         resp, tenants = cls.identity_admin_client.list_tenants()
@@ -43,7 +43,7 @@
             cls.demo_tenant_id = cls.isolated_creds[0][0]['tenantId']
         else:
             cls.demo_tenant_id = [tnt['id'] for tnt in tenants if tnt['name']
-                                  == cls.config.compute.tenant_name][0]
+                                  == cls.config.identity.tenant_name][0]
 
         cls.adm_tenant_id = [tnt['id'] for tnt in tenants if tnt['name'] ==
                              cls.config.compute_admin.tenant_name][0]
diff --git a/tempest/tests/compute/base.py b/tempest/tests/compute/base.py
index 3f3b3e8..9e2e883 100644
--- a/tempest/tests/compute/base.py
+++ b/tempest/tests/compute/base.py
@@ -92,8 +92,8 @@
 
         return (
             cls.config,
-            cls.config.compute_admin.username,
-            cls.config.compute_admin.password,
+            cls.config.identity.admin_username,
+            cls.config.identity.admin_password,
             cls.config.identity.uri
         )
 
@@ -256,16 +256,16 @@
     @classmethod
     def setUpClass(cls):
         cls.config = config.TempestConfig()
-        cls.admin_username = cls.config.compute_admin.username
-        cls.admin_password = cls.config.compute_admin.password
-        cls.admin_tenant = cls.config.compute_admin.tenant_name
+        cls.admin_username = cls.config.identity.admin_username
+        cls.admin_password = cls.config.identity.admin_password
+        cls.admin_tenant = cls.config.identity.admin_tenant_name
 
         if not cls.admin_username and cls.admin_password and cls.admin_tenant:
             msg = ("Missing Compute Admin API credentials "
                    "in configuration.")
             raise nose.SkipTest(msg)
 
-        cls.os = clients.AdminManager(interface=cls._interface)
+        cls.os = clients.ComputeAdminManager(interface=cls._interface)
 
 
 class BaseComputeAdminTestJSON(BaseComputeAdminTest):
diff --git a/tempest/tests/identity/base.py b/tempest/tests/identity/base.py
index 125e46c..9c318cd 100644
--- a/tempest/tests/identity/base.py
+++ b/tempest/tests/identity/base.py
@@ -35,7 +35,7 @@
 
         cls.data = DataGenerator(cls.client)
 
-        os = clients.NonAdminManager(interface=cls._interface)
+        os = clients.Manager(interface=cls._interface)
         cls.non_admin_client = os.identity_client
 
     @classmethod
diff --git a/tempest/tests/volume/admin/base.py b/tempest/tests/volume/admin/base.py
index d35efbc..364be54 100644
--- a/tempest/tests/volume/admin/base.py
+++ b/tempest/tests/volume/admin/base.py
@@ -32,9 +32,9 @@
     def setUpClass(cls):
         super(BaseVolumeAdminTest, cls).setUpClass()
         cls.config = config.TempestConfig()
-        cls.adm_user = cls.config.compute_admin.username
-        cls.adm_pass = cls.config.compute_admin.password
-        cls.adm_tenant = cls.config.compute_admin.tenant_name
+        cls.adm_user = cls.config.identity.admin_username
+        cls.adm_pass = cls.config.identity.admin_password
+        cls.adm_tenant = cls.config.identity.admin_tenant_name
         cls.auth_url = cls.config.identity.uri
 
         if not cls.adm_user and cls.adm_pass and cls.adm_tenant:
diff --git a/tempest/tests/volume/admin/test_volume_types.py b/tempest/tests/volume/admin/test_volume_types.py
index a907a79..cef8428 100644
--- a/tempest/tests/volume/admin/test_volume_types.py
+++ b/tempest/tests/volume/admin/test_volume_types.py
@@ -25,9 +25,9 @@
     @classmethod
     def setUpClass(cls):
         super(VolumeTypesTest, cls).setUpClass()
-        adm_user = cls.config.compute_admin.username
-        adm_pass = cls.config.compute_admin.password
-        adm_tenant = cls.config.compute_admin.tenant_name
+        adm_user = cls.config.identity.admin_username
+        adm_pass = cls.config.identity.admin_password
+        adm_tenant = cls.config.identity.admin_tenant_name
         auth_url = cls.config.identity.uri
 
         cls.client = volume_types_client.VolumeTypesClientJSON(cls.config,
diff --git a/tempest/tests/volume/admin/test_volume_types_extra_specs.py b/tempest/tests/volume/admin/test_volume_types_extra_specs.py
index c5a1fa9..d3fd8e5 100644
--- a/tempest/tests/volume/admin/test_volume_types_extra_specs.py
+++ b/tempest/tests/volume/admin/test_volume_types_extra_specs.py
@@ -26,9 +26,9 @@
     def setUpClass(cls):
         super(VolumeTypesExtraSpecsTest, cls).setUpClass()
 
-        adm_user = cls.config.compute_admin.username
-        adm_pass = cls.config.compute_admin.password
-        adm_tenant = cls.config.compute_admin.tenant_name
+        adm_user = cls.config.identity.admin_username
+        adm_pass = cls.config.identity.admin_password
+        adm_tenant = cls.config.identity.admin_tenant_name
         auth_url = cls.config.identity.uri
 
         cls.client = volume_types_client.VolumeTypesClientJSON(cls.config,
diff --git a/tempest/tests/volume/base.py b/tempest/tests/volume/base.py
index 1b35170..33bae45 100644
--- a/tempest/tests/volume/base.py
+++ b/tempest/tests/volume/base.py
@@ -73,7 +73,7 @@
         """
         Returns an instance of the Identity Admin API client
         """
-        os = clients.AdminManager()
+        os = clients.ComputeAdminManager()
         return os.identity_client
 
     @classmethod
diff --git a/tools/tempest_coverage.py b/tools/tempest_coverage.py
index 6e7ac04..267eafa 100755
--- a/tools/tempest_coverage.py
+++ b/tools/tempest_coverage.py
@@ -138,9 +138,9 @@
 
 def main(argv):
     CLI = parse_opts(argv)
-    client_args = (CONF, CONF.compute_admin.username,
-                   CONF.compute_admin.password, CONF.identity.uri,
-                   CONF.compute_admin.tenant_name)
+    client_args = (CONF, CONF.identity.admin_username,
+                   CONF.identity.admin_password, CONF.identity.uri,
+                   CONF.identity.admin_tenant_name)
     coverage_client = CoverageClientJSON(*client_args)
 
     if CLI.command == 'start':