summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspisarski <s.pisarski@cablelabs.com>2018-02-16 08:35:07 -0700
committerspisarski <s.pisarski@cablelabs.com>2018-02-16 08:35:07 -0700
commit20902078a98bfb76c12919b92cd0345dd3c06f8c (patch)
tree3743db3bca563fe82b22d2ababa33d839f32cc57
parent1b60980ee6b101261fb2115e417c4cf97cf29736 (diff)
Ensure project IDs are handled correctly for Network/Subnets
JIRA: SNAPS-265 Change-Id: If58f5817e52e21be377d2b06a5f7c3a413454350 Signed-off-by: spisarski <s.pisarski@cablelabs.com>
-rw-r--r--docs/how-to-use/IntegrationTests.rst15
-rw-r--r--snaps/config/router.py9
-rw-r--r--snaps/domain/network.py6
-rw-r--r--snaps/domain/test/network_tests.py38
-rw-r--r--snaps/openstack/create_instance.py23
-rw-r--r--snaps/openstack/create_network.py3
-rw-r--r--snaps/openstack/create_router.py9
-rw-r--r--snaps/openstack/create_stack.py4
-rw-r--r--snaps/openstack/tests/create_instance_tests.py8
-rw-r--r--snaps/openstack/tests/create_network_tests.py118
-rw-r--r--snaps/openstack/tests/create_stack_tests.py14
-rw-r--r--snaps/openstack/tests/os_source_file_test.py3
-rw-r--r--snaps/openstack/utils/heat_utils.py7
-rw-r--r--snaps/openstack/utils/neutron_utils.py67
-rw-r--r--snaps/openstack/utils/nova_utils.py39
-rw-r--r--snaps/openstack/utils/settings_utils.py12
-rw-r--r--snaps/openstack/utils/tests/heat_utils_tests.py9
-rw-r--r--snaps/openstack/utils/tests/neutron_utils_tests.py63
-rw-r--r--snaps/openstack/utils/tests/nova_utils_tests.py23
-rw-r--r--snaps/openstack/utils/tests/settings_utils_tests.py2
20 files changed, 335 insertions, 137 deletions
diff --git a/docs/how-to-use/IntegrationTests.rst b/docs/how-to-use/IntegrationTests.rst
index c376f8c..cdadd96 100644
--- a/docs/how-to-use/IntegrationTests.rst
+++ b/docs/how-to-use/IntegrationTests.rst
@@ -208,6 +208,21 @@ create_network_tests.py - CreateNetworkIPv6Tests
| | | IPv6 subnet |
+---------------------------------------+---------------+-----------------------------------------------------------+
+create_network_tests.py - CreateMultipleNetworkTests
+----------------------------------------------------
+
++---------------------------------------+---------------+-----------------------------------------------------------+
+| Test Name | Neutron API | Description |
++=======================================+===============+===========================================================+
+| test_network_same_name_diff_proj | 2 | Ensures that a network with the same name can be created |
+| | | against different projects |
++---------------------------------------+---------------+-----------------------------------------------------------+
+| test_network_create_by_admin_to | 2 | Ensures that a network can be created by the admin user |
+| _different_project | | to another project and that a creator with the credentials|
+| | | to the other project will not create a new network with |
+| | | the same name |
++---------------------------------------+---------------+-----------------------------------------------------------+
+
create_router_tests.py - CreateRouterSuccessTests
-------------------------------------------------
diff --git a/snaps/config/router.py b/snaps/config/router.py
index 72164f2..ae84038 100644
--- a/snaps/config/router.py
+++ b/snaps/config/router.py
@@ -61,7 +61,7 @@ class RouterConfig(object):
if not self.name:
raise RouterConfigError('Name is required')
- def dict_for_neutron(self, neutron, os_creds):
+ def dict_for_neutron(self, neutron, os_creds, project_id):
"""
Returns a dictionary object representing this object.
This is meant to be converted into JSON designed for use by the Neutron
@@ -70,7 +70,11 @@ class RouterConfig(object):
TODO - expand automated testing to exercise all parameters
:param neutron: The neutron client to retrieve external network
information if necessary
- :param os_creds: The OpenStack credentials
+ :param os_creds: The OpenStack credentials for retrieving the keystone
+ client for looking up the project ID when the
+ self.project_name is not None
+ :param project_id: the associated project ID to use when
+ self.project_name is None
:return: the dictionary object
"""
out = dict()
@@ -82,7 +86,6 @@ class RouterConfig(object):
keystone = keystone_utils.keystone_client(os_creds)
project = keystone_utils.get_project(
keystone=keystone, project_name=self.project_name)
- project_id = None
if project:
project_id = project.id
if project_id:
diff --git a/snaps/domain/network.py b/snaps/domain/network.py
index 2d02966..aabec21 100644
--- a/snaps/domain/network.py
+++ b/snaps/domain/network.py
@@ -24,6 +24,7 @@ class Network:
Constructor
:param name: the network's name
:param id: the network's ID
+ :param project_id: the associated project ID
:param admin_state_up: T/F - network is up when True
:param shared: T/F - network can be shared amongst other project's
:param external: T/F - network is deemed to be external
@@ -32,6 +33,7 @@ class Network:
"""
self.name = kwargs.get('name')
self.id = kwargs.get('id')
+ self.project_id = kwargs.get('project_id')
self.admin_state_up = kwargs.get('admin_state_up')
self.shared = kwargs.get('shared')
self.external = kwargs.get('router:external', kwargs.get('external'))
@@ -40,6 +42,7 @@ class Network:
def __eq__(self, other):
return (self.name == other.name and self.id == other.id and
+ self.project_id == other.project_id and
self.admin_state_up == other.admin_state_up and
self.shared == other.shared and
self.external == other.external and
@@ -57,6 +60,7 @@ class Subnet:
Constructor
:param name: the network's name
:param id: the subnet's ID
+ :param project_id: the associated project ID
:param network_id: the network's ID
:param cidr: the CIDR
:param ip_version: the IP version
@@ -71,6 +75,7 @@ class Subnet:
"""
self.name = kwargs.get('name')
self.id = kwargs.get('id')
+ self.project_id = kwargs.get('project_id')
self.network_id = kwargs.get('network_id')
self.cidr = kwargs.get('cidr')
self.ip_version = kwargs.get('ip_version')
@@ -95,6 +100,7 @@ class Subnet:
def __eq__(self, other):
return (self.name == other.name and
self.id == other.id and
+ self.project_id == other.project_id and
self.network_id == other.network_id and
self.cidr == other.cidr and
self.ip_version == other.ip_version and
diff --git a/snaps/domain/test/network_tests.py b/snaps/domain/test/network_tests.py
index 3003326..5f70c3f 100644
--- a/snaps/domain/test/network_tests.py
+++ b/snaps/domain/test/network_tests.py
@@ -26,13 +26,15 @@ class NetworkObjectTests(unittest.TestCase):
def test_construction_kwargs_1(self):
subnet = Subnet(
- **{'name': 'foo', 'id': 'bar', 'network_id': 'foo-bar'})
+ **{'name': 'foo', 'id': 'bar', 'project_id': 'proj1',
+ 'network_id': 'foo-bar'})
network = Network(
- **{'name': 'foo', 'id': 'bar', 'provider:network_type': 'flat',
- 'admin_state_up': False, 'shared': True,
- 'router:external': False, 'subnets': [subnet]})
+ **{'name': 'foo', 'id': 'bar', 'project_id': 'proj1',
+ 'provider:network_type': 'flat', 'admin_state_up': False,
+ 'shared': True, 'router:external': False, 'subnets': [subnet]})
self.assertEqual('foo', network.name)
self.assertEqual('bar', network.id)
+ self.assertEqual('proj1', network.project_id)
self.assertEqual('flat', network.type)
self.assertFalse(network.admin_state_up)
self.assertFalse(network.external)
@@ -41,13 +43,15 @@ class NetworkObjectTests(unittest.TestCase):
def test_construction_kwargs_2(self):
subnet = Subnet(
- **{'name': 'foo', 'id': 'bar', 'network_id': 'foo-bar'})
+ **{'name': 'foo', 'id': 'bar', 'project_id': 'proj1',
+ 'network_id': 'foo-bar'})
network = Network(
- **{'name': 'foo', 'id': 'bar', 'type': 'flat',
- 'admin_state_up': False, 'shared': True, 'external': False,
- 'subnets': [subnet]})
+ **{'name': 'foo', 'id': 'bar', 'project_id': 'proj1',
+ 'type': 'flat', 'admin_state_up': False, 'shared': True,
+ 'external': False, 'subnets': [subnet]})
self.assertEqual('foo', network.name)
self.assertEqual('bar', network.id)
+ self.assertEqual('proj1', network.project_id)
self.assertEqual('flat', network.type)
self.assertFalse(network.admin_state_up)
self.assertFalse(network.external)
@@ -56,12 +60,15 @@ class NetworkObjectTests(unittest.TestCase):
def test_construction_named(self):
subnet = Subnet(
- **{'name': 'foo', 'id': 'bar', 'network_id': 'foo-bar'})
+ **{'name': 'foo', 'id': 'bar', 'project_id': 'proj1',
+ 'network_id': 'foo-bar'})
network = Network(
- name='foo', id='bar', type='flat', admin_state_up=False,
- shared=True, external=False, subnets=[subnet])
+ name='foo', id='bar', project_id='proj1', type='flat',
+ admin_state_up=False, shared=True, external=False,
+ subnets=[subnet])
self.assertEqual('foo', network.name)
self.assertEqual('bar', network.id)
+ self.assertEqual('proj1', network.project_id)
self.assertEqual('flat', network.type)
self.assertFalse(network.admin_state_up)
self.assertFalse(network.external)
@@ -76,12 +83,14 @@ class SubnetObjectTests(unittest.TestCase):
def test_construction_kwargs(self):
subnet = Subnet(
- **{'name': 'foo', 'id': 'bar', 'cidr': '10.0.0.0/24',
- 'ip_version': 4, 'gateway_ip': '10.0.0.1', 'enable_dhcp': True,
+ **{'name': 'foo', 'id': 'bar', 'project_id': 'proj1',
+ 'cidr': '10.0.0.0/24', 'ip_version': 4,
+ 'gateway_ip': '10.0.0.1', 'enable_dhcp': True,
'dns_nameservers': ['8.8.8.8'], 'host_routes': list(),
'ipv6_ra_mode': 'hello', 'ipv6_address_mode': 'world'})
self.assertEqual('foo', subnet.name)
self.assertEqual('bar', subnet.id)
+ self.assertEqual('proj1', subnet.project_id)
self.assertEqual('10.0.0.0/24', subnet.cidr)
self.assertEqual(4, subnet.ip_version)
self.assertEqual('10.0.0.1', subnet.gateway_ip)
@@ -94,12 +103,13 @@ class SubnetObjectTests(unittest.TestCase):
def test_construction_named(self):
subnet = Subnet(
- name='foo', id='bar', cidr='10.0.0.0/24',
+ name='foo', id='bar', project_id='proj1', cidr='10.0.0.0/24',
ip_version=4, gateway_ip='10.0.0.1', enable_dhcp=True,
dns_nameservers=['8.8.8.8'], host_routes=list(),
ipv6_ra_mode='hello', ipv6_address_mode='world')
self.assertEqual('foo', subnet.name)
self.assertEqual('bar', subnet.id)
+ self.assertEqual('proj1', subnet.project_id)
self.assertEqual('10.0.0.0/24', subnet.cidr)
self.assertEqual(4, subnet.ip_version)
self.assertEqual('10.0.0.1', subnet.gateway_ip)
diff --git a/snaps/openstack/create_instance.py b/snaps/openstack/create_instance.py
index 73cdf8a..dcb73cd 100644
--- a/snaps/openstack/create_instance.py
+++ b/snaps/openstack/create_instance.py
@@ -113,8 +113,8 @@ class OpenStackVmInstance(OpenStackComputeObject):
'Found existing machine with name - %s',
self.instance_settings.name)
- fips = neutron_utils.get_floating_ips(self.__neutron,
- self.__ports)
+ fips = neutron_utils.get_port_floating_ips(
+ self.__neutron, self.__ports)
for port_id, fip in fips:
settings = self.instance_settings.floating_ip_settings
for fip_setting in settings:
@@ -136,7 +136,7 @@ class OpenStackVmInstance(OpenStackComputeObject):
glance = glance_utils.glance_client(self._os_creds)
self.__vm = nova_utils.create_server(
self._nova, self.__neutron, glance, self.instance_settings,
- self.image_settings, self.keypair_settings)
+ self.image_settings, self.project_id, self.keypair_settings)
logger.info('Created instance with name - %s',
self.instance_settings.name)
@@ -167,7 +167,7 @@ class OpenStackVmInstance(OpenStackComputeObject):
if volume and self.vm_active(block=True):
vm = nova_utils.attach_volume(
self._nova, self.__neutron, self.__vm, volume,
- VOL_DETACH_TIMEOUT)
+ self.project_id, timeout=VOL_DETACH_TIMEOUT)
if vm:
self.__vm = vm
@@ -273,7 +273,7 @@ class OpenStackVmInstance(OpenStackComputeObject):
if volume:
vm = nova_utils.detach_volume(
self._nova, self.__neutron, self.__vm, volume,
- VOL_DETACH_TIMEOUT)
+ self.project_id, timeout=VOL_DETACH_TIMEOUT)
if vm:
self.__vm = vm
else:
@@ -318,7 +318,8 @@ class OpenStackVmInstance(OpenStackComputeObject):
for port_setting in port_settings:
port = neutron_utils.get_port(
- self.__neutron, port_settings=port_setting)
+ self.__neutron, port_settings=port_setting,
+ project_id=self.project_id)
if port:
ports.append((port_setting.name, port))
@@ -358,7 +359,7 @@ class OpenStackVmInstance(OpenStackComputeObject):
:return: Server object
"""
return nova_utils.get_server_object_by_id(
- self._nova, self.__neutron, self.__vm.id)
+ self._nova, self.__neutron, self.__vm.id, self.project_id)
def get_console_output(self):
"""
@@ -506,7 +507,7 @@ class OpenStackVmInstance(OpenStackComputeObject):
STATUS_ACTIVE, block, self.instance_settings.vm_boot_timeout,
poll_interval):
self.__vm = nova_utils.get_server_object_by_id(
- self._nova, self.__neutron, self.__vm.id)
+ self._nova, self.__neutron, self.__vm.id, self.project_id)
return True
return False
@@ -773,19 +774,21 @@ class OpenStackVmInstance(OpenStackComputeObject):
self._nova, self.__vm, reboot_type=reboot_type)
-def generate_creator(os_creds, vm_inst, image_config, keypair_config=None):
+def generate_creator(os_creds, vm_inst, image_config, project_id,
+ keypair_config=None):
"""
Initializes an OpenStackVmInstance object
:param os_creds: the OpenStack credentials
:param vm_inst: the SNAPS-OO VmInst domain object
:param image_config: the associated ImageConfig object
+ :param project_id: the associated project ID
:param keypair_config: the associated KeypairConfig object (optional)
:return: an initialized OpenStackVmInstance object
"""
nova = nova_utils.nova_client(os_creds)
neutron = neutron_utils.neutron_client(os_creds)
derived_inst_config = settings_utils.create_vm_inst_config(
- nova, neutron, vm_inst)
+ nova, neutron, vm_inst, project_id)
derived_inst_creator = OpenStackVmInstance(
os_creds, derived_inst_config, image_config, keypair_config)
diff --git a/snaps/openstack/create_network.py b/snaps/openstack/create_network.py
index 984eedd..b57e108 100644
--- a/snaps/openstack/create_network.py
+++ b/snaps/openstack/create_network.py
@@ -54,8 +54,7 @@ class OpenStackNetwork(OpenStackNetworkObject):
try:
self.__network = neutron_utils.get_network(
self._neutron, network_settings=self.network_settings,
- project_id=self.network_settings.get_project_id(
- self._os_creds))
+ project_id=self.project_id, os_creds=self._os_creds)
except Unauthorized as e:
logger.warn('Unable to lookup network with name %s - %s',
self.network_settings.name, e)
diff --git a/snaps/openstack/create_router.py b/snaps/openstack/create_router.py
index c9ccdd6..765f7a3 100644
--- a/snaps/openstack/create_router.py
+++ b/snaps/openstack/create_router.py
@@ -80,7 +80,8 @@ class OpenStackRouter(OpenStackNetworkObject):
for port_setting in self.router_settings.port_settings:
port = neutron_utils.get_port(
- self._neutron, port_settings=port_setting)
+ self._neutron, port_settings=port_setting,
+ project_id=self.project_id)
if port:
self.__ports.append(port)
@@ -95,7 +96,8 @@ class OpenStackRouter(OpenStackNetworkObject):
if not self.__router:
self.__router = neutron_utils.create_router(
- self._neutron, self._os_creds, self.router_settings)
+ self._neutron, self._os_creds, self.router_settings,
+ self.project_id)
for internal_subnet_name in self.router_settings.internal_subnets:
internal_subnet = neutron_utils.get_subnet(
@@ -114,7 +116,8 @@ class OpenStackRouter(OpenStackNetworkObject):
for port_setting in self.router_settings.port_settings:
port = neutron_utils.get_port(
- self._neutron, port_settings=port_setting)
+ self._neutron, port_settings=port_setting,
+ project_id=self.project_id)
logger.info(
'Retrieved port %s for router - %s', port_setting.name,
self.router_settings.name)
diff --git a/snaps/openstack/create_stack.py b/snaps/openstack/create_stack.py
index d4a6b10..99d2925 100644
--- a/snaps/openstack/create_stack.py
+++ b/snaps/openstack/create_stack.py
@@ -287,13 +287,13 @@ class OpenStackHeatStack(OpenStackCloudObject, object):
neutron = neutron_utils.neutron_client(self._os_creds)
stack_servers = heat_utils.get_stack_servers(
- self.__heat_cli, nova, neutron, self.__stack)
+ self.__heat_cli, nova, neutron, self.__stack, self.project_id)
glance = glance_utils.glance_client(self._os_creds)
for stack_server in stack_servers:
vm_inst_settings = settings_utils.create_vm_inst_config(
- nova, neutron, stack_server)
+ nova, neutron, stack_server, self.project_id)
image_settings = settings_utils.determine_image_config(
glance, stack_server, self.image_settings)
keypair_settings = settings_utils.determine_keypair_config(
diff --git a/snaps/openstack/tests/create_instance_tests.py b/snaps/openstack/tests/create_instance_tests.py
index c713794..4ff9fce 100644
--- a/snaps/openstack/tests/create_instance_tests.py
+++ b/snaps/openstack/tests/create_instance_tests.py
@@ -816,19 +816,19 @@ class CreateInstanceSingleNetworkTests(OSIntegrationTestCase):
# Test default reboot which should be 'SOFT'
inst_creator.reboot()
# Lag time to allow for shutdown routine to take effect
- time.sleep(10)
+ time.sleep(15)
self.assertTrue(check_dhcp_lease(inst_creator, ip))
self.assertTrue(validate_ssh_client(inst_creator))
# Test 'SOFT' reboot
inst_creator.reboot(reboot_type=RebootType.soft)
- time.sleep(10)
+ time.sleep(15)
self.assertTrue(check_dhcp_lease(inst_creator, ip))
self.assertTrue(validate_ssh_client(inst_creator))
# Test 'HARD' reboot
inst_creator.reboot(reboot_type=RebootType.hard)
- time.sleep(10)
+ time.sleep(15)
self.assertTrue(check_dhcp_lease(inst_creator, ip))
self.assertTrue(validate_ssh_client(inst_creator))
@@ -899,7 +899,7 @@ class CreateInstanceSingleNetworkTests(OSIntegrationTestCase):
derived_inst_creator = create_instance.generate_creator(
self.os_creds, vm_inst, self.image_creator.image_settings,
- self.keypair_creator.keypair_settings)
+ self.project_id, self.keypair_creator.keypair_settings)
derived_inst_creator.add_floating_ip(FloatingIpConfig(
name=self.floating_ip_name, port_name=self.port_1_name,
diff --git a/snaps/openstack/tests/create_network_tests.py b/snaps/openstack/tests/create_network_tests.py
index 62d9bd9..af5160b 100644
--- a/snaps/openstack/tests/create_network_tests.py
+++ b/snaps/openstack/tests/create_network_tests.py
@@ -396,7 +396,8 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
# Validate network was created
self.assertTrue(neutron_utils_tests.validate_network(
- self.neutron, self.net_creator.network_settings.name, True))
+ self.neutron, self.net_creator.network_settings.name, True,
+ project_id=self.project_id))
# Validate subnets
self.assertTrue(neutron_utils_tests.validate_subnet(
@@ -415,12 +416,14 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
# Validate network was created
self.assertTrue(neutron_utils_tests.validate_network(
- self.neutron, self.net_creator.network_settings.name, True))
+ self.neutron, self.net_creator.network_settings.name, True,
+ self.project_id))
neutron_utils.delete_network(self.neutron,
self.net_creator.get_network())
self.assertIsNone(neutron_utils.get_network(
- self.neutron, network_settings=self.net_creator.network_settings))
+ self.neutron, network_settings=self.net_creator.network_settings,
+ os_creds=self.os_creds, project_id=self.project_id))
# This shall not throw an exception here
self.net_creator.clean()
@@ -441,7 +444,8 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
# Validate network was created
self.assertTrue(neutron_utils_tests.validate_network(
- self.neutron, self.net_creator.network_settings.name, True))
+ self.neutron, self.net_creator.network_settings.name, True,
+ self.project_id))
# Validate subnets
self.assertTrue(neutron_utils_tests.validate_subnet(
@@ -490,7 +494,8 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
self.net_creator.create()
retrieved_net = neutron_utils.get_network(
- self.neutron, network_settings=self.net_config.network_settings)
+ self.neutron, network_settings=self.net_config.network_settings,
+ os_creds=self.os_creds, project_id=self.project_id)
self.assertEqual(self.net_creator.get_network().id, retrieved_net.id)
@@ -520,7 +525,8 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
self.net_creator.create()
retrieved_net = neutron_utils.get_network(
- self.neutron, network_settings=self.net_config.network_settings)
+ self.neutron, network_settings=self.net_config.network_settings,
+ os_creds=self.os_creds, project_id=self.project_id)
self.assertEqual(self.net_creator.get_network().id, retrieved_net.id)
@@ -578,7 +584,8 @@ class CreateNetworkIPv6Tests(OSIntegrationTestCase):
# Validate network was created
self.assertTrue(neutron_utils_tests.validate_network(
- self.neutron, self.net_creator.network_settings.name, True))
+ self.neutron, self.net_creator.network_settings.name, True,
+ self.project_id))
network = self.net_creator.get_network()
self.assertEqual(1, len(network.subnets))
@@ -678,7 +685,8 @@ class CreateNetworkTypeTests(OSComponentTestCase):
# Validate network was created
self.assertTrue(neutron_utils_tests.validate_network(
- self.neutron, net_settings.name, True))
+ self.neutron, net_settings.name, True,
+ self.net_creator.project_id))
self.assertEquals(network_type, network.type)
@@ -707,7 +715,8 @@ class CreateNetworkTypeTests(OSComponentTestCase):
# Validate network was created
self.assertTrue(neutron_utils_tests.validate_network(
- self.neutron, net_settings.name, True))
+ self.neutron, net_settings.name, True,
+ self.net_creator.project_id))
self.assertEquals(network_type, network.type)
@@ -728,7 +737,7 @@ class CreateNetworkTypeTests(OSComponentTestCase):
# Validate network was created
self.assertTrue(neutron_utils_tests.validate_network(
- self.neutron, net_settings.name, True))
+ self.neutron, net_settings.name, True, project_id=self.project_id))
self.assertEqual(network_type, network.type)
@@ -769,3 +778,92 @@ class CreateNetworkTypeTests(OSComponentTestCase):
self.net_creator = OpenStackNetwork(self.os_creds, net_settings)
with self.assertRaises(Exception):
self.net_creator.create()
+
+
+class CreateMultipleNetworkTests(OSIntegrationTestCase):
+ """
+ Test for the CreateNetwork class and how it interacts with networks
+ groups within other projects with the same name
+ """
+
+ def setUp(self):
+ """
+ Sets up object for test
+ """
+ super(self.__class__, self).__start__()
+
+ guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
+ self.net_config = openstack_tests.get_pub_net_config(
+ net_name=guid + '-pub-net', subnet_name=guid + '-pub-subnet')
+
+ self.neutron = neutron_utils.neutron_client(self.os_creds)
+
+ # Initialize for cleanup
+ self.admin_net_creator = None
+ self.proj_net_creator = None
+
+ def tearDown(self):
+ """
+ Cleans the network
+ """
+ if self.admin_net_creator:
+ self.admin_net_creator.clean()
+ if self.proj_net_creator:
+ self.proj_net_creator.clean()
+
+ super(self.__class__, self).__clean__()
+
+ def test_network_same_name_diff_proj(self):
+ """
+ Tests the creation of an OpenStackNetwork with the same name
+ within a different project/tenant when not configured but implied by
+ the OSCreds.
+ """
+ # Create Network
+
+ self.admin_net_creator = OpenStackNetwork(
+ self.admin_os_creds, self.net_config.network_settings)
+ self.admin_net_creator.create()
+
+ self.proj_net_creator = OpenStackNetwork(
+ self.os_creds, self.net_config.network_settings)
+ self.proj_net_creator.create()
+
+ self.assertNotEqual(
+ self.admin_net_creator.get_network().id,
+ self.proj_net_creator.get_network().id)
+
+ admin_creator2 = OpenStackNetwork(
+ self.admin_os_creds, self.net_config.network_settings)
+ admin_creator2.create()
+ self.assertEqual(
+ self.admin_net_creator.get_network(), admin_creator2.get_network())
+
+ proj_creator2 = OpenStackNetwork(
+ self.os_creds, self.net_config.network_settings)
+ proj_creator2.create()
+ self.assertEqual(self.proj_net_creator.get_network(),
+ proj_creator2.get_network())
+
+ def test_network_create_by_admin_to_different_project(self):
+ """
+ Tests the creation of an OpenStackNetwork by the admin user and
+ initialize again with tenant credentials.
+ """
+ # Create Network
+
+ net_settings = self.net_config.network_settings
+
+ net_settings.project_name = self.os_creds.project_name
+
+ self.admin_net_creator = OpenStackNetwork(
+ self.admin_os_creds, net_settings)
+ self.admin_net_creator.create()
+
+ self.proj_net_creator = OpenStackNetwork(
+ self.os_creds, self.net_config.network_settings)
+ self.proj_net_creator.create()
+
+ self.assertEqual(
+ self.admin_net_creator.get_network().id,
+ self.proj_net_creator.get_network().id)
diff --git a/snaps/openstack/tests/create_stack_tests.py b/snaps/openstack/tests/create_stack_tests.py
index 7155a29..e04ae07 100644
--- a/snaps/openstack/tests/create_stack_tests.py
+++ b/snaps/openstack/tests/create_stack_tests.py
@@ -39,7 +39,8 @@ from snaps.openstack.create_stack import (
StackSettings, StackCreationError, StackError, OpenStackHeatStack)
from snaps.openstack.tests import openstack_tests, create_instance_tests
from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase
-from snaps.openstack.utils import heat_utils, neutron_utils, nova_utils
+from snaps.openstack.utils import (heat_utils, neutron_utils, nova_utils,
+ keystone_utils)
__author__ = 'spisarski'
@@ -351,8 +352,11 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
self.assertEqual(self.network_name, net_creators[0].get_network().name)
neutron = neutron_utils.neutron_client(self.os_creds)
+ admin_proj_id = keystone_utils.get_project(
+ self.keystone, self.admin_os_creds.project_name)
net_by_name = neutron_utils.get_network(
- neutron, network_name=net_creators[0].get_network().name)
+ neutron, network_name=net_creators[0].get_network().name,
+ project_id=admin_proj_id)
self.assertEqual(net_creators[0].get_network(), net_by_name)
self.assertIsNotNone(neutron_utils.get_network_by_id(
neutron, net_creators[0].get_network().id))
@@ -393,7 +397,8 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
nova, neutron, server_name=vm_inst_creators[0].get_vm_inst().name)
self.assertEqual(vm_inst_creators[0].get_vm_inst(), vm_inst_by_name)
self.assertIsNotNone(nova_utils.get_server_object_by_id(
- nova, neutron, vm_inst_creators[0].get_vm_inst().id))
+ nova, neutron, vm_inst_creators[0].get_vm_inst().id,
+ vm_inst_creators[0].project_id))
class CreateStackFloatingIpTests(OSIntegrationTestCase):
@@ -684,7 +689,8 @@ class CreateStackRouterTests(OSIntegrationTestCase):
router = creator.get_router()
ext_net = neutron_utils.get_network(
- self.neutron, network_name=self.ext_net_name)
+ self.neutron, network_name=self.ext_net_name,
+ project_id=self.project_id)
self.assertEqual(ext_net.id, router.external_network_id)
diff --git a/snaps/openstack/tests/os_source_file_test.py b/snaps/openstack/tests/os_source_file_test.py
index f1f90ec..58c9e4e 100644
--- a/snaps/openstack/tests/os_source_file_test.py
+++ b/snaps/openstack/tests/os_source_file_test.py
@@ -63,7 +63,7 @@ class OSComponentTestCase(unittest.TestCase):
keystone = keystone_utils.keystone_client(self.os_creds)
self.project_id = keystone_utils.get_project(
- keystone=keystone, project_name=self.os_creds.project_name)
+ keystone=keystone, project_name=self.os_creds.project_name).id
@staticmethod
def parameterize(testcase_klass, os_creds, ext_net_name,
@@ -170,6 +170,7 @@ class OSIntegrationTestCase(OSComponentTestCase):
# add user to project
self.project_creator.assoc_user(self.user_creator.get_user())
+ self.project_id = self.project_creator.get_project().id
def __clean__(self):
"""
diff --git a/snaps/openstack/utils/heat_utils.py b/snaps/openstack/utils/heat_utils.py
index e440717..6e54dc6 100644
--- a/snaps/openstack/utils/heat_utils.py
+++ b/snaps/openstack/utils/heat_utils.py
@@ -257,13 +257,14 @@ def get_stack_security_groups(heat_cli, neutron, stack):
return out
-def get_stack_servers(heat_cli, nova, neutron, stack):
+def get_stack_servers(heat_cli, nova, neutron, stack, project_id):
"""
Returns a list of VMInst domain objects associated with a Stack
:param heat_cli: the OpenStack heat client object
:param nova: the OpenStack nova client object
:param neutron: the OpenStack neutron client object
:param stack: the SNAPS-OO Stack domain object
+ :param project_id: the associated project ID
:return: a list of VMInst domain objects
"""
@@ -272,7 +273,7 @@ def get_stack_servers(heat_cli, nova, neutron, stack):
for resource in srvr_res:
try:
server = nova_utils.get_server_object_by_id(
- nova, neutron, resource.id)
+ nova, neutron, resource.id, project_id)
if server:
out.append(server)
except NotFound:
@@ -286,7 +287,7 @@ def get_stack_servers(heat_cli, nova, neutron, stack):
heat_cli, res_res.id, 'OS::Nova::Server')
for res_srvr in res_res_srvrs:
server = nova_utils.get_server_object_by_id(
- nova, neutron, res_srvr.id)
+ nova, neutron, res_srvr.id, project_id)
if server:
out.append(server)
diff --git a/snaps/openstack/utils/neutron_utils.py b/snaps/openstack/utils/neutron_utils.py
index d297c8c..a2957a6 100644
--- a/snaps/openstack/utils/neutron_utils.py
+++ b/snaps/openstack/utils/neutron_utils.py
@@ -102,7 +102,7 @@ def delete_network(neutron, network):
def get_network(neutron, network_settings=None, network_name=None,
- project_id=None):
+ project_id=None, os_creds=None):
"""
Returns Network SNAPS-OO domain object the first network found with
either the given attributes from the network_settings object if not None,
@@ -112,6 +112,7 @@ def get_network(neutron, network_settings=None, network_name=None,
:param network_settings: the NetworkConfig object used to create filter
:param network_name: the name of the network to retrieve
:param project_id: the id of the network's project
+ :param os_creds: the OpenStack credentials for retrieving the project
:return: a SNAPS-OO Network domain object
"""
net_filter = dict()
@@ -120,7 +121,10 @@ def get_network(neutron, network_settings=None, network_name=None,
elif network_name:
net_filter['name'] = network_name
- if project_id:
+ if network_settings and network_settings.project_name and os_creds:
+ net_filter['project_id'] = keystone_utils.get_project(
+ os_creds=os_creds, project_name=network_settings.project_name).id
+ elif project_id:
net_filter['project_id'] = project_id
networks = neutron.list_networks(**net_filter)
@@ -278,7 +282,7 @@ def get_subnets_by_network_id(neutron, network_id):
return out
-def create_router(neutron, os_creds, router_settings):
+def create_router(neutron, os_creds, router_settings, project_id):
"""
Creates a router for OpenStack
:param neutron: the client
@@ -286,10 +290,16 @@ def create_router(neutron, os_creds, router_settings):
:param router_settings: A dictionary containing the router configuration
and is responsible for creating the subnet request
JSON body
+ :param project_id: the associated project ID
:return: a SNAPS-OO Router domain object
"""
if neutron:
- json_body = router_settings.dict_for_neutron(neutron, os_creds)
+ if router_settings and router_settings.project_name:
+ keystone = keystone_utils.keystone_client(os_creds)
+ project_id = keystone_utils.get_project(
+ keystone=keystone, project_name=router_settings.project_name)
+ json_body = router_settings.dict_for_neutron(
+ neutron, os_creds, project_id)
logger.info('Creating router with name - ' + router_settings.name)
os_router = neutron.create_router(json_body)
return __map_router(neutron, os_router['router'])
@@ -460,10 +470,7 @@ def create_port(neutron, os_creds, port_settings):
logger.info('Creating port for network with name - %s',
port_settings.network_name)
os_port = neutron.create_port(body=json_body)['port']
- return Port(name=os_port['name'], id=os_port['id'],
- ips=os_port['fixed_ips'],
- mac_address=os_port['mac_address'],
- allowed_address_pairs=os_port['allowed_address_pairs'])
+ return Port(**os_port)
def delete_port(neutron, port):
@@ -476,13 +483,14 @@ def delete_port(neutron, port):
neutron.delete_port(port.id)
-def get_port(neutron, port_settings=None, port_name=None):
+def get_port(neutron, port_settings=None, port_name=None, project_id=None):
"""
Returns the first port object (dictionary) found for the given query
:param neutron: the client
:param port_settings: the PortConfig object used for generating the query
:param port_name: if port_settings is None, this name is the value to place
into the query
+ :param project_id: the associated project ID
:return: a SNAPS-OO Port domain object
"""
port_filter = dict()
@@ -497,13 +505,17 @@ def get_port(neutron, port_settings=None, port_name=None):
if port_settings.mac_address:
port_filter['mac_address'] = port_settings.mac_address
if port_settings.network_name:
- network = get_network(neutron,
- network_name=port_settings.network_name)
+ network = get_network(
+ neutron, network_name=port_settings.network_name,
+ project_id=project_id)
if network:
port_filter['network_id'] = network.id
elif port_name:
port_filter['name'] = port_name
+ if project_id:
+ port_filter['project_id'] = project_id
+
ports = neutron.list_ports(**port_filter)
for port in ports['ports']:
return Port(**port)
@@ -718,14 +730,11 @@ def get_external_networks(neutron):
return out
-def get_floating_ips(neutron, ports=None):
+def get_port_floating_ips(neutron, ports):
"""
- Returns all of the floating IPs
- When ports is not None, FIPs returned must be associated with one of the
- ports in the list and a tuple 2 where the first element being the port's
- ID and the second being the FloatingIp SNAPS-OO domain object.
- When ports is None, all known FloatingIp SNAPS-OO domain objects will be
- returned in a list
+ Returns all of the floating IPs associated with the ports returned in a
+ list of tuples where the port object is in the first position and the
+ floating IP object is in the second
:param neutron: the Neutron client
:param ports: a list of tuple 2 where index 0 is the port name and index 1
is the SNAPS-OO Port object
@@ -735,14 +744,22 @@ def get_floating_ips(neutron, ports=None):
out = list()
fips = neutron.list_floatingips()
for fip in fips['floatingips']:
- if ports:
- for port_name, port in ports:
- if port and port.id == fip['port_id']:
- out.append((port.id, FloatingIp(**fip)))
- break
- else:
- out.append(FloatingIp(**fip))
+ for port_name, port in ports:
+ if port and port.id == fip['port_id']:
+ out.append((port.id, FloatingIp(**fip)))
+ break
+ return out
+
+def get_floating_ips(neutron):
+ """
+ Returns a list of all of the floating IPs
+ :param neutron: the Neutron client
+ """
+ out = list()
+ fips = neutron.list_floatingips()
+ for fip in fips['floatingips']:
+ out.append(FloatingIp(**fip))
return out
diff --git a/snaps/openstack/utils/nova_utils.py b/snaps/openstack/utils/nova_utils.py
index ba902f9..b37e0a4 100644
--- a/snaps/openstack/utils/nova_utils.py
+++ b/snaps/openstack/utils/nova_utils.py
@@ -56,7 +56,7 @@ def nova_client(os_creds):
def create_server(nova, neutron, glance, instance_config, image_config,
- keypair_config=None):
+ project_id, keypair_config=None):
"""
Creates a VM instance
:param nova: the nova client (required)
@@ -64,6 +64,7 @@ def create_server(nova, neutron, glance, instance_config, image_config,
:param glance: the glance client (required)
:param instance_config: the VMInstConfig object (required)
:param image_config: the VM's ImageConfig object (required)
+ :param project_id: the associated project ID (required)
:param keypair_config: the VM's KeypairConfig object (optional)
:return: a snaps.domain.VmInst object
"""
@@ -71,7 +72,8 @@ def create_server(nova, neutron, glance, instance_config, image_config,
ports = list()
for port_setting in instance_config.port_settings:
- port = neutron_utils.get_port(neutron, port_settings=port_setting)
+ port = neutron_utils.get_port(
+ neutron, port_settings=port_setting, project_id=project_id)
if port:
ports.append(port)
else:
@@ -120,14 +122,15 @@ def create_server(nova, neutron, glance, instance_config, image_config,
server = nova.servers.create(**args)
- return __map_os_server_obj_to_vm_inst(neutron, server)
+ return __map_os_server_obj_to_vm_inst(neutron, server, project_id)
else:
raise NovaException(
'Cannot create instance, image cannot be located with name %s',
image_config.name)
-def get_server(nova, neutron, vm_inst_settings=None, server_name=None):
+def get_server(nova, neutron, vm_inst_settings=None, server_name=None,
+ project_id=None):
"""
Returns a VmInst object for the first server instance found.
:param nova: the Nova client
@@ -136,6 +139,7 @@ def get_server(nova, neutron, vm_inst_settings=None, server_name=None):
the query if not None
:param server_name: the server with this name to return if vm_inst_settings
is not None
+ :param project_id: the assocaited project ID
:return: a snaps.domain.VmInst object or None if not found
"""
search_opts = dict()
@@ -146,7 +150,7 @@ def get_server(nova, neutron, vm_inst_settings=None, server_name=None):
servers = nova.servers.list(search_opts=search_opts)
for server in servers:
- return __map_os_server_obj_to_vm_inst(neutron, server)
+ return __map_os_server_obj_to_vm_inst(neutron, server, project_id)
def get_server_connection(nova, vm_inst_settings=None, server_name=None):
@@ -170,7 +174,7 @@ def get_server_connection(nova, vm_inst_settings=None, server_name=None):
return server.links[0]
-def __map_os_server_obj_to_vm_inst(neutron, os_server):
+def __map_os_server_obj_to_vm_inst(neutron, os_server, project_id):
"""
Returns a VmInst object for an OpenStack Server object
:param neutron: the Neutron client (when None, ports will be empty)
@@ -187,7 +191,8 @@ def __map_os_server_obj_to_vm_inst(neutron, os_server):
out_ports = list()
if len(os_server.networks) > 0:
for net_name, ips in os_server.networks.items():
- network = neutron_utils.get_network(neutron, network_name=net_name)
+ network = neutron_utils.get_network(
+ neutron, network_name=net_name, project_id=project_id)
ports = neutron_utils.get_ports(neutron, network, ips)
for port in ports:
out_ports.append(port)
@@ -249,28 +254,30 @@ def get_server_console_output(nova, server):
return None
-def get_latest_server_object(nova, neutron, server):
+def get_latest_server_object(nova, neutron, server, project_id):
"""
Returns a server with a given id
:param nova: the Nova client
:param neutron: the Neutron client
:param server: the old server object
+ :param project_id: the associated project ID
:return: the list of servers or None if not found
"""
server = __get_latest_server_os_object(nova, server)
- return __map_os_server_obj_to_vm_inst(neutron, server)
+ return __map_os_server_obj_to_vm_inst(neutron, server, project_id)
-def get_server_object_by_id(nova, neutron, server_id):
+def get_server_object_by_id(nova, neutron, server_id, project_id):
"""
Returns a server with a given id
:param nova: the Nova client
:param neutron: the Neutron client
:param server_id: the server's id
+ :param project_id: the associated project ID
:return: an SNAPS-OO VmInst object or None if not found
"""
server = __get_latest_server_os_object_by_id(nova, server_id)
- return __map_os_server_obj_to_vm_inst(neutron, server)
+ return __map_os_server_obj_to_vm_inst(neutron, server, project_id)
def get_server_security_group_names(nova, server):
@@ -713,7 +720,7 @@ def update_quotas(nova, project_id, compute_quotas):
return nova.quotas.update(project_id, **update_values)
-def attach_volume(nova, neutron, server, volume, timeout=120):
+def attach_volume(nova, neutron, server, volume, project_id, timeout=120):
"""
Attaches a volume to a server. When the timeout parameter is used, a VmInst
object with the proper volume updates is returned unless it has not been
@@ -722,6 +729,7 @@ def attach_volume(nova, neutron, server, volume, timeout=120):
:param neutron: the neutron client
:param server: the VMInst domain object
:param volume: the Volume domain object
+ :param project_id: the associated project ID
:param timeout: denotes the amount of time to block to determine if the
has been properly attached.
:return: updated VmInst object
@@ -730,7 +738,7 @@ def attach_volume(nova, neutron, server, volume, timeout=120):
start_time = time.time()
while time.time() < start_time + timeout:
- vm = get_server_object_by_id(nova, neutron, server.id)
+ vm = get_server_object_by_id(nova, neutron, server.id, project_id)
for vol_dict in vm.volume_ids:
if volume.id == vol_dict['id']:
return vm
@@ -741,7 +749,7 @@ def attach_volume(nova, neutron, server, volume, timeout=120):
volume.id, server.id))
-def detach_volume(nova, neutron, server, volume, timeout=120):
+def detach_volume(nova, neutron, server, volume, project_id, timeout=120):
"""
Detaches a volume to a server. When the timeout parameter is used, a VmInst
object with the proper volume updates is returned unless it has not been
@@ -750,6 +758,7 @@ def detach_volume(nova, neutron, server, volume, timeout=120):
:param neutron: the neutron client
:param server: the VMInst domain object
:param volume: the Volume domain object
+ :param project_id: the associated project ID
:param timeout: denotes the amount of time to block to determine if the
has been properly detached.
:return: updated VmInst object
@@ -758,7 +767,7 @@ def detach_volume(nova, neutron, server, volume, timeout=120):
start_time = time.time()
while time.time() < start_time + timeout:
- vm = get_server_object_by_id(nova, neutron, server.id)
+ vm = get_server_object_by_id(nova, neutron, server.id, project_id)
if len(vm.volume_ids) == 0:
return vm
else:
diff --git a/snaps/openstack/utils/settings_utils.py b/snaps/openstack/utils/settings_utils.py
index 2cf6047..c14437d 100644
--- a/snaps/openstack/utils/settings_utils.py
+++ b/snaps/openstack/utils/settings_utils.py
@@ -224,7 +224,7 @@ def create_keypair_config(heat_cli, stack, keypair, pk_output_key):
return KeypairConfig(name=keypair.name)
-def create_vm_inst_config(nova, neutron, server):
+def create_vm_inst_config(nova, neutron, server, project_id):
"""
Returns a VmInstanceConfig object
note: if the server instance is not active, the PortSettings objects will
@@ -232,6 +232,7 @@ def create_vm_inst_config(nova, neutron, server):
:param nova: the nova client
:param neutron: the neutron client
:param server: a SNAPS-OO VmInst domain object
+ :param project_id: the associated project ID
:return:
"""
@@ -244,7 +245,7 @@ def create_vm_inst_config(nova, neutron, server):
kwargs['port_settings'] = __create_port_configs(neutron, server.ports)
kwargs['security_group_names'] = server.sec_grp_names
kwargs['floating_ip_settings'] = __create_floatingip_config(
- neutron, kwargs['port_settings'])
+ neutron, kwargs['port_settings'], project_id)
return VmInstanceConfig(**kwargs)
@@ -281,7 +282,7 @@ def __create_port_configs(neutron, ports):
return out
-def __create_floatingip_config(neutron, port_settings):
+def __create_floatingip_config(neutron, port_settings, project_id):
"""
Returns a list of FloatingIpConfig objects as they pertain to an
existing deployed server instance
@@ -296,7 +297,8 @@ def __create_floatingip_config(neutron, port_settings):
fip_ports = list()
for port_setting in port_settings:
- setting_port = neutron_utils.get_port(neutron, port_setting)
+ setting_port = neutron_utils.get_port(
+ neutron, port_setting, project_id=project_id)
if setting_port:
network = neutron_utils.get_network(
neutron, network_name=port_setting.network_name)
@@ -307,7 +309,7 @@ def __create_floatingip_config(neutron, port_settings):
fip_ports.append((port_setting.name, setting_port))
break
- floating_ips = neutron_utils.get_floating_ips(neutron, fip_ports)
+ floating_ips = neutron_utils.get_port_floating_ips(neutron, fip_ports)
for port_id, floating_ip in floating_ips:
router = neutron_utils.get_router_by_id(neutron, floating_ip.router_id)
diff --git a/snaps/openstack/utils/tests/heat_utils_tests.py b/snaps/openstack/utils/tests/heat_utils_tests.py
index 67fbdec..ee95a63 100644
--- a/snaps/openstack/utils/tests/heat_utils_tests.py
+++ b/snaps/openstack/utils/tests/heat_utils_tests.py
@@ -187,7 +187,7 @@ class HeatUtilsCreateSimpleStackTests(OSComponentTestCase):
nova = nova_utils.nova_client(self.os_creds)
servers = heat_utils.get_stack_servers(
- self.heat_client, nova, neutron, self.stack1)
+ self.heat_client, nova, neutron, self.stack1, self.project_id)
self.assertIsNotNone(servers)
self.assertEqual(1, len(servers))
self.assertEqual(self.vm_inst_name, servers[0].name)
@@ -311,10 +311,11 @@ class HeatUtilsCreateComplexStackTests(OSComponentTestCase):
neutron = neutron_utils.neutron_client(self.os_creds)
glance = glance_utils.glance_client(self.os_creds)
servers = heat_utils.get_stack_servers(
- self.heat_client, nova, neutron, self.stack)
+ self.heat_client, nova, neutron, self.stack,
+ self.project_id)
for server in servers:
vm_settings = settings_utils.create_vm_inst_config(
- nova, neutron, server)
+ nova, neutron, server, self.project_id)
img_settings = settings_utils.determine_image_config(
glance, server,
[self.image_creator1.image_settings,
@@ -383,7 +384,7 @@ class HeatUtilsCreateComplexStackTests(OSComponentTestCase):
glance = glance_utils.glance_client(self.os_creds)
servers = heat_utils.get_stack_servers(
- self.heat_client, nova, neutron, self.stack)
+ self.heat_client, nova, neutron, self.stack, self.project_id)
self.assertIsNotNone(servers)
self.assertEqual(2, len(servers))
diff --git a/snaps/openstack/utils/tests/neutron_utils_tests.py b/snaps/openstack/utils/tests/neutron_utils_tests.py
index 4dfff87..22c6a33 100644
--- a/snaps/openstack/utils/tests/neutron_utils_tests.py
+++ b/snaps/openstack/utils/tests/neutron_utils_tests.py
@@ -109,7 +109,8 @@ class NeutronUtilsNetworkTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
self.assertEqual(len(self.net_config.network_settings.subnet_settings),
len(self.network.subnets))
@@ -167,7 +168,8 @@ class NeutronUtilsSubnetTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
subnet_setting = self.net_config.network_settings.subnet_settings[0]
self.assertTrue(validate_subnet(
@@ -193,7 +195,8 @@ class NeutronUtilsSubnetTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
with self.assertRaises(Exception):
SubnetConfig(cidr=self.net_config.subnet_cidr)
@@ -208,7 +211,8 @@ class NeutronUtilsSubnetTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
subnet_setting = self.net_config.network_settings.subnet_settings[0]
self.assertTrue(validate_subnet(
@@ -525,7 +529,8 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
Tests the neutron_utils.create_router()
"""
self.router = neutron_utils.create_router(
- self.neutron, self.os_creds, self.net_config.router_settings)
+ self.neutron, self.os_creds, self.net_config.router_settings,
+ self.project_id)
validate_router(self.neutron, self.net_config.router_settings.name,
True)
@@ -541,7 +546,8 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
self.net_config.router_settings.name,
self.ext_net_name)
self.router = neutron_utils.create_router(
- self.neutron, self.os_creds, self.net_config.router_settings)
+ self.neutron, self.os_creds, self.net_config.router_settings,
+ self.project_id)
validate_router(self.neutron, self.net_config.router_settings.name,
True)
@@ -558,14 +564,16 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
subnet_setting = self.net_config.network_settings.subnet_settings[0]
self.assertTrue(validate_subnet(
self.neutron, subnet_setting.name, subnet_setting.cidr, True))
self.router = neutron_utils.create_router(
- self.neutron, self.os_creds, self.net_config.router_settings)
+ self.neutron, self.os_creds, self.net_config.router_settings,
+ self.project_id)
validate_router(self.neutron, self.net_config.router_settings.name,
True)
@@ -584,7 +592,8 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
subnet_setting = self.net_config.network_settings.subnet_settings[0]
self.assertTrue(validate_subnet(
@@ -604,10 +613,12 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
self.router = neutron_utils.create_router(
- self.neutron, self.os_creds, self.net_config.router_settings)
+ self.neutron, self.os_creds, self.net_config.router_settings,
+ self.project_id)
validate_router(self.neutron, self.net_config.router_settings.name,
True)
@@ -625,10 +636,12 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
self.router = neutron_utils.create_router(
- self.neutron, self.os_creds, self.net_config.router_settings)
+ self.neutron, self.os_creds, self.net_config.router_settings,
+ self.project_id)
validate_router(self.neutron, self.net_config.router_settings.name,
True)
@@ -648,7 +661,8 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
subnet_setting = self.net_config.network_settings.subnet_settings[0]
self.assertTrue(validate_subnet(
@@ -672,7 +686,8 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
subnet_setting = self.net_config.network_settings.subnet_settings[0]
self.assertTrue(validate_subnet(self.neutron, subnet_setting.name,
@@ -696,7 +711,8 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
subnet_setting = self.net_config.network_settings.subnet_settings[0]
self.assertTrue(validate_subnet(
@@ -740,7 +756,8 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
subnet_setting = self.net_config.network_settings.subnet_settings[0]
self.assertTrue(validate_subnet(
@@ -766,7 +783,8 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
subnet_setting = self.net_config.network_settings.subnet_settings[0]
self.assertTrue(validate_subnet(
@@ -792,7 +810,8 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
self.assertEqual(self.net_config.network_settings.name,
self.network.name)
self.assertTrue(validate_network(
- self.neutron, self.net_config.network_settings.name, True))
+ self.neutron, self.net_config.network_settings.name, True,
+ self.project_id))
subnet_setting = self.net_config.network_settings.subnet_settings[0]
self.assertTrue(validate_subnet(
@@ -1007,7 +1026,7 @@ Validation routines
"""
-def validate_network(neutron, name, exists):
+def validate_network(neutron, name, exists, project_id):
"""
Returns true if a network for a given name DOES NOT exist if the exists
parameter is false conversely true. Returns false if a network for a given
@@ -1015,9 +1034,11 @@ def validate_network(neutron, name, exists):
:param neutron: The neutron client
:param name: The expected network name
:param exists: Whether or not the network name should exist or not
+ :param project_id: the associated project ID
:return: True/False
"""
- network = neutron_utils.get_network(neutron, network_name=name)
+ network = neutron_utils.get_network(neutron, network_name=name,
+ project_id=project_id)
if exists and network:
return True
if not exists and not network:
diff --git a/snaps/openstack/utils/tests/nova_utils_tests.py b/snaps/openstack/utils/tests/nova_utils_tests.py
index 9383088..560a9f3 100644
--- a/snaps/openstack/utils/tests/nova_utils_tests.py
+++ b/snaps/openstack/utils/tests/nova_utils_tests.py
@@ -323,7 +323,7 @@ class NovaUtilsInstanceTests(OSComponentTestCase):
self.vm_inst = nova_utils.create_server(
self.nova, self.neutron, self.glance, self.instance_settings,
- self.image_creator.image_settings)
+ self.image_creator.image_settings, self.project_id)
self.assertIsNotNone(self.vm_inst)
@@ -341,7 +341,7 @@ class NovaUtilsInstanceTests(OSComponentTestCase):
self.assertTrue(active)
vm_inst = nova_utils.get_latest_server_object(
- self.nova, self.neutron, self.vm_inst)
+ self.nova, self.neutron, self.vm_inst, self.project_id)
self.assertEqual(self.vm_inst.name, vm_inst.name)
self.assertEqual(self.vm_inst.id, vm_inst.id)
@@ -453,7 +453,7 @@ class NovaUtilsInstanceVolumeTests(OSComponentTestCase):
neutron = neutron_utils.neutron_client(self.os_creds)
self.assertIsNotNone(nova_utils.attach_volume(
self.nova, neutron, self.instance_creator.get_vm_inst(),
- self.volume_creator.get_volume()))
+ self.volume_creator.get_volume(), self.project_id))
vol_attach = None
attached = False
@@ -472,7 +472,8 @@ class NovaUtilsInstanceVolumeTests(OSComponentTestCase):
self.assertIsNotNone(vol_attach)
vm_attach = nova_utils.get_server_object_by_id(
- self.nova, neutron, self.instance_creator.get_vm_inst().id)
+ self.nova, neutron, self.instance_creator.get_vm_inst().id,
+ self.project_id)
# Validate Attachment
self.assertIsNotNone(vol_attach)
@@ -484,12 +485,13 @@ class NovaUtilsInstanceVolumeTests(OSComponentTestCase):
# Detach volume to VM
self.assertIsNotNone(nova_utils.detach_volume(
self.nova, neutron, self.instance_creator.get_vm_inst(),
- self.volume_creator.get_volume()))
+ self.volume_creator.get_volume(), self.project_id))
vol_detach = cinder_utils.get_volume_by_id(
self.cinder, self.volume_creator.get_volume().id)
vm_detach = nova_utils.get_server_object_by_id(
- self.nova, neutron, self.instance_creator.get_vm_inst().id)
+ self.nova, neutron, self.instance_creator.get_vm_inst().id,
+ self.project_id)
# Validate Detachment
self.assertIsNotNone(vol_detach)
@@ -517,7 +519,7 @@ class NovaUtilsInstanceVolumeTests(OSComponentTestCase):
with self.assertRaises(NovaException):
nova_utils.attach_volume(
self.nova, neutron, self.instance_creator.get_vm_inst(),
- self.volume_creator.get_volume(), 0)
+ self.volume_creator.get_volume(), self.project_id, 0)
def test_detach_volume_nowait(self):
"""
@@ -533,11 +535,12 @@ class NovaUtilsInstanceVolumeTests(OSComponentTestCase):
neutron = neutron_utils.neutron_client(self.os_creds)
nova_utils.attach_volume(
self.nova, neutron, self.instance_creator.get_vm_inst(),
- self.volume_creator.get_volume())
+ self.volume_creator.get_volume(), self.project_id)
# Check VmInst for attachment
latest_vm = nova_utils.get_server_object_by_id(
- self.nova, neutron, self.instance_creator.get_vm_inst().id)
+ self.nova, neutron, self.instance_creator.get_vm_inst().id,
+ self.project_id)
self.assertEqual(1, len(latest_vm.volume_ids))
# Check Volume for attachment
@@ -561,4 +564,4 @@ class NovaUtilsInstanceVolumeTests(OSComponentTestCase):
with self.assertRaises(NovaException):
nova_utils.detach_volume(
self.nova, neutron, self.instance_creator.get_vm_inst(),
- self.volume_creator.get_volume(), 0)
+ self.volume_creator.get_volume(), self.project_id, 0)
diff --git a/snaps/openstack/utils/tests/settings_utils_tests.py b/snaps/openstack/utils/tests/settings_utils_tests.py
index cbd78d8..5dabe38 100644
--- a/snaps/openstack/utils/tests/settings_utils_tests.py
+++ b/snaps/openstack/utils/tests/settings_utils_tests.py
@@ -327,7 +327,7 @@ class SettingsUtilsVmInstTests(OSComponentTestCase):
self.nova, self.neutron,
vm_inst_settings=self.inst_creator.instance_settings)
derived_vm_settings = settings_utils.create_vm_inst_config(
- self.nova, self.neutron, server)
+ self.nova, self.neutron, server, self.project_id)
self.assertIsNotNone(derived_vm_settings)
self.assertIsNotNone(derived_vm_settings.port_settings)
self.assertIsNotNone(derived_vm_settings.floating_ip_settings)