Embed network resoruces and credentials in TestResources
Define a new class TestResources which embeds credentials and their network resources. This makes it easier to obtain network resources for a set of credentials in case of preprovisioned accounts. Partially-implements: bp test-accounts-continued Change-Id: Ie3d5e2471db7371e1109fd24a716e7c449843904
This commit is contained in:
parent
577d1f2bcc
commit
9540dfd4d7
|
@ -147,3 +147,25 @@ class CredentialProvider(object):
|
|||
@abc.abstractmethod
|
||||
def is_role_available(self, role):
|
||||
return
|
||||
|
||||
|
||||
class TestResources(object):
|
||||
"""Readonly Credentials, with network resources added."""
|
||||
|
||||
def __init__(self, credentials):
|
||||
self._credentials = credentials
|
||||
self.network = None
|
||||
self.subnet = None
|
||||
self.router = None
|
||||
|
||||
def __getattr__(self, item):
|
||||
return getattr(self._credentials, item)
|
||||
|
||||
def set_resources(self, **kwargs):
|
||||
for key in kwargs.keys():
|
||||
if hasattr(self, key):
|
||||
setattr(self, key, kwargs[key])
|
||||
|
||||
@property
|
||||
def credentials(self):
|
||||
return self._credentials
|
||||
|
|
|
@ -42,7 +42,8 @@ def get_tenant_network(creds_provider, compute_networks_client):
|
|||
if (isinstance(creds_provider, isolated_creds.IsolatedCreds) and
|
||||
(CONF.service_available.neutron and
|
||||
not CONF.service_available.ironic)):
|
||||
network = creds_provider.get_primary_network()
|
||||
# tenant_allow_isolation == True, so network is defined
|
||||
network = creds_provider.get_primary_creds().network
|
||||
else:
|
||||
if fixed_network_name:
|
||||
try:
|
||||
|
|
|
@ -142,7 +142,6 @@ class IsolatedCreds(cred_provider.CredentialProvider):
|
|||
network_resources)
|
||||
self.network_resources = network_resources
|
||||
self.isolated_creds = {}
|
||||
self.isolated_net_resources = {}
|
||||
self.ports = []
|
||||
self.password = password
|
||||
self.default_admin_creds = cred_provider.get_configured_credentials(
|
||||
|
@ -207,7 +206,8 @@ class IsolatedCreds(cred_provider.CredentialProvider):
|
|||
if roles:
|
||||
for role in roles:
|
||||
self.creds_client.assign_user_role(user, project, role)
|
||||
return self.creds_client.get_credentials(user, project, self.password)
|
||||
creds = self.creds_client.get_credentials(user, project, self.password)
|
||||
return cred_provider.TestResources(creds)
|
||||
|
||||
def _create_network_resources(self, tenant_id):
|
||||
network = None
|
||||
|
@ -297,33 +297,6 @@ class IsolatedCreds(cred_provider.CredentialProvider):
|
|||
self.network_admin_client.add_router_interface_with_subnet_id(
|
||||
router_id, subnet_id)
|
||||
|
||||
def get_primary_network(self):
|
||||
return self.isolated_net_resources.get('primary')[0]
|
||||
|
||||
def get_primary_subnet(self):
|
||||
return self.isolated_net_resources.get('primary')[1]
|
||||
|
||||
def get_primary_router(self):
|
||||
return self.isolated_net_resources.get('primary')[2]
|
||||
|
||||
def get_admin_network(self):
|
||||
return self.isolated_net_resources.get('admin')[0]
|
||||
|
||||
def get_admin_subnet(self):
|
||||
return self.isolated_net_resources.get('admin')[1]
|
||||
|
||||
def get_admin_router(self):
|
||||
return self.isolated_net_resources.get('admin')[2]
|
||||
|
||||
def get_alt_network(self):
|
||||
return self.isolated_net_resources.get('alt')[0]
|
||||
|
||||
def get_alt_subnet(self):
|
||||
return self.isolated_net_resources.get('alt')[1]
|
||||
|
||||
def get_alt_router(self):
|
||||
return self.isolated_net_resources.get('alt')[2]
|
||||
|
||||
def get_credentials(self, credential_type):
|
||||
if self.isolated_creds.get(str(credential_type)):
|
||||
credentials = self.isolated_creds[str(credential_type)]
|
||||
|
@ -341,8 +314,8 @@ class IsolatedCreds(cred_provider.CredentialProvider):
|
|||
not CONF.baremetal.driver_enabled):
|
||||
network, subnet, router = self._create_network_resources(
|
||||
credentials.tenant_id)
|
||||
self.isolated_net_resources[str(credential_type)] = (
|
||||
network, subnet, router,)
|
||||
credentials.set_resources(network=network, subnet=subnet,
|
||||
router=router)
|
||||
LOG.info("Created isolated network resources for : \n"
|
||||
+ " credentials: %s" % credentials)
|
||||
return credentials
|
||||
|
@ -368,12 +341,6 @@ class IsolatedCreds(cred_provider.CredentialProvider):
|
|||
new_index = str(roles) + '-' + str(len(self.isolated_creds))
|
||||
self.isolated_creds[new_index] = exist_creds
|
||||
del self.isolated_creds[str(roles)]
|
||||
# Handle isolated neutron resouces if they exist too
|
||||
if CONF.service_available.neutron:
|
||||
exist_net = self.isolated_net_resources.get(str(roles))
|
||||
if exist_net:
|
||||
self.isolated_net_resources[new_index] = exist_net
|
||||
del self.isolated_net_resources[str(roles)]
|
||||
return self.get_credentials(roles)
|
||||
|
||||
def _clear_isolated_router(self, router_id, router_name):
|
||||
|
@ -414,27 +381,33 @@ class IsolatedCreds(cred_provider.CredentialProvider):
|
|||
|
||||
def _clear_isolated_net_resources(self):
|
||||
net_client = self.network_admin_client
|
||||
for cred in self.isolated_net_resources:
|
||||
network, subnet, router = self.isolated_net_resources.get(cred)
|
||||
for cred in self.isolated_creds:
|
||||
creds = self.isolated_creds.get(cred)
|
||||
if (not creds or not any([creds.router, creds.network,
|
||||
creds.subnet])):
|
||||
continue
|
||||
LOG.debug("Clearing network: %(network)s, "
|
||||
"subnet: %(subnet)s, router: %(router)s",
|
||||
{'network': network, 'subnet': subnet, 'router': router})
|
||||
{'network': creds.network, 'subnet': creds.subnet,
|
||||
'router': creds.router})
|
||||
if (not self.network_resources or
|
||||
self.network_resources.get('router')):
|
||||
(self.network_resources.get('router') and creds.subnet)):
|
||||
try:
|
||||
net_client.remove_router_interface_with_subnet_id(
|
||||
router['id'], subnet['id'])
|
||||
creds.router['id'], creds.subnet['id'])
|
||||
except lib_exc.NotFound:
|
||||
LOG.warn('router with name: %s not found for delete' %
|
||||
router['name'])
|
||||
self._clear_isolated_router(router['id'], router['name'])
|
||||
creds.router['name'])
|
||||
self._clear_isolated_router(creds.router['id'],
|
||||
creds.router['name'])
|
||||
if (not self.network_resources or
|
||||
self.network_resources.get('subnet')):
|
||||
self._clear_isolated_subnet(subnet['id'], subnet['name'])
|
||||
self._clear_isolated_subnet(creds.subnet['id'],
|
||||
creds.subnet['name'])
|
||||
if (not self.network_resources or
|
||||
self.network_resources.get('network')):
|
||||
self._clear_isolated_network(network['id'], network['name'])
|
||||
self.isolated_net_resources = {}
|
||||
self._clear_isolated_network(creds.network['id'],
|
||||
creds.network['name'])
|
||||
|
||||
def clear_isolated_creds(self):
|
||||
if not self.isolated_creds:
|
||||
|
|
|
@ -46,8 +46,14 @@ class Manager(object):
|
|||
# Check if passed or default credentials are valid
|
||||
if not self.credentials.is_valid():
|
||||
raise exceptions.InvalidCredentials()
|
||||
# Tenant isolation creates TestResources, but Accounts and some tests
|
||||
# creates Credentials
|
||||
if isinstance(credentials, cred_provider.TestResources):
|
||||
creds = self.credentials.credentials
|
||||
else:
|
||||
creds = self.credentials
|
||||
# Creates an auth provider for the credentials
|
||||
self.auth_provider = get_auth_provider(self.credentials)
|
||||
self.auth_provider = get_auth_provider(creds)
|
||||
# FIXME(andreaf) unused
|
||||
self.client_attr_names = []
|
||||
|
||||
|
|
|
@ -278,11 +278,11 @@ class TestTenantIsolation(base.TestCase):
|
|||
router_interface_mock = self.patch(
|
||||
'tempest.services.network.json.network_client.NetworkClientJSON.'
|
||||
'add_router_interface_with_subnet_id')
|
||||
iso_creds.get_primary_creds()
|
||||
primary_creds = iso_creds.get_primary_creds()
|
||||
router_interface_mock.called_once_with('1234', '1234')
|
||||
network = iso_creds.get_primary_network()
|
||||
subnet = iso_creds.get_primary_subnet()
|
||||
router = iso_creds.get_primary_router()
|
||||
network = primary_creds.network
|
||||
subnet = primary_creds.subnet
|
||||
router = primary_creds.router
|
||||
self.assertEqual(network['id'], '1234')
|
||||
self.assertEqual(network['name'], 'fake_net')
|
||||
self.assertEqual(subnet['id'], '1234')
|
||||
|
@ -427,11 +427,11 @@ class TestTenantIsolation(base.TestCase):
|
|||
router_interface_mock = self.patch(
|
||||
'tempest.services.network.json.network_client.NetworkClientJSON.'
|
||||
'add_router_interface_with_subnet_id')
|
||||
iso_creds.get_alt_creds()
|
||||
alt_creds = iso_creds.get_alt_creds()
|
||||
router_interface_mock.called_once_with('1234', '1234')
|
||||
network = iso_creds.get_alt_network()
|
||||
subnet = iso_creds.get_alt_subnet()
|
||||
router = iso_creds.get_alt_router()
|
||||
network = alt_creds.network
|
||||
subnet = alt_creds.subnet
|
||||
router = alt_creds.router
|
||||
self.assertEqual(network['id'], '1234')
|
||||
self.assertEqual(network['name'], 'fake_alt_net')
|
||||
self.assertEqual(subnet['id'], '1234')
|
||||
|
@ -453,11 +453,11 @@ class TestTenantIsolation(base.TestCase):
|
|||
'tempest.services.network.json.network_client.NetworkClientJSON.'
|
||||
'add_router_interface_with_subnet_id')
|
||||
self._mock_list_roles('123456', 'admin')
|
||||
iso_creds.get_admin_creds()
|
||||
admin_creds = iso_creds.get_admin_creds()
|
||||
router_interface_mock.called_once_with('1234', '1234')
|
||||
network = iso_creds.get_admin_network()
|
||||
subnet = iso_creds.get_admin_subnet()
|
||||
router = iso_creds.get_admin_router()
|
||||
network = admin_creds.network
|
||||
subnet = admin_creds.subnet
|
||||
router = admin_creds.router
|
||||
self.assertEqual(network['id'], '1234')
|
||||
self.assertEqual(network['name'], 'fake_admin_net')
|
||||
self.assertEqual(subnet['id'], '1234')
|
||||
|
@ -490,13 +490,13 @@ class TestTenantIsolation(base.TestCase):
|
|||
'delete_router')
|
||||
router_mock = router.start()
|
||||
|
||||
iso_creds.get_primary_creds()
|
||||
primary_creds = iso_creds.get_primary_creds()
|
||||
self.assertEqual(net_mock.mock_calls, [])
|
||||
self.assertEqual(subnet_mock.mock_calls, [])
|
||||
self.assertEqual(router_mock.mock_calls, [])
|
||||
network = iso_creds.get_primary_network()
|
||||
subnet = iso_creds.get_primary_subnet()
|
||||
router = iso_creds.get_primary_router()
|
||||
network = primary_creds.network
|
||||
subnet = primary_creds.subnet
|
||||
router = primary_creds.router
|
||||
self.assertIsNone(network)
|
||||
self.assertIsNone(subnet)
|
||||
self.assertIsNone(router)
|
||||
|
|
Loading…
Reference in New Issue