Split out Neutron subnets client
Splitting out a subnets client for Neutron. Partially implements blueprint consistent-service-method-names Change-Id: I52c9d099b97540440fa98343c736b894d130a07e
This commit is contained in:
parent
f207b353b7
commit
3961acd2fe
@ -42,6 +42,7 @@ class ServersTestJSON(base.BaseV2ComputeTest):
|
||||
cls.client = cls.servers_client
|
||||
cls.network_client = cls.os.network_client
|
||||
cls.networks_client = cls.os.networks_client
|
||||
cls.subnets_client = cls.os.subnets_client
|
||||
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
@ -74,11 +75,11 @@ class ServersTestJSON(base.BaseV2ComputeTest):
|
||||
self.addCleanup(self.networks_client.delete_network,
|
||||
net['network']['id'])
|
||||
|
||||
subnet = self.network_client.create_subnet(
|
||||
subnet = self.subnets_client.create_subnet(
|
||||
network_id=net['network']['id'],
|
||||
cidr=cidr,
|
||||
ip_version=4)
|
||||
self.addCleanup(self.network_client.delete_subnet,
|
||||
self.addCleanup(self.subnets_client.delete_subnet,
|
||||
subnet['subnet']['id'])
|
||||
return net
|
||||
|
||||
|
@ -103,8 +103,9 @@ class ExternalNetworksTestJSON(base.BaseAdminNetworkTest):
|
||||
self.addCleanup(self._try_delete_resource,
|
||||
self.admin_networks_client.delete_network,
|
||||
external_network['id'])
|
||||
subnet = self.create_subnet(external_network, client=client,
|
||||
enable_dhcp=False)
|
||||
subnet = self.create_subnet(
|
||||
external_network, client=self.admin_subnets_client,
|
||||
enable_dhcp=False)
|
||||
body = client.create_floatingip(
|
||||
floating_network_id=external_network['id'])
|
||||
created_floating_ip = body['floatingip']
|
||||
@ -121,7 +122,7 @@ class ExternalNetworksTestJSON(base.BaseAdminNetworkTest):
|
||||
self.assertNotIn(created_floating_ip['id'],
|
||||
(f['id'] for f in floatingip_list['floatingips']))
|
||||
# Verifies subnet is deleted
|
||||
subnet_list = client.list_subnets()
|
||||
subnet_list = self.admin_subnets_client.list_subnets()
|
||||
self.assertNotIn(subnet['id'],
|
||||
(s['id'] for s in subnet_list))
|
||||
# Removes subnet from the cleanup list
|
||||
|
@ -74,6 +74,7 @@ class BaseNetworkTest(tempest.test.BaseTestCase):
|
||||
super(BaseNetworkTest, cls).setup_clients()
|
||||
cls.client = cls.os.network_client
|
||||
cls.networks_client = cls.os.networks_client
|
||||
cls.subnets_client = cls.os.subnets_client
|
||||
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
@ -115,7 +116,7 @@ class BaseNetworkTest(tempest.test.BaseTestCase):
|
||||
router)
|
||||
# Clean up subnets
|
||||
for subnet in cls.subnets:
|
||||
cls._try_delete_resource(cls.client.delete_subnet,
|
||||
cls._try_delete_resource(cls.subnets_client.delete_subnet,
|
||||
subnet['id'])
|
||||
# Clean up networks
|
||||
for network in cls.networks:
|
||||
@ -160,7 +161,7 @@ class BaseNetworkTest(tempest.test.BaseTestCase):
|
||||
|
||||
# allow tests to use admin client
|
||||
if not client:
|
||||
client = cls.client
|
||||
client = cls.subnets_client
|
||||
|
||||
# The cidr and mask_bits depend on the ip version.
|
||||
ip_version = ip_version if ip_version is not None else cls._ip_version
|
||||
@ -267,6 +268,7 @@ class BaseAdminNetworkTest(BaseNetworkTest):
|
||||
super(BaseAdminNetworkTest, cls).setup_clients()
|
||||
cls.admin_client = cls.os_adm.network_client
|
||||
cls.admin_networks_client = cls.os_adm.networks_client
|
||||
cls.admin_subnets_client = cls.os_adm.subnets_client
|
||||
|
||||
@classmethod
|
||||
def create_metering_label(cls, name, description):
|
||||
|
@ -75,11 +75,11 @@ class NetworksTestDHCPv6(base.BaseNetworkTest):
|
||||
if port['id'] in [p['id'] for p in self.ports]:
|
||||
self.client.delete_port(port['id'])
|
||||
self._remove_from_list_by_index(self.ports, port)
|
||||
body = self.client.list_subnets()
|
||||
body = self.subnets_client.list_subnets()
|
||||
subnets = body['subnets']
|
||||
for subnet in subnets:
|
||||
if subnet['id'] in [s['id'] for s in self.subnets]:
|
||||
self.client.delete_subnet(subnet['id'])
|
||||
self.subnets_client.delete_subnet(subnet['id'])
|
||||
self._remove_from_list_by_index(self.subnets, subnet)
|
||||
body = self.client.list_routers()
|
||||
routers = body['routers']
|
||||
|
@ -194,7 +194,7 @@ class NetworksTest(base.BaseNetworkTest):
|
||||
subnet_id = subnet['id']
|
||||
# Verify subnet update
|
||||
new_name = "New_subnet"
|
||||
body = self.client.update_subnet(subnet_id, name=new_name)
|
||||
body = self.subnets_client.update_subnet(subnet_id, name=new_name)
|
||||
updated_subnet = body['subnet']
|
||||
self.assertEqual(updated_subnet['name'], new_name)
|
||||
|
||||
@ -241,7 +241,7 @@ class NetworksTest(base.BaseNetworkTest):
|
||||
@test.idempotent_id('bd635d81-6030-4dd1-b3b9-31ba0cfdf6cc')
|
||||
def test_show_subnet(self):
|
||||
# Verify the details of a subnet
|
||||
body = self.client.show_subnet(self.subnet['id'])
|
||||
body = self.subnets_client.show_subnet(self.subnet['id'])
|
||||
subnet = body['subnet']
|
||||
self.assertNotEmpty(subnet, "Subnet returned has no fields")
|
||||
for key in ['id', 'cidr']:
|
||||
@ -252,8 +252,8 @@ class NetworksTest(base.BaseNetworkTest):
|
||||
def test_show_subnet_fields(self):
|
||||
# Verify specific fields of a subnet
|
||||
fields = ['id', 'network_id']
|
||||
body = self.client.show_subnet(self.subnet['id'],
|
||||
fields=fields)
|
||||
body = self.subnets_client.show_subnet(self.subnet['id'],
|
||||
fields=fields)
|
||||
subnet = body['subnet']
|
||||
self.assertEqual(sorted(subnet.keys()), sorted(fields))
|
||||
for field_name in fields:
|
||||
@ -263,7 +263,7 @@ class NetworksTest(base.BaseNetworkTest):
|
||||
@test.idempotent_id('db68ba48-f4ea-49e9-81d1-e367f6d0b20a')
|
||||
def test_list_subnets(self):
|
||||
# Verify the subnet exists in the list of all subnets
|
||||
body = self.client.list_subnets()
|
||||
body = self.subnets_client.list_subnets()
|
||||
subnets = [subnet['id'] for subnet in body['subnets']
|
||||
if subnet['id'] == self.subnet['id']]
|
||||
self.assertNotEmpty(subnets, "Created subnet not found in the list")
|
||||
@ -272,7 +272,7 @@ class NetworksTest(base.BaseNetworkTest):
|
||||
def test_list_subnets_fields(self):
|
||||
# Verify specific fields of subnets
|
||||
fields = ['id', 'network_id']
|
||||
body = self.client.list_subnets(fields=fields)
|
||||
body = self.subnets_client.list_subnets(fields=fields)
|
||||
subnets = body['subnets']
|
||||
self.assertNotEmpty(subnets, "Subnet list returned is empty")
|
||||
for subnet in subnets:
|
||||
@ -303,7 +303,7 @@ class NetworksTest(base.BaseNetworkTest):
|
||||
body = self.networks_client.delete_network(net_id)
|
||||
|
||||
# Verify that the subnet got automatically deleted.
|
||||
self.assertRaises(lib_exc.NotFound, self.client.show_subnet,
|
||||
self.assertRaises(lib_exc.NotFound, self.subnets_client.show_subnet,
|
||||
subnet_id)
|
||||
|
||||
# Since create_subnet adds the subnet to the delete list, and it is
|
||||
@ -362,8 +362,8 @@ class NetworksTest(base.BaseNetworkTest):
|
||||
'gateway_ip': new_gateway, 'enable_dhcp': True}
|
||||
|
||||
new_name = "New_subnet"
|
||||
body = self.client.update_subnet(subnet_id, name=new_name,
|
||||
**kwargs)
|
||||
body = self.subnets_client.update_subnet(subnet_id, name=new_name,
|
||||
**kwargs)
|
||||
updated_subnet = body['subnet']
|
||||
kwargs['name'] = new_name
|
||||
self.assertEqual(sorted(updated_subnet['dns_nameservers']),
|
||||
@ -398,7 +398,7 @@ class NetworksTest(base.BaseNetworkTest):
|
||||
# subnets_iter is a list (iterator) of lists. This flattens it to a
|
||||
# list of UUIDs
|
||||
public_subnets_iter = itertools.chain(*subnets_iter)
|
||||
body = self.client.list_subnets()
|
||||
body = self.subnets_client.list_subnets()
|
||||
subnets = [sub['id'] for sub in body['subnets']
|
||||
if sub['id'] in public_subnets_iter]
|
||||
self.assertEmpty(subnets, "Public subnets visible")
|
||||
@ -435,9 +435,9 @@ class BulkNetworkOpsTestJSON(base.BaseNetworkTest):
|
||||
|
||||
def _delete_subnets(self, created_subnets):
|
||||
for n in created_subnets:
|
||||
self.client.delete_subnet(n['id'])
|
||||
self.subnets_client.delete_subnet(n['id'])
|
||||
# Asserting that the subnets are not found in the list after deletion
|
||||
body = self.client.list_subnets()
|
||||
body = self.subnets_client.list_subnets()
|
||||
subnets_list = [subnet['id'] for subnet in body['subnets']]
|
||||
for n in created_subnets:
|
||||
self.assertNotIn(n['id'], subnets_list)
|
||||
@ -496,7 +496,7 @@ class BulkNetworkOpsTestJSON(base.BaseNetworkTest):
|
||||
created_subnets = body['subnets']
|
||||
self.addCleanup(self._delete_subnets, created_subnets)
|
||||
# Asserting that the subnets are found in the list after creation
|
||||
body = self.client.list_subnets()
|
||||
body = self.subnets_client.list_subnets()
|
||||
subnets_list = [subnet['id'] for subnet in body['subnets']]
|
||||
for n in created_subnets:
|
||||
self.assertIsNotNone(n['id'])
|
||||
@ -576,7 +576,7 @@ class NetworksIpV6TestJSON(NetworksTest):
|
||||
# Verifies Subnet GW is None in IPv4
|
||||
self.assertEqual(subnet2['gateway_ip'], None)
|
||||
# Verifies all 2 subnets in the same network
|
||||
body = self.client.list_subnets()
|
||||
body = self.subnets_client.list_subnets()
|
||||
subnets = [sub['id'] for sub in body['subnets']
|
||||
if sub['network_id'] == network['id']]
|
||||
test_subnet_ids = [sub['id'] for sub in (subnet1, subnet2)]
|
||||
@ -621,9 +621,9 @@ class NetworksIpV6TestAttrs(NetworksIpV6TestJSON):
|
||||
'ipv6_address_mode': mode})
|
||||
port = self.create_port(slaac_network)
|
||||
self.assertIsNotNone(port['fixed_ips'][0]['ip_address'])
|
||||
self.client.delete_subnet(subnet_slaac['id'])
|
||||
self.subnets_client.delete_subnet(subnet_slaac['id'])
|
||||
self.subnets.pop()
|
||||
subnets = self.client.list_subnets()
|
||||
subnets = self.subnets_client.list_subnets()
|
||||
subnet_ids = [subnet['id'] for subnet in subnets['subnets']]
|
||||
self.assertNotIn(subnet_slaac['id'], subnet_ids,
|
||||
"Subnet wasn't deleted")
|
||||
|
@ -34,7 +34,7 @@ class NetworksNegativeTestJSON(base.BaseNetworkTest):
|
||||
@test.idempotent_id('d746b40c-5e09-4043-99f7-cba1be8b70df')
|
||||
def test_show_non_existent_subnet(self):
|
||||
non_exist_id = data_utils.rand_uuid()
|
||||
self.assertRaises(lib_exc.NotFound, self.client.show_subnet,
|
||||
self.assertRaises(lib_exc.NotFound, self.subnets_client.show_subnet,
|
||||
non_exist_id)
|
||||
|
||||
@test.attr(type=['negative'])
|
||||
@ -64,7 +64,7 @@ class NetworksNegativeTestJSON(base.BaseNetworkTest):
|
||||
@test.idempotent_id('1cc47884-ac52-4415-a31c-e7ce5474a868')
|
||||
def test_update_non_existent_subnet(self):
|
||||
non_exist_id = data_utils.rand_uuid()
|
||||
self.assertRaises(lib_exc.NotFound, self.client.update_subnet,
|
||||
self.assertRaises(lib_exc.NotFound, self.subnets_client.update_subnet,
|
||||
non_exist_id, name='new_name')
|
||||
|
||||
@test.attr(type=['negative'])
|
||||
@ -72,7 +72,7 @@ class NetworksNegativeTestJSON(base.BaseNetworkTest):
|
||||
def test_delete_non_existent_subnet(self):
|
||||
non_exist_id = data_utils.rand_uuid()
|
||||
self.assertRaises(lib_exc.NotFound,
|
||||
self.client.delete_subnet, non_exist_id)
|
||||
self.subnets_client.delete_subnet, non_exist_id)
|
||||
|
||||
@test.attr(type=['negative'])
|
||||
@test.idempotent_id('13d3b106-47e6-4b9b-8d53-dae947f092fe')
|
||||
|
@ -106,7 +106,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
||||
allocation_pools = {'allocation_pools': [{'start': str(address + 4),
|
||||
'end': str(address + 6)}]}
|
||||
subnet = self.create_subnet(network, **allocation_pools)
|
||||
self.addCleanup(self.client.delete_subnet, subnet['id'])
|
||||
self.addCleanup(self.subnets_client.delete_subnet, subnet['id'])
|
||||
body = self.client.create_port(network_id=net_id)
|
||||
self.addCleanup(self.client.delete_port, body['port']['id'])
|
||||
port = body['port']
|
||||
@ -155,7 +155,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
||||
# Create network and subnet
|
||||
network = self.create_network()
|
||||
subnet = self.create_subnet(network)
|
||||
self.addCleanup(self.client.delete_subnet, subnet['id'])
|
||||
self.addCleanup(self.subnets_client.delete_subnet, subnet['id'])
|
||||
# Create two ports
|
||||
port_1 = self.client.create_port(network_id=network['id'])
|
||||
self.addCleanup(self.client.delete_port, port_1['port']['id'])
|
||||
@ -187,7 +187,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
||||
network = self.create_network()
|
||||
self.addCleanup(self.networks_client.delete_network, network['id'])
|
||||
subnet = self.create_subnet(network)
|
||||
self.addCleanup(self.client.delete_subnet, subnet['id'])
|
||||
self.addCleanup(self.subnets_client.delete_subnet, subnet['id'])
|
||||
router = self.create_router(data_utils.rand_name('router-'))
|
||||
self.addCleanup(self.client.delete_router, router['id'])
|
||||
port = self.client.create_port(network_id=network['id'])
|
||||
@ -220,9 +220,9 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
||||
network = self.create_network()
|
||||
self.addCleanup(self.networks_client.delete_network, network['id'])
|
||||
subnet_1 = self.create_subnet(network)
|
||||
self.addCleanup(self.client.delete_subnet, subnet_1['id'])
|
||||
self.addCleanup(self.subnets_client.delete_subnet, subnet_1['id'])
|
||||
subnet_2 = self.create_subnet(network)
|
||||
self.addCleanup(self.client.delete_subnet, subnet_2['id'])
|
||||
self.addCleanup(self.subnets_client.delete_subnet, subnet_2['id'])
|
||||
fixed_ip_1 = [{'subnet_id': subnet_1['id']}]
|
||||
fixed_ip_2 = [{'subnet_id': subnet_2['id']}]
|
||||
|
||||
@ -247,7 +247,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
||||
|
||||
def _update_port_with_security_groups(self, security_groups_names):
|
||||
subnet_1 = self.create_subnet(self.network)
|
||||
self.addCleanup(self.client.delete_subnet, subnet_1['id'])
|
||||
self.addCleanup(self.subnets_client.delete_subnet, subnet_1['id'])
|
||||
fixed_ip_1 = [{'subnet_id': subnet_1['id']}]
|
||||
|
||||
security_groups_list = list()
|
||||
@ -328,7 +328,7 @@ class PortsTestJSON(sec_base.BaseSecGroupTest):
|
||||
network = self.create_network()
|
||||
self.addCleanup(self.networks_client.delete_network, network['id'])
|
||||
subnet = self.create_subnet(network)
|
||||
self.addCleanup(self.client.delete_subnet, subnet['id'])
|
||||
self.addCleanup(self.subnets_client.delete_subnet, subnet['id'])
|
||||
port = self.create_port(network, security_groups=[])
|
||||
self.addCleanup(self.client.delete_port, port['id'])
|
||||
self.assertIsNotNone(port['security_groups'])
|
||||
|
@ -44,6 +44,7 @@ class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
|
||||
def setup_clients(cls):
|
||||
super(NeutronResourcesTestJSON, cls).setup_clients()
|
||||
cls.network_client = cls.os.network_client
|
||||
cls.subnets_client = cls.os.subnets_client
|
||||
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
@ -130,7 +131,7 @@ class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
|
||||
def test_created_subnet(self):
|
||||
"""Verifies created subnet."""
|
||||
subnet_id = self.test_resources.get('Subnet')['physical_resource_id']
|
||||
body = self.network_client.show_subnet(subnet_id)
|
||||
body = self.subnets_client.show_subnet(subnet_id)
|
||||
subnet = body['subnet']
|
||||
network_id = self.test_resources.get('Network')['physical_resource_id']
|
||||
self.assertEqual(subnet_id, subnet['id'])
|
||||
|
@ -108,6 +108,7 @@ from tempest.services.messaging.json.messaging_client import \
|
||||
MessagingClient
|
||||
from tempest.services.network.json.network_client import NetworkClient
|
||||
from tempest.services.network.json.networks_client import NetworksClient
|
||||
from tempest.services.network.json.subnets_client import SubnetsClient
|
||||
from tempest.services.object_storage.account_client import AccountClient
|
||||
from tempest.services.object_storage.container_client import ContainerClient
|
||||
from tempest.services.object_storage.object_client import ObjectClient
|
||||
@ -205,6 +206,14 @@ class Manager(manager.Manager):
|
||||
build_interval=CONF.network.build_interval,
|
||||
build_timeout=CONF.network.build_timeout,
|
||||
**self.default_params)
|
||||
self.subnets_client = SubnetsClient(
|
||||
self.auth_provider,
|
||||
CONF.network.catalog_type,
|
||||
CONF.network.region or CONF.identity.region,
|
||||
endpoint_type=CONF.network.endpoint_type,
|
||||
build_interval=CONF.network.build_interval,
|
||||
build_timeout=CONF.network.build_timeout,
|
||||
**self.default_params)
|
||||
self.messaging_client = MessagingClient(
|
||||
self.auth_provider,
|
||||
CONF.messaging.catalog_type,
|
||||
|
@ -94,6 +94,7 @@ from tempest import exceptions as exc
|
||||
from tempest.services.identity.v2.json import identity_client
|
||||
from tempest.services.network.json import network_client
|
||||
from tempest.services.network.json import networks_client
|
||||
from tempest.services.network.json import subnets_client
|
||||
import tempest_lib.auth
|
||||
from tempest_lib.common.utils import data_utils
|
||||
import tempest_lib.exceptions
|
||||
@ -138,6 +139,7 @@ def get_admin_clients(opts):
|
||||
)
|
||||
network_admin = None
|
||||
networks_admin = None
|
||||
subnets_admin = None
|
||||
neutron_iso_networks = False
|
||||
if (CONF.service_available.neutron and
|
||||
CONF.auth.create_isolated_networks):
|
||||
@ -154,12 +156,19 @@ def get_admin_clients(opts):
|
||||
CONF.network.region or CONF.identity.region,
|
||||
endpoint_type='adminURL',
|
||||
**params)
|
||||
return identity_admin, neutron_iso_networks, network_admin, networks_admin
|
||||
subnets_admin = subnets_client.SubnetsClient(
|
||||
_auth,
|
||||
CONF.network.catalog_type,
|
||||
CONF.network.region or CONF.identity.region,
|
||||
endpoint_type='adminURL',
|
||||
**params)
|
||||
return (identity_admin, neutron_iso_networks, network_admin,
|
||||
networks_admin, subnets_admin)
|
||||
|
||||
|
||||
def create_resources(opts, resources):
|
||||
(identity_admin, neutron_iso_networks,
|
||||
network_admin, networks_admin) = get_admin_clients(opts)
|
||||
network_admin, networks_admin, subnets_admin) = get_admin_clients(opts)
|
||||
roles = identity_admin.list_roles()['roles']
|
||||
for u in resources['users']:
|
||||
u['role_ids'] = []
|
||||
@ -202,7 +211,8 @@ def create_resources(opts, resources):
|
||||
for u in resources['users']:
|
||||
tenant = identity_admin.get_tenant_by_name(u['tenant'])
|
||||
network_name, router_name = create_network_resources(
|
||||
network_admin, networks_admin, tenant['id'], u['name'])
|
||||
network_admin, networks_admin, subnets_admin, tenant['id'],
|
||||
u['name'])
|
||||
u['network'] = network_name
|
||||
u['router'] = router_name
|
||||
LOG.info('Networks created')
|
||||
@ -229,7 +239,7 @@ def create_resources(opts, resources):
|
||||
|
||||
|
||||
def create_network_resources(network_admin_client, networks_admin_client,
|
||||
tenant_id, name):
|
||||
subnets_admin_client, tenant_id, name):
|
||||
|
||||
def _create_network(name):
|
||||
resp_body = networks_admin_client.create_network(
|
||||
@ -241,7 +251,7 @@ def create_network_resources(network_admin_client, networks_admin_client,
|
||||
mask_bits = CONF.network.tenant_network_mask_bits
|
||||
for subnet_cidr in base_cidr.subnet(mask_bits):
|
||||
try:
|
||||
resp_body = network_admin_client.\
|
||||
resp_body = subnets_admin_client.\
|
||||
create_subnet(
|
||||
network_id=network_id, cidr=str(subnet_cidr),
|
||||
name=subnet_name,
|
||||
|
@ -382,6 +382,7 @@ class NetworkService(BaseService):
|
||||
super(NetworkService, self).__init__(kwargs)
|
||||
self.client = manager.network_client
|
||||
self.networks_client = manager.networks_client
|
||||
self.subnets_client = manager.subnets_client
|
||||
|
||||
def _filter_by_conf_networks(self, item_list):
|
||||
if not item_list or not all(('network_id' in i for i in item_list)):
|
||||
@ -676,7 +677,7 @@ class NetworkSecGroupService(NetworkService):
|
||||
class NetworkSubnetService(NetworkService):
|
||||
|
||||
def list(self):
|
||||
client = self.client
|
||||
client = self.subnets_client
|
||||
subnets = client.list_subnets(**self.tenant_filter)
|
||||
subnets = subnets['subnets']
|
||||
if self.is_preserve:
|
||||
@ -685,7 +686,7 @@ class NetworkSubnetService(NetworkService):
|
||||
return subnets
|
||||
|
||||
def delete(self):
|
||||
client = self.client
|
||||
client = self.subnets_client
|
||||
subnets = self.list()
|
||||
for subnet in subnets:
|
||||
try:
|
||||
|
@ -129,6 +129,7 @@ from tempest.services.compute.json import servers_client
|
||||
from tempest.services.identity.v2.json import identity_client
|
||||
from tempest.services.image.v2.json import image_client
|
||||
from tempest.services.network.json import network_client
|
||||
from tempest.services.network.json import subnets_client
|
||||
from tempest.services.object_storage import container_client
|
||||
from tempest.services.object_storage import object_client
|
||||
from tempest.services.telemetry.json import telemetry_client
|
||||
@ -240,6 +241,14 @@ class OSClient(object):
|
||||
build_interval=CONF.network.build_interval,
|
||||
build_timeout=CONF.network.build_timeout,
|
||||
**default_params)
|
||||
self.subnets = subnets_client.SubnetsClient(
|
||||
_auth,
|
||||
CONF.network.catalog_type,
|
||||
CONF.network.region or CONF.identity.region,
|
||||
endpoint_type=CONF.network.endpoint_type,
|
||||
build_interval=CONF.network.build_interval,
|
||||
build_timeout=CONF.network.build_timeout,
|
||||
**default_params)
|
||||
|
||||
|
||||
def load_resources(fname):
|
||||
@ -769,9 +778,9 @@ def destroy_subnets(subnets):
|
||||
LOG.info("Destroying subnets")
|
||||
for subnet in subnets:
|
||||
client = client_for_user(subnet['owner'])
|
||||
subnet_id = _get_resource_by_name(client.networks,
|
||||
subnet_id = _get_resource_by_name(client.subnets,
|
||||
'subnets', subnet['name'])['id']
|
||||
client.networks.delete_subnet(subnet_id)
|
||||
client.subnets.delete_subnet(subnet_id)
|
||||
|
||||
|
||||
def create_routers(routers):
|
||||
|
@ -41,8 +41,9 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
||||
'identity_admin', fill_in=True,
|
||||
identity_version=self.identity_version)
|
||||
(self.identity_admin_client, self.network_admin_client,
|
||||
self.networks_admin_client) = self._get_admin_clients()
|
||||
# Domain where dynamic credentials are provisioned (v3 only).
|
||||
self.networks_admin_client,
|
||||
self.subnets_admin_client) = self._get_admin_clients()
|
||||
# Domain where isolated credentials are provisioned (v3 only).
|
||||
# Use that of the admin account is None is configured.
|
||||
self.creds_domain_name = None
|
||||
if self.identity_version == 'v3':
|
||||
@ -61,9 +62,11 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
||||
"""
|
||||
os = clients.Manager(self.default_admin_creds)
|
||||
if self.identity_version == 'v2':
|
||||
return os.identity_client, os.network_client, os.networks_client
|
||||
return (os.identity_client, os.network_client, os.networks_client,
|
||||
os.subnets_client)
|
||||
else:
|
||||
return os.identity_v3_client, os.network_client, os.networks_client
|
||||
return (os.identity_v3_client, os.network_client,
|
||||
os.networks_client, os.subnets_client)
|
||||
|
||||
def _create_creds(self, suffix="", admin=False, roles=None):
|
||||
"""Create random credentials under the following schema.
|
||||
@ -168,7 +171,7 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
||||
for subnet_cidr in base_cidr.subnet(mask_bits):
|
||||
try:
|
||||
if self.network_resources:
|
||||
resp_body = self.network_admin_client.\
|
||||
resp_body = self.subnets_admin_client.\
|
||||
create_subnet(
|
||||
network_id=network_id, cidr=str(subnet_cidr),
|
||||
name=subnet_name,
|
||||
@ -176,7 +179,7 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
||||
enable_dhcp=self.network_resources['dhcp'],
|
||||
ip_version=4)
|
||||
else:
|
||||
resp_body = self.network_admin_client.\
|
||||
resp_body = self.subnets_admin_client.\
|
||||
create_subnet(network_id=network_id,
|
||||
cidr=str(subnet_cidr),
|
||||
name=subnet_name,
|
||||
@ -260,9 +263,9 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
||||
router_name)
|
||||
|
||||
def _clear_isolated_subnet(self, subnet_id, subnet_name):
|
||||
net_client = self.network_admin_client
|
||||
client = self.subnets_admin_client
|
||||
try:
|
||||
net_client.delete_subnet(subnet_id)
|
||||
client.delete_subnet(subnet_id)
|
||||
except lib_exc.NotFound:
|
||||
LOG.warn('subnet with name: %s not found for delete' %
|
||||
subnet_name)
|
||||
|
@ -62,6 +62,7 @@ class ScenarioTest(tempest.test.BaseTestCase):
|
||||
# Neutron network client
|
||||
cls.network_client = cls.manager.network_client
|
||||
cls.networks_client = cls.manager.networks_client
|
||||
cls.subnets_client = cls.manager.subnets_client
|
||||
# Heat client
|
||||
cls.orchestration_client = cls.manager.orchestration_client
|
||||
|
||||
@ -630,7 +631,7 @@ class NetworkScenarioTest(ScenarioTest):
|
||||
|
||||
def _list_subnets(self, *args, **kwargs):
|
||||
"""List subnets using admin creds """
|
||||
subnets_list = self.admin_manager.network_client.list_subnets(
|
||||
subnets_list = self.admin_manager.subnets_client.list_subnets(
|
||||
*args, **kwargs)
|
||||
return subnets_list['subnets']
|
||||
|
||||
@ -652,14 +653,16 @@ class NetworkScenarioTest(ScenarioTest):
|
||||
*args, **kwargs)
|
||||
return agents_list['agents']
|
||||
|
||||
def _create_subnet(self, network, client=None, namestart='subnet-smoke',
|
||||
**kwargs):
|
||||
def _create_subnet(self, network, client=None, subnets_client=None,
|
||||
namestart='subnet-smoke', **kwargs):
|
||||
"""
|
||||
Create a subnet for the given network within the cidr block
|
||||
configured for tenant networks.
|
||||
"""
|
||||
if not client:
|
||||
client = self.network_client
|
||||
if not subnets_client:
|
||||
subnets_client = self.subnets_client
|
||||
|
||||
def cidr_in_use(cidr, tenant_id):
|
||||
"""
|
||||
@ -697,15 +700,16 @@ class NetworkScenarioTest(ScenarioTest):
|
||||
**kwargs
|
||||
)
|
||||
try:
|
||||
result = client.create_subnet(**subnet)
|
||||
result = subnets_client.create_subnet(**subnet)
|
||||
break
|
||||
except lib_exc.Conflict as e:
|
||||
is_overlapping_cidr = 'overlaps with another subnet' in str(e)
|
||||
if not is_overlapping_cidr:
|
||||
raise
|
||||
self.assertIsNotNone(result, 'Unable to allocate tenant network')
|
||||
subnet = net_resources.DeletableSubnet(client=client,
|
||||
**result['subnet'])
|
||||
subnet = net_resources.DeletableSubnet(
|
||||
network_client=client, subnets_client=subnets_client,
|
||||
**result['subnet'])
|
||||
self.assertEqual(subnet.cidr, str_cidr)
|
||||
self.addCleanup(self.delete_wrapper, subnet.delete)
|
||||
return subnet
|
||||
@ -1062,7 +1066,8 @@ class NetworkScenarioTest(ScenarioTest):
|
||||
self.assertEqual(admin_state_up, router.admin_state_up)
|
||||
|
||||
def create_networks(self, client=None, networks_client=None,
|
||||
tenant_id=None, dns_nameservers=None):
|
||||
subnets_client=None, tenant_id=None,
|
||||
dns_nameservers=None):
|
||||
"""Create a network with a subnet connected to a router.
|
||||
|
||||
The baremetal driver is a special case since all nodes are
|
||||
@ -1092,7 +1097,8 @@ class NetworkScenarioTest(ScenarioTest):
|
||||
tenant_id=tenant_id)
|
||||
router = self._get_router(client=client, tenant_id=tenant_id)
|
||||
|
||||
subnet_kwargs = dict(network=network, client=client)
|
||||
subnet_kwargs = dict(network=network, client=client,
|
||||
subnets_client=subnets_client)
|
||||
# use explicit check because empty list is a valid option
|
||||
if dns_nameservers is not None:
|
||||
subnet_kwargs['dns_nameservers'] = dns_nameservers
|
||||
|
@ -291,7 +291,8 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
|
||||
def _create_tenant_network(self, tenant):
|
||||
network, subnet, router = self.create_networks(
|
||||
client=tenant.manager.network_client,
|
||||
networks_client=tenant.manager.networks_client)
|
||||
networks_client=tenant.manager.networks_client,
|
||||
subnets_client=tenant.manager.subnets_client)
|
||||
tenant.set_network(network, subnet, router)
|
||||
|
||||
def _set_compute_context(self, tenant):
|
||||
|
@ -34,28 +34,6 @@ class NetworkClient(base.BaseNetworkClient):
|
||||
quotas
|
||||
"""
|
||||
|
||||
def create_subnet(self, **kwargs):
|
||||
uri = '/subnets'
|
||||
post_data = {'subnet': kwargs}
|
||||
return self.create_resource(uri, post_data)
|
||||
|
||||
def update_subnet(self, subnet_id, **kwargs):
|
||||
uri = '/subnets/%s' % subnet_id
|
||||
post_data = {'subnet': kwargs}
|
||||
return self.update_resource(uri, post_data)
|
||||
|
||||
def show_subnet(self, subnet_id, **fields):
|
||||
uri = '/subnets/%s' % subnet_id
|
||||
return self.show_resource(uri, **fields)
|
||||
|
||||
def delete_subnet(self, subnet_id):
|
||||
uri = '/subnets/%s' % subnet_id
|
||||
return self.delete_resource(uri)
|
||||
|
||||
def list_subnets(self, **filters):
|
||||
uri = '/subnets'
|
||||
return self.list_resources(uri, **filters)
|
||||
|
||||
def create_port(self, **kwargs):
|
||||
uri = '/ports'
|
||||
post_data = {'port': kwargs}
|
||||
|
38
tempest/services/network/json/subnets_client.py
Normal file
38
tempest/services/network/json/subnets_client.py
Normal file
@ -0,0 +1,38 @@
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from tempest.services.network.json import base
|
||||
|
||||
|
||||
class SubnetsClient(base.BaseNetworkClient):
|
||||
|
||||
def create_subnet(self, **kwargs):
|
||||
uri = '/subnets'
|
||||
post_data = {'subnet': kwargs}
|
||||
return self.create_resource(uri, post_data)
|
||||
|
||||
def update_subnet(self, subnet_id, **kwargs):
|
||||
uri = '/subnets/%s' % subnet_id
|
||||
post_data = {'subnet': kwargs}
|
||||
return self.update_resource(uri, post_data)
|
||||
|
||||
def show_subnet(self, subnet_id, **fields):
|
||||
uri = '/subnets/%s' % subnet_id
|
||||
return self.show_resource(uri, **fields)
|
||||
|
||||
def delete_subnet(self, subnet_id):
|
||||
uri = '/subnets/%s' % subnet_id
|
||||
return self.delete_resource(uri)
|
||||
|
||||
def list_subnets(self, **filters):
|
||||
uri = '/subnets'
|
||||
return self.list_resources(uri, **filters)
|
@ -41,7 +41,9 @@ class DeletableResource(AttributeDict):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.client = kwargs.pop('client', None)
|
||||
self.network_client = kwargs.pop('network_client', None)
|
||||
self.networks_client = kwargs.pop('networks_client', None)
|
||||
self.subnets_client = kwargs.pop('subnets_client', None)
|
||||
super(DeletableResource, self).__init__(*args, **kwargs)
|
||||
|
||||
def __str__(self):
|
||||
@ -83,23 +85,23 @@ class DeletableSubnet(DeletableResource):
|
||||
self._router_ids = set()
|
||||
|
||||
def update(self, *args, **kwargs):
|
||||
result = self.client.update_subnet(self.id,
|
||||
*args,
|
||||
**kwargs)
|
||||
result = self.subnets_client.update_subnet(self.id,
|
||||
*args,
|
||||
**kwargs)
|
||||
return super(DeletableSubnet, self).update(**result['subnet'])
|
||||
|
||||
def add_to_router(self, router_id):
|
||||
self._router_ids.add(router_id)
|
||||
self.client.add_router_interface_with_subnet_id(router_id,
|
||||
subnet_id=self.id)
|
||||
self.network_client.add_router_interface_with_subnet_id(
|
||||
router_id, subnet_id=self.id)
|
||||
|
||||
def delete(self):
|
||||
for router_id in self._router_ids.copy():
|
||||
self.client.remove_router_interface_with_subnet_id(
|
||||
self.network_client.remove_router_interface_with_subnet_id(
|
||||
router_id,
|
||||
subnet_id=self.id)
|
||||
self._router_ids.remove(router_id)
|
||||
self.client.delete_subnet(self.id)
|
||||
self.subnets_client.delete_subnet(self.id)
|
||||
|
||||
|
||||
class DeletableRouter(DeletableResource):
|
||||
|
@ -380,7 +380,7 @@ class TestDestroyResources(JavelinUnitTest):
|
||||
|
||||
javelin.destroy_subnets([self.fake_object])
|
||||
|
||||
mocked_function = self.fake_client.networks.delete_subnet
|
||||
mocked_function = self.fake_client.subnets.delete_subnet
|
||||
mocked_function.assert_called_once_with(fake_subnet_id)
|
||||
|
||||
def test_destroy_routers(self):
|
||||
|
@ -127,7 +127,7 @@ class TestDynamicCredentialProvider(base.TestCase):
|
||||
|
||||
def _mock_subnet_create(self, iso_creds, id, name):
|
||||
subnet_fix = self.useFixture(mockpatch.PatchObject(
|
||||
iso_creds.network_admin_client,
|
||||
iso_creds.subnets_admin_client,
|
||||
'create_subnet',
|
||||
return_value={'subnet': {'id': id, 'name': name}}))
|
||||
return subnet_fix
|
||||
@ -272,7 +272,7 @@ class TestDynamicCredentialProvider(base.TestCase):
|
||||
net = mock.patch.object(creds.networks_admin_client,
|
||||
'delete_network')
|
||||
net_mock = net.start()
|
||||
subnet = mock.patch.object(creds.network_admin_client,
|
||||
subnet = mock.patch.object(creds.subnets_admin_client,
|
||||
'delete_subnet')
|
||||
subnet_mock = subnet.start()
|
||||
router = mock.patch.object(creds.network_admin_client,
|
||||
@ -362,7 +362,7 @@ class TestDynamicCredentialProvider(base.TestCase):
|
||||
net = mock.patch.object(creds.networks_admin_client,
|
||||
'delete_network')
|
||||
net_mock = net.start()
|
||||
subnet = mock.patch.object(creds.network_admin_client,
|
||||
subnet = mock.patch.object(creds.subnets_admin_client,
|
||||
'delete_subnet')
|
||||
subnet_mock = subnet.start()
|
||||
router = mock.patch.object(creds.network_admin_client,
|
||||
@ -496,7 +496,7 @@ class TestDynamicCredentialProvider(base.TestCase):
|
||||
net = mock.patch.object(creds.networks_admin_client,
|
||||
'delete_network')
|
||||
net_mock = net.start()
|
||||
subnet = mock.patch.object(creds.network_admin_client,
|
||||
subnet = mock.patch.object(creds.subnets_admin_client,
|
||||
'delete_subnet')
|
||||
subnet_mock = subnet.start()
|
||||
router = mock.patch.object(creds.network_admin_client,
|
||||
|
Loading…
Reference in New Issue
Block a user