Merge "Remove creds providers dependency from clients"
This commit is contained in:
commit
e1e6e7825d
|
@ -40,8 +40,13 @@ to avoid circular dependencies."""
|
||||||
|
|
||||||
# Subset of the parameters of credential providers that depend on configuration
|
# Subset of the parameters of credential providers that depend on configuration
|
||||||
def _get_common_provider_params(identity_version):
|
def _get_common_provider_params(identity_version):
|
||||||
|
if identity_version == 'v3':
|
||||||
|
identity_uri = CONF.identity.uri_v3
|
||||||
|
elif identity_version == 'v2':
|
||||||
|
identity_uri = CONF.identity.uri
|
||||||
return {
|
return {
|
||||||
'identity_version': identity_version,
|
'identity_version': identity_version,
|
||||||
|
'identity_uri': identity_uri,
|
||||||
'credentials_domain': CONF.auth.default_credentials_domain_name,
|
'credentials_domain': CONF.auth.default_credentials_domain_name,
|
||||||
'admin_role': CONF.identity.admin_role
|
'admin_role': CONF.identity.admin_role
|
||||||
}
|
}
|
||||||
|
@ -63,6 +68,10 @@ def get_dynamic_provider_params(identity_version, admin_creds=None):
|
||||||
_common_params = _get_common_provider_params(identity_version)
|
_common_params = _get_common_provider_params(identity_version)
|
||||||
admin_creds = admin_creds or get_configured_admin_credentials(
|
admin_creds = admin_creds or get_configured_admin_credentials(
|
||||||
fill_in=True, identity_version=identity_version)
|
fill_in=True, identity_version=identity_version)
|
||||||
|
if identity_version == 'v3':
|
||||||
|
endpoint_type = CONF.identity.v3_endpoint_type
|
||||||
|
elif identity_version == 'v2':
|
||||||
|
endpoint_type = CONF.identity.v2_admin_endpoint_type
|
||||||
return dict(_common_params, **dict([
|
return dict(_common_params, **dict([
|
||||||
('admin_creds', admin_creds),
|
('admin_creds', admin_creds),
|
||||||
('identity_admin_domain_scope', CONF.identity.admin_domain_scope),
|
('identity_admin_domain_scope', CONF.identity.admin_domain_scope),
|
||||||
|
@ -74,7 +83,8 @@ def get_dynamic_provider_params(identity_version, admin_creds=None):
|
||||||
('public_network_id', CONF.network.public_network_id),
|
('public_network_id', CONF.network.public_network_id),
|
||||||
('create_networks', (CONF.auth.create_isolated_networks and not
|
('create_networks', (CONF.auth.create_isolated_networks and not
|
||||||
CONF.network.shared_physical_network)),
|
CONF.network.shared_physical_network)),
|
||||||
('resource_prefix', CONF.resources_prefix)
|
('resource_prefix', CONF.resources_prefix),
|
||||||
|
('identity_admin_endpoint_type', endpoint_type)
|
||||||
]))
|
]))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -18,11 +18,11 @@ import netaddr
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from tempest import clients
|
|
||||||
from tempest.lib.common import cred_client
|
from tempest.lib.common import cred_client
|
||||||
from tempest.lib.common import cred_provider
|
from tempest.lib.common import cred_provider
|
||||||
from tempest.lib.common.utils import data_utils
|
from tempest.lib.common.utils import data_utils
|
||||||
from tempest.lib import exceptions as lib_exc
|
from tempest.lib import exceptions as lib_exc
|
||||||
|
from tempest.lib.services import clients
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -35,7 +35,8 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
||||||
identity_admin_role='admin', extra_roles=None,
|
identity_admin_role='admin', extra_roles=None,
|
||||||
neutron_available=False, create_networks=True,
|
neutron_available=False, create_networks=True,
|
||||||
project_network_cidr=None, project_network_mask_bits=None,
|
project_network_cidr=None, project_network_mask_bits=None,
|
||||||
public_network_id=None, resource_prefix=None):
|
public_network_id=None, resource_prefix=None,
|
||||||
|
identity_admin_endpoint_type='public', identity_uri=None):
|
||||||
"""Creates credentials dynamically for tests
|
"""Creates credentials dynamically for tests
|
||||||
|
|
||||||
A credential provider that, based on an initial set of
|
A credential provider that, based on an initial set of
|
||||||
|
@ -69,10 +70,14 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
||||||
:param project_network_mask_bits: The network mask bits to use for
|
:param project_network_mask_bits: The network mask bits to use for
|
||||||
created project networks
|
created project networks
|
||||||
:param public_network_id: The id for the public network to use
|
:param public_network_id: The id for the public network to use
|
||||||
|
:param identity_admin_endpoint_type: The endpoint type for identity
|
||||||
|
admin clients. Defaults to public.
|
||||||
|
:param identity_uri: Identity URI of the target cloud
|
||||||
"""
|
"""
|
||||||
super(DynamicCredentialProvider, self).__init__(
|
super(DynamicCredentialProvider, self).__init__(
|
||||||
identity_version=identity_version, admin_role=admin_role,
|
identity_version=identity_version, identity_uri=identity_uri,
|
||||||
name=name, credentials_domain=credentials_domain,
|
admin_role=admin_role, name=name,
|
||||||
|
credentials_domain=credentials_domain,
|
||||||
network_resources=network_resources)
|
network_resources=network_resources)
|
||||||
self.network_resources = network_resources
|
self.network_resources = network_resources
|
||||||
self._creds = {}
|
self._creds = {}
|
||||||
|
@ -86,6 +91,7 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
||||||
self.default_admin_creds = admin_creds
|
self.default_admin_creds = admin_creds
|
||||||
self.identity_admin_domain_scope = identity_admin_domain_scope
|
self.identity_admin_domain_scope = identity_admin_domain_scope
|
||||||
self.identity_admin_role = identity_admin_role or 'admin'
|
self.identity_admin_role = identity_admin_role or 'admin'
|
||||||
|
self.identity_admin_endpoint_type = identity_admin_endpoint_type
|
||||||
self.extra_roles = extra_roles or []
|
self.extra_roles = extra_roles or []
|
||||||
(self.identity_admin_client,
|
(self.identity_admin_client,
|
||||||
self.tenants_admin_client,
|
self.tenants_admin_client,
|
||||||
|
@ -96,7 +102,8 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
||||||
self.routers_admin_client,
|
self.routers_admin_client,
|
||||||
self.subnets_admin_client,
|
self.subnets_admin_client,
|
||||||
self.ports_admin_client,
|
self.ports_admin_client,
|
||||||
self.security_groups_admin_client) = self._get_admin_clients()
|
self.security_groups_admin_client) = self._get_admin_clients(
|
||||||
|
identity_admin_endpoint_type)
|
||||||
# Domain where isolated credentials are provisioned (v3 only).
|
# Domain where isolated credentials are provisioned (v3 only).
|
||||||
# Use that of the admin account is None is configured.
|
# Use that of the admin account is None is configured.
|
||||||
self.creds_domain_name = None
|
self.creds_domain_name = None
|
||||||
|
@ -112,32 +119,43 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
||||||
self.domains_admin_client,
|
self.domains_admin_client,
|
||||||
self.creds_domain_name)
|
self.creds_domain_name)
|
||||||
|
|
||||||
def _get_admin_clients(self):
|
def _get_admin_clients(self, endpoint_type):
|
||||||
"""Returns a tuple with instances of the following admin clients
|
"""Returns a tuple with instances of the following admin clients
|
||||||
|
|
||||||
(in this order):
|
(in this order):
|
||||||
identity
|
identity
|
||||||
network
|
network
|
||||||
"""
|
"""
|
||||||
os = clients.Manager(self.default_admin_creds)
|
os = clients.ServiceClients(self.default_admin_creds,
|
||||||
|
self.identity_uri)
|
||||||
|
params = {'endpoint_type': endpoint_type}
|
||||||
if self.identity_version == 'v2':
|
if self.identity_version == 'v2':
|
||||||
return (os.identity_client, os.tenants_client, os.users_client,
|
return (os.identity_v2.IdentityClient(**params),
|
||||||
os.roles_client, None,
|
os.identity_v2.TenantsClient(**params),
|
||||||
os.networks_client, os.routers_client, os.subnets_client,
|
os.identity_v2.UsersClient(**params),
|
||||||
os.ports_client, os.security_groups_client)
|
os.identity_v2.RolesClient(**params), None,
|
||||||
|
os.network.NetworksClient(),
|
||||||
|
os.network.RoutersClient(),
|
||||||
|
os.network.SubnetsClient(),
|
||||||
|
os.network.PortsClient(),
|
||||||
|
os.network.SecurityGroupsClient())
|
||||||
else:
|
else:
|
||||||
# We use a dedicated client manager for identity client in case we
|
# We use a dedicated client manager for identity client in case we
|
||||||
# need a different token scope for them.
|
# need a different token scope for them.
|
||||||
scope = 'domain' if self.identity_admin_domain_scope else 'project'
|
scope = 'domain' if self.identity_admin_domain_scope else 'project'
|
||||||
identity_os = clients.Manager(self.default_admin_creds,
|
identity_os = clients.ServiceClients(self.default_admin_creds,
|
||||||
scope=scope)
|
self.identity_uri,
|
||||||
return (identity_os.identity_v3_client,
|
scope=scope)
|
||||||
identity_os.projects_client,
|
return (identity_os.identity_v3.IdentityClient(**params),
|
||||||
identity_os.users_v3_client, identity_os.roles_v3_client,
|
identity_os.identity_v3.ProjectsClient(**params),
|
||||||
identity_os.domains_client,
|
identity_os.identity_v3.UsersClient(**params),
|
||||||
os.networks_client, os.routers_client,
|
identity_os.identity_v3.RolesClient(**params),
|
||||||
os.subnets_client, os.ports_client,
|
identity_os.identity_v3.DomainsClient(**params),
|
||||||
os.security_groups_client)
|
os.network.NetworksClient(),
|
||||||
|
os.network.RoutersClient(),
|
||||||
|
os.network.SubnetsClient(),
|
||||||
|
os.network.PortsClient(),
|
||||||
|
os.network.SecurityGroupsClient())
|
||||||
|
|
||||||
def _create_creds(self, admin=False, roles=None):
|
def _create_creds(self, admin=False, roles=None):
|
||||||
"""Create credentials with random name.
|
"""Create credentials with random name.
|
||||||
|
|
|
@ -20,12 +20,12 @@ from oslo_log import log as logging
|
||||||
import six
|
import six
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
from tempest import clients
|
|
||||||
from tempest.common import fixed_network
|
from tempest.common import fixed_network
|
||||||
from tempest import exceptions
|
from tempest import exceptions
|
||||||
from tempest.lib import auth
|
from tempest.lib import auth
|
||||||
from tempest.lib.common import cred_provider
|
from tempest.lib.common import cred_provider
|
||||||
from tempest.lib import exceptions as lib_exc
|
from tempest.lib import exceptions as lib_exc
|
||||||
|
from tempest.lib.services import clients
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ class PreProvisionedCredentialProvider(cred_provider.CredentialProvider):
|
||||||
def __init__(self, identity_version, test_accounts_file,
|
def __init__(self, identity_version, test_accounts_file,
|
||||||
accounts_lock_dir, name=None, credentials_domain=None,
|
accounts_lock_dir, name=None, credentials_domain=None,
|
||||||
admin_role=None, object_storage_operator_role=None,
|
admin_role=None, object_storage_operator_role=None,
|
||||||
object_storage_reseller_admin_role=None):
|
object_storage_reseller_admin_role=None, identity_uri=None):
|
||||||
"""Credentials provider using pre-provisioned accounts
|
"""Credentials provider using pre-provisioned accounts
|
||||||
|
|
||||||
This credentials provider loads the details of pre-provisioned
|
This credentials provider loads the details of pre-provisioned
|
||||||
|
@ -79,10 +79,12 @@ class PreProvisionedCredentialProvider(cred_provider.CredentialProvider):
|
||||||
(if no domain is configured)
|
(if no domain is configured)
|
||||||
:param object_storage_operator_role: name of the role
|
:param object_storage_operator_role: name of the role
|
||||||
:param object_storage_reseller_admin_role: name of the role
|
:param object_storage_reseller_admin_role: name of the role
|
||||||
|
:param identity_uri: Identity URI of the target cloud
|
||||||
"""
|
"""
|
||||||
super(PreProvisionedCredentialProvider, self).__init__(
|
super(PreProvisionedCredentialProvider, self).__init__(
|
||||||
identity_version=identity_version, name=name,
|
identity_version=identity_version, name=name,
|
||||||
admin_role=admin_role, credentials_domain=credentials_domain)
|
admin_role=admin_role, credentials_domain=credentials_domain,
|
||||||
|
identity_uri=identity_uri)
|
||||||
self.test_accounts_file = test_accounts_file
|
self.test_accounts_file = test_accounts_file
|
||||||
if test_accounts_file:
|
if test_accounts_file:
|
||||||
accounts = read_accounts_yaml(self.test_accounts_file)
|
accounts = read_accounts_yaml(self.test_accounts_file)
|
||||||
|
@ -341,8 +343,9 @@ class PreProvisionedCredentialProvider(cred_provider.CredentialProvider):
|
||||||
auth_url=None, fill_in=False,
|
auth_url=None, fill_in=False,
|
||||||
identity_version=self.identity_version, **creds_dict)
|
identity_version=self.identity_version, **creds_dict)
|
||||||
net_creds = cred_provider.TestResources(credential)
|
net_creds = cred_provider.TestResources(credential)
|
||||||
net_clients = clients.Manager(credentials=credential)
|
net_clients = clients.ServiceClients(credentials=credential,
|
||||||
compute_network_client = net_clients.compute_networks_client
|
identity_uri=self.identity_uri)
|
||||||
|
compute_network_client = net_clients.compute.NetworksClient()
|
||||||
net_name = self.hash_dict['networks'].get(hash, None)
|
net_name = self.hash_dict['networks'].get(hash, None)
|
||||||
try:
|
try:
|
||||||
network = fixed_network.get_network_from_name(
|
network = fixed_network.get_network_from_name(
|
||||||
|
|
|
@ -22,8 +22,9 @@ from tempest.lib import exceptions
|
||||||
|
|
||||||
@six.add_metaclass(abc.ABCMeta)
|
@six.add_metaclass(abc.ABCMeta)
|
||||||
class CredentialProvider(object):
|
class CredentialProvider(object):
|
||||||
def __init__(self, identity_version, name=None, network_resources=None,
|
def __init__(self, identity_version, name=None,
|
||||||
credentials_domain=None, admin_role=None):
|
network_resources=None, credentials_domain=None,
|
||||||
|
admin_role=None, identity_uri=None):
|
||||||
"""A CredentialProvider supplies credentials to test classes.
|
"""A CredentialProvider supplies credentials to test classes.
|
||||||
|
|
||||||
:param identity_version: Identity version of the credentials provided
|
:param identity_version: Identity version of the credentials provided
|
||||||
|
@ -33,8 +34,11 @@ class CredentialProvider(object):
|
||||||
credentials
|
credentials
|
||||||
:param credentials_domain: Domain credentials belong to
|
:param credentials_domain: Domain credentials belong to
|
||||||
:param admin_role: Name of the role of the admin account
|
:param admin_role: Name of the role of the admin account
|
||||||
|
:param identity_uri: Identity URI of the target cloud. This *must* be
|
||||||
|
specified for anything to work.
|
||||||
"""
|
"""
|
||||||
self.identity_version = identity_version
|
self.identity_version = identity_version
|
||||||
|
self.identity_uri = identity_uri
|
||||||
self.name = name or "test_creds"
|
self.name = name or "test_creds"
|
||||||
self.network_resources = network_resources
|
self.network_resources = network_resources
|
||||||
self.credentials_domain = credentials_domain or 'Default'
|
self.credentials_domain = credentials_domain or 'Default'
|
||||||
|
|
|
@ -46,7 +46,8 @@ class TestDynamicCredentialProvider(base.TestCase):
|
||||||
|
|
||||||
fixed_params = {'name': 'test class',
|
fixed_params = {'name': 'test class',
|
||||||
'identity_version': 'v2',
|
'identity_version': 'v2',
|
||||||
'admin_role': 'admin'}
|
'admin_role': 'admin',
|
||||||
|
'identity_uri': 'fake_uri'}
|
||||||
|
|
||||||
token_client = v2_token_client
|
token_client = v2_token_client
|
||||||
iden_client = v2_iden_client
|
iden_client = v2_iden_client
|
||||||
|
@ -619,7 +620,8 @@ class TestDynamicCredentialProviderV3(TestDynamicCredentialProvider):
|
||||||
|
|
||||||
fixed_params = {'name': 'test class',
|
fixed_params = {'name': 'test class',
|
||||||
'identity_version': 'v3',
|
'identity_version': 'v3',
|
||||||
'admin_role': 'admin'}
|
'admin_role': 'admin',
|
||||||
|
'identity_uri': 'fake_uri'}
|
||||||
|
|
||||||
token_client = v3_token_client
|
token_client = v3_token_client
|
||||||
iden_client = v3_iden_client
|
iden_client = v3_iden_client
|
||||||
|
|
|
@ -38,6 +38,7 @@ class TestPreProvisionedCredentials(base.TestCase):
|
||||||
|
|
||||||
fixed_params = {'name': 'test class',
|
fixed_params = {'name': 'test class',
|
||||||
'identity_version': 'v2',
|
'identity_version': 'v2',
|
||||||
|
'identity_uri': 'fake_uri',
|
||||||
'test_accounts_file': 'fake_accounts_file',
|
'test_accounts_file': 'fake_accounts_file',
|
||||||
'accounts_lock_dir': 'fake_locks_dir',
|
'accounts_lock_dir': 'fake_locks_dir',
|
||||||
'admin_role': 'admin',
|
'admin_role': 'admin',
|
||||||
|
@ -91,6 +92,9 @@ class TestPreProvisionedCredentials(base.TestCase):
|
||||||
return_value=self.test_accounts))
|
return_value=self.test_accounts))
|
||||||
self.useFixture(fixtures.MockPatch(
|
self.useFixture(fixtures.MockPatch(
|
||||||
'os.path.isfile', return_value=True))
|
'os.path.isfile', return_value=True))
|
||||||
|
# NOTE(andreaf) Ensure config is loaded so service clients are
|
||||||
|
# registered in the registry before tests
|
||||||
|
config.service_client_config()
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
super(TestPreProvisionedCredentials, self).tearDown()
|
super(TestPreProvisionedCredentials, self).tearDown()
|
||||||
|
@ -436,6 +440,7 @@ class TestPreProvisionedCredentialsV3(TestPreProvisionedCredentials):
|
||||||
|
|
||||||
fixed_params = {'name': 'test class',
|
fixed_params = {'name': 'test class',
|
||||||
'identity_version': 'v3',
|
'identity_version': 'v3',
|
||||||
|
'identity_uri': 'fake_uri',
|
||||||
'test_accounts_file': 'fake_accounts_file',
|
'test_accounts_file': 'fake_accounts_file',
|
||||||
'accounts_lock_dir': 'fake_locks_dir_v3',
|
'accounts_lock_dir': 'fake_locks_dir_v3',
|
||||||
'admin_role': 'admin',
|
'admin_role': 'admin',
|
||||||
|
|
Loading…
Reference in New Issue