summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspisarski <s.pisarski@cablelabs.com>2018-03-09 14:42:34 -0700
committerspisarski <s.pisarski@cablelabs.com>2018-03-12 08:28:45 -0600
commit9e9e09590cce321f55996c1a31370ffdf28251b0 (patch)
treea0e031d0365604f4a299ad8f748fe10d09a75a8a
parentfb0ab37c323717ca10ac3f3bda24ae390635495e (diff)
Closing keystone sessions after done with them.
By not closing all of the keystone sessions being created when running all of the tests, this may be the root cause to the IOError occasionally being observed: IOError: [Errno 24] Too many open files JIRA: SNAPS-285 Change-Id: I7fc7ab0c6cdd02f1ae32bb3ae4f121cb465d5693 Signed-off-by: spisarski <s.pisarski@cablelabs.com>
-rw-r--r--snaps/config/network.py37
-rw-r--r--snaps/config/router.py53
-rw-r--r--snaps/domain/network.py1
-rw-r--r--snaps/openstack/cluster_template.py2
-rw-r--r--snaps/openstack/create_flavor.py2
-rw-r--r--snaps/openstack/create_image.py10
-rw-r--r--snaps/openstack/create_instance.py46
-rw-r--r--snaps/openstack/create_keypairs.py2
-rw-r--r--snaps/openstack/create_network.py18
-rw-r--r--snaps/openstack/create_project.py60
-rw-r--r--snaps/openstack/create_qos.py2
-rw-r--r--snaps/openstack/create_router.py12
-rw-r--r--snaps/openstack/create_security_group.py16
-rw-r--r--snaps/openstack/create_stack.py72
-rw-r--r--snaps/openstack/create_user.py2
-rw-r--r--snaps/openstack/create_volume.py10
-rw-r--r--snaps/openstack/create_volume_type.py2
-rw-r--r--snaps/openstack/openstack_creator.py42
-rw-r--r--snaps/openstack/tests/cluster_template_tests.py3
-rw-r--r--snaps/openstack/tests/create_flavor_tests.py4
-rw-r--r--snaps/openstack/tests/create_image_tests.py10
-rw-r--r--snaps/openstack/tests/create_instance_tests.py29
-rw-r--r--snaps/openstack/tests/create_keypairs_tests.py4
-rw-r--r--snaps/openstack/tests/create_network_tests.py20
-rw-r--r--snaps/openstack/tests/create_project_tests.py14
-rw-r--r--snaps/openstack/tests/create_qos_tests.py3
-rw-r--r--snaps/openstack/tests/create_router_tests.py9
-rw-r--r--snaps/openstack/tests/create_security_group_tests.py6
-rw-r--r--snaps/openstack/tests/create_stack_tests.py38
-rw-r--r--snaps/openstack/tests/create_user_tests.py4
-rw-r--r--snaps/openstack/tests/create_volume_tests.py24
-rw-r--r--snaps/openstack/tests/create_volume_type_tests.py6
-rw-r--r--snaps/openstack/tests/os_source_file_test.py22
-rw-r--r--snaps/openstack/utils/cinder_utils.py9
-rw-r--r--snaps/openstack/utils/glance_utils.py9
-rw-r--r--snaps/openstack/utils/heat_utils.py6
-rw-r--r--snaps/openstack/utils/keystone_utils.py19
-rw-r--r--snaps/openstack/utils/launch_utils.py30
-rw-r--r--snaps/openstack/utils/magnum_utils.py9
-rw-r--r--snaps/openstack/utils/neutron_utils.py7
-rw-r--r--snaps/openstack/utils/nova_utils.py8
-rw-r--r--snaps/openstack/utils/tests/cinder_utils_tests.py28
-rw-r--r--snaps/openstack/utils/tests/glance_utils_tests.py7
-rw-r--r--snaps/openstack/utils/tests/heat_utils_tests.py84
-rw-r--r--snaps/openstack/utils/tests/keystone_utils_tests.py11
-rw-r--r--snaps/openstack/utils/tests/magnum_utils_tests.py8
-rw-r--r--snaps/openstack/utils/tests/neutron_utils_tests.py52
-rw-r--r--snaps/openstack/utils/tests/nova_utils_tests.py55
-rw-r--r--snaps/openstack/utils/tests/settings_utils_tests.py19
-rw-r--r--snaps/provisioning/tests/ansible_utils_tests.py2
50 files changed, 617 insertions, 331 deletions
diff --git a/snaps/config/network.py b/snaps/config/network.py
index 5f18c6b..8148c61 100644
--- a/snaps/config/network.py
+++ b/snaps/config/network.py
@@ -98,11 +98,15 @@ class NetworkConfig(object):
return self.project_id
else:
if self.project_name:
- keystone = keystone_utils.keystone_client(os_creds)
- project = keystone_utils.get_project(
- keystone=keystone, project_name=self.project_name)
- if project:
- return project.id
+ session = keystone_utils.keystone_session(os_creds)
+ keystone = keystone_utils.keystone_client(os_creds, session)
+ try:
+ project = keystone_utils.get_project(
+ keystone=keystone, project_name=self.project_name)
+ if project:
+ return project.id
+ finally:
+ keystone_utils.close_session(session)
return None
@@ -255,9 +259,13 @@ class SubnetConfig(object):
if self.name:
out['name'] = self.name
if self.project_name:
- keystone = keystone_utils.keystone_client(os_creds)
- project = keystone_utils.get_project(
- keystone=keystone, project_name=self.project_name)
+ session = keystone_utils.keystone_session(os_creds)
+ keystone = keystone_utils.keystone_client(os_creds, session)
+ try:
+ project = keystone_utils.get_project(
+ keystone=keystone, project_name=self.project_name)
+ finally:
+ keystone_utils.close_session(session)
project_id = None
if project:
project_id = project.id
@@ -441,10 +449,15 @@ class PortConfig(object):
out = dict()
- keystone = keystone_utils.keystone_client(os_creds)
- network = neutron_utils.get_network(
- neutron, keystone, network_name=self.network_name,
- project_name=self.project_name)
+ session = keystone_utils.keystone_session(os_creds)
+ keystone = keystone_utils.keystone_client(os_creds, session)
+ try:
+ network = neutron_utils.get_network(
+ neutron, keystone, network_name=self.network_name,
+ project_name=self.project_name)
+ finally:
+ keystone_utils.close_session(session)
+
if not network:
raise PortConfigError(
'Cannot locate network with name - ' + self.network_name
diff --git a/snaps/config/router.py b/snaps/config/router.py
index f5bbbf0..6b03ad2 100644
--- a/snaps/config/router.py
+++ b/snaps/config/router.py
@@ -78,31 +78,34 @@ class RouterConfig(object):
out = dict()
ext_gw = dict()
- keystone = keystone_utils.keystone_client(os_creds)
-
- if self.name:
- out['name'] = self.name
- if self.project_name:
- project = keystone_utils.get_project(
- keystone=keystone, project_name=self.project_name)
- if project:
- out['tenant_id'] = project.id
- else:
- raise RouterConfigError(
- 'Could not find project ID for project named - ' +
- self.project_name)
- if self.admin_state_up is not None:
- out['admin_state_up'] = self.admin_state_up
- if self.external_gateway:
- ext_net = neutron_utils.get_network(
- neutron, keystone, network_name=self.external_gateway)
- if ext_net:
- ext_gw['network_id'] = ext_net.id
- out['external_gateway_info'] = ext_gw
- else:
- raise RouterConfigError(
- 'Could not find the external network named - ' +
- self.external_gateway)
+ session = keystone_utils.keystone_session(os_creds)
+ keystone = keystone_utils.keystone_client(os_creds, session)
+ try:
+ if self.name:
+ out['name'] = self.name
+ if self.project_name:
+ project = keystone_utils.get_project(
+ keystone=keystone, project_name=self.project_name)
+ if project:
+ out['tenant_id'] = project.id
+ else:
+ raise RouterConfigError(
+ 'Could not find project ID for project named - ' +
+ self.project_name)
+ if self.admin_state_up is not None:
+ out['admin_state_up'] = self.admin_state_up
+ if self.external_gateway:
+ ext_net = neutron_utils.get_network(
+ neutron, keystone, network_name=self.external_gateway)
+ if ext_net:
+ ext_gw['network_id'] = ext_net.id
+ out['external_gateway_info'] = ext_gw
+ else:
+ raise RouterConfigError(
+ 'Could not find the external network named - ' +
+ self.external_gateway)
+ finally:
+ keystone_utils.close_session(session)
return {'router': out}
diff --git a/snaps/domain/network.py b/snaps/domain/network.py
index aabec21..a028e2b 100644
--- a/snaps/domain/network.py
+++ b/snaps/domain/network.py
@@ -46,7 +46,6 @@ class Network:
self.admin_state_up == other.admin_state_up and
self.shared == other.shared and
self.external == other.external and
- self.type == other.type and
self.subnets == other.subnets)
diff --git a/snaps/openstack/cluster_template.py b/snaps/openstack/cluster_template.py
index c4ba76d..f6c7aa2 100644
--- a/snaps/openstack/cluster_template.py
+++ b/snaps/openstack/cluster_template.py
@@ -85,6 +85,8 @@ class OpenStackClusterTemplate(OpenStackMagnumObject):
self.__cluster_template = None
+ super(self.__class__, self).clean()
+
def get_cluster_template(self):
"""
Returns the domain Volume object as it was populated when create() was
diff --git a/snaps/openstack/create_flavor.py b/snaps/openstack/create_flavor.py
index 65b9059..48b3e7c 100644
--- a/snaps/openstack/create_flavor.py
+++ b/snaps/openstack/create_flavor.py
@@ -87,6 +87,8 @@ class OpenStackFlavor(OpenStackComputeObject):
self.__flavor = None
+ super(self.__class__, self).clean()
+
def get_flavor(self):
"""
Returns the OpenStack flavor object
diff --git a/snaps/openstack/create_image.py b/snaps/openstack/create_image.py
index a5520e3..1a8aa12 100644
--- a/snaps/openstack/create_image.py
+++ b/snaps/openstack/create_image.py
@@ -54,7 +54,10 @@ class OpenStackImage(OpenStackCloudObject):
Loads the existing Image
:return: The Image domain object or None
"""
- self.__glance = glance_utils.glance_client(self._os_creds)
+ super(self.__class__, self).initialize()
+
+ self.__glance = glance_utils.glance_client(
+ self._os_creds, self._os_session)
self.__image = glance_utils.get_image(
self.__glance, image_settings=self.image_settings)
@@ -145,6 +148,11 @@ class OpenStackImage(OpenStackCloudObject):
self.__kernel_image = None
self.__ramdisk_image = None
+ if self.__glance:
+ self.__glance.http_client.session.session.close()
+
+ super(self.__class__, self).clean()
+
def get_image(self):
"""
Returns the domain Image object as it was populated when create() was
diff --git a/snaps/openstack/create_instance.py b/snaps/openstack/create_instance.py
index a964723..45666d5 100644
--- a/snaps/openstack/create_instance.py
+++ b/snaps/openstack/create_instance.py
@@ -73,8 +73,14 @@ class OpenStackVmInstance(OpenStackComputeObject):
"""
super(self.__class__, self).initialize()
- self.__neutron = neutron_utils.neutron_client(self._os_creds)
- self.__keystone = keystone_utils.keystone_client(self._os_creds)
+ self.__neutron = neutron_utils.neutron_client(
+ self._os_creds, self._os_session)
+ self.__keystone = keystone_utils.keystone_client(
+ self._os_creds, self._os_session)
+ self.__cinder = cinder_utils.cinder_client(
+ self._os_creds, self._os_session)
+ self.__glance = glance_utils.glance_client(
+ self._os_creds, self._os_session)
self.__ports = self.__query_ports(self.instance_settings.port_settings)
self.__lookup_existing_vm_by_name()
@@ -134,9 +140,8 @@ class OpenStackVmInstance(OpenStackComputeObject):
active, error, or timeout waiting. Floating IPs will be
assigned after active when block=True
"""
- glance = glance_utils.glance_client(self._os_creds)
self.__vm = nova_utils.create_server(
- self._nova, self.__keystone, self.__neutron, glance,
+ self._nova, self.__keystone, self.__neutron, self.__glance,
self.instance_settings, self.image_settings,
self._os_creds.project_name, self.keypair_settings)
logger.info('Created instance with name - %s',
@@ -162,9 +167,8 @@ class OpenStackVmInstance(OpenStackComputeObject):
if self.instance_settings.volume_names:
for volume_name in self.instance_settings.volume_names:
- cinder = cinder_utils.cinder_client(self._os_creds)
volume = cinder_utils.get_volume(
- cinder, self.__keystone, volume_name=volume_name,
+ self.__cinder, self.__keystone, volume_name=volume_name,
project_name=self._os_creds.project_name)
if volume and self.vm_active(block=True):
@@ -271,9 +275,8 @@ class OpenStackVmInstance(OpenStackComputeObject):
if self.__vm:
# Detach Volume
for volume_rec in self.__vm.volume_ids:
- cinder = cinder_utils.cinder_client(self._os_creds)
volume = cinder_utils.get_volume_by_id(
- cinder, volume_rec['id'])
+ self.__cinder, volume_rec['id'])
if volume:
vm = nova_utils.detach_volume(
self._nova, self.__neutron, self.__keystone, self.__vm,
@@ -310,6 +313,8 @@ class OpenStackVmInstance(OpenStackComputeObject):
'VM not deleted within the timeout period of %s '
'seconds', self.instance_settings.vm_delete_timeout)
+ super(self.__class__, self).clean()
+
def __query_ports(self, port_settings):
"""
Returns the previously configured ports or an empty list if none
@@ -795,16 +800,21 @@ def generate_creator(os_creds, vm_inst, image_config, project_name,
:param keypair_config: the associated KeypairConfig object (optional)
:return: an initialized OpenStackVmInstance object
"""
- nova = nova_utils.nova_client(os_creds)
- keystone = keystone_utils.keystone_client(os_creds)
- neutron = neutron_utils.neutron_client(os_creds)
- derived_inst_config = settings_utils.create_vm_inst_config(
- nova, keystone, neutron, vm_inst, project_name)
-
- derived_inst_creator = OpenStackVmInstance(
- os_creds, derived_inst_config, image_config, keypair_config)
- derived_inst_creator.initialize()
- return derived_inst_creator
+ session = keystone_utils.keystone_session(os_creds)
+ nova = nova_utils.nova_client(os_creds, session)
+ keystone = keystone_utils.keystone_client(os_creds, session)
+ neutron = neutron_utils.neutron_client(os_creds, session)
+
+ try:
+ derived_inst_config = settings_utils.create_vm_inst_config(
+ nova, keystone, neutron, vm_inst, project_name)
+
+ derived_inst_creator = OpenStackVmInstance(
+ os_creds, derived_inst_config, image_config, keypair_config)
+ derived_inst_creator.initialize()
+ return derived_inst_creator
+ finally:
+ keystone_utils.close_session(session)
class VmInstanceSettings(VmInstanceConfig):
diff --git a/snaps/openstack/create_keypairs.py b/snaps/openstack/create_keypairs.py
index a181a7b..b037c3f 100644
--- a/snaps/openstack/create_keypairs.py
+++ b/snaps/openstack/create_keypairs.py
@@ -133,6 +133,8 @@ class OpenStackKeypair(OpenStackComputeObject):
os.remove(expanded_path)
logger.info('Deleted private key file [%s]', expanded_path)
+ super(self.__class__, self).clean()
+
def get_keypair(self):
"""
Returns the OpenStack keypair object
diff --git a/snaps/openstack/create_network.py b/snaps/openstack/create_network.py
index 3d50eb5..13c9667 100644
--- a/snaps/openstack/create_network.py
+++ b/snaps/openstack/create_network.py
@@ -19,7 +19,7 @@ from neutronclient.common.exceptions import NetworkNotFoundClient, Unauthorized
from snaps.config.network import NetworkConfig, SubnetConfig, PortConfig
from snaps.openstack.openstack_creator import OpenStackNetworkObject
-from snaps.openstack.utils import neutron_utils, keystone_utils
+from snaps.openstack.utils import neutron_utils
__author__ = 'spisarski'
@@ -52,9 +52,8 @@ class OpenStackNetwork(OpenStackNetworkObject):
super(self.__class__, self).initialize()
try:
- keystone = keystone_utils.keystone_client(self._os_creds)
self.__network = neutron_utils.get_network(
- self._neutron, keystone,
+ self._neutron, self._keystone,
network_settings=self.network_settings,
project_name=self._os_creds.project_name)
except Unauthorized as e:
@@ -83,12 +82,13 @@ class OpenStackNetwork(OpenStackNetworkObject):
"""
Removes and deletes all items created in reverse order.
"""
- if self.__network:
- try:
- neutron_utils.delete_network(self._neutron, self.__network)
- except NetworkNotFoundClient:
- pass
- self.__network = None
+ try:
+ neutron_utils.delete_network(self._neutron, self.__network)
+ except NetworkNotFoundClient:
+ pass
+ self.__network = None
+
+ super(self.__class__, self).clean()
def get_network(self):
"""
diff --git a/snaps/openstack/create_project.py b/snaps/openstack/create_project.py
index e871118..c20fe5e 100644
--- a/snaps/openstack/create_project.py
+++ b/snaps/openstack/create_project.py
@@ -83,16 +83,20 @@ class OpenStackProject(OpenStackIdentityObject):
"""
if self.__project:
# Delete security group 'default' if exists
- neutron = neutron_utils.neutron_client(self._os_creds)
- default_sec_grp = neutron_utils.get_security_group(
- neutron, self._keystone, sec_grp_name='default',
- project_name=self.__project.name)
- if default_sec_grp:
- try:
- neutron_utils.delete_security_group(
- neutron, default_sec_grp)
- except:
- pass
+ neutron = neutron_utils.neutron_client(
+ self._os_creds, self._os_session)
+ try:
+ default_sec_grp = neutron_utils.get_security_group(
+ neutron, self._keystone, sec_grp_name='default',
+ project_name=self.__project.name)
+ if default_sec_grp:
+ try:
+ neutron_utils.delete_security_group(
+ neutron, default_sec_grp)
+ except:
+ pass
+ finally:
+ neutron.httpclient.session.session.close()
# Delete Project
try:
@@ -114,6 +118,8 @@ class OpenStackProject(OpenStackIdentityObject):
if role:
keystone_utils.delete_role(self._keystone, role)
+ super(self.__class__, self).clean()
+
def get_project(self):
"""
Returns the OpenStack project object populated on create()
@@ -142,32 +148,48 @@ class OpenStackProject(OpenStackIdentityObject):
Returns the compute quotas as an instance of the ComputeQuotas class
:return:
"""
- nova = nova_utils.nova_client(self._os_creds)
- return nova_utils.get_compute_quotas(nova, self.__project.id)
+ nova = nova_utils.nova_client(self._os_creds, self._os_session)
+
+ try:
+ return nova_utils.get_compute_quotas(nova, self.__project.id)
+ finally:
+ nova.client.session.session.close()
def get_network_quotas(self):
"""
Returns the network quotas as an instance of the NetworkQuotas class
:return:
"""
- neutron = neutron_utils.neutron_client(self._os_creds)
- return neutron_utils.get_network_quotas(neutron, self.__project.id)
+ neutron = neutron_utils.neutron_client(
+ self._os_creds, self._os_session)
+ try:
+ return neutron_utils.get_network_quotas(neutron, self.__project.id)
+ finally:
+ neutron.httpclient.session.session.close()
def update_compute_quotas(self, compute_quotas):
"""
Updates the compute quotas for this project
:param compute_quotas: a ComputeQuotas object.
"""
- nova = nova_utils.nova_client(self._os_creds)
- nova_utils.update_quotas(nova, self.__project.id, compute_quotas)
+ nova = nova_utils.nova_client(self._os_creds, self._os_session)
+ try:
+ nova_utils.update_quotas(nova, self.__project.id, compute_quotas)
+ finally:
+ nova.client.session.session.close()
def update_network_quotas(self, network_quotas):
"""
Updates the network quotas for this project
:param network_quotas: a NetworkQuotas object.
"""
- neutron = neutron_utils.neutron_client(self._os_creds)
- neutron_utils.update_quotas(neutron, self.__project.id, network_quotas)
+ neutron = neutron_utils.neutron_client(
+ self._os_creds, self._os_session)
+ try:
+ neutron_utils.update_quotas(
+ neutron, self.__project.id, network_quotas)
+ finally:
+ neutron.httpclient.session.session.close()
class ProjectSettings(ProjectConfig):
@@ -181,4 +203,4 @@ class ProjectSettings(ProjectConfig):
from warnings import warn
warn('Use snaps.config.project.ProjectConfig instead',
DeprecationWarning)
- super(self.__class__, self).__init__(**kwargs) \ No newline at end of file
+ super(self.__class__, self).__init__(**kwargs)
diff --git a/snaps/openstack/create_qos.py b/snaps/openstack/create_qos.py
index 44e35a3..7764a57 100644
--- a/snaps/openstack/create_qos.py
+++ b/snaps/openstack/create_qos.py
@@ -90,6 +90,8 @@ class OpenStackQoS(OpenStackVolumeObject):
self.__qos = None
+ super(self.__class__, self).clean()
+
def get_qos(self):
"""
Returns the domain QoS object as it was populated when create() was
diff --git a/snaps/openstack/create_router.py b/snaps/openstack/create_router.py
index 50c0b28..4395059 100644
--- a/snaps/openstack/create_router.py
+++ b/snaps/openstack/create_router.py
@@ -43,8 +43,6 @@ class OpenStackRouter(OpenStackNetworkObject):
if not router_settings:
raise RouterCreationError('router_settings is required')
- self.__keystone = None
-
self.router_settings = router_settings
# Attributes instantiated on create()
@@ -63,11 +61,9 @@ class OpenStackRouter(OpenStackNetworkObject):
"""
super(self.__class__, self).initialize()
- self.__keystone = keystone_utils.keystone_client(self._os_creds)
-
try:
self.__router = neutron_utils.get_router(
- self._neutron, self.__keystone,
+ self._neutron, self._keystone,
router_settings=self.router_settings,
project_name=self._os_creds.project_name)
except Unauthorized as e:
@@ -86,7 +82,7 @@ class OpenStackRouter(OpenStackNetworkObject):
for port_setting in self.router_settings.port_settings:
port = neutron_utils.get_port(
- self._neutron, self.__keystone, port_settings=port_setting,
+ self._neutron, self._keystone, port_settings=port_setting,
project_name=self._os_creds.project_name)
if port:
self.__ports.append(port)
@@ -121,7 +117,7 @@ class OpenStackRouter(OpenStackNetworkObject):
for port_setting in self.router_settings.port_settings:
port = neutron_utils.get_port(
- self._neutron, self.__keystone, port_settings=port_setting,
+ self._neutron, self._keystone, port_settings=port_setting,
project_name=self._os_creds.project_name)
logger.info(
'Retrieved port %s for router - %s', port_setting.name,
@@ -184,6 +180,8 @@ class OpenStackRouter(OpenStackNetworkObject):
pass
self.__router = None
+ super(self.__class__, self).clean()
+
def get_router(self):
"""
Returns the OpenStack router object
diff --git a/snaps/openstack/create_security_group.py b/snaps/openstack/create_security_group.py
index eecf789..490f419 100644
--- a/snaps/openstack/create_security_group.py
+++ b/snaps/openstack/create_security_group.py
@@ -20,7 +20,6 @@ from neutronclient.common.exceptions import NotFound, Conflict
from snaps.config.security_group import (
SecurityGroupConfig, SecurityGroupRuleConfig)
from snaps.openstack.openstack_creator import OpenStackNetworkObject
-from snaps.openstack.utils import keystone_utils
from snaps.openstack.utils import neutron_utils
__author__ = 'spisarski'
@@ -56,9 +55,9 @@ class OpenStackSecurityGroup(OpenStackNetworkObject):
"""
super(self.__class__, self).initialize()
- keystone = keystone_utils.keystone_client(self._os_creds)
self.__security_group = neutron_utils.get_security_group(
- self._neutron, keystone, sec_grp_settings=self.sec_grp_settings,
+ self._neutron, self._keystone,
+ sec_grp_settings=self.sec_grp_settings,
project_name=self._os_creds.project_name)
if self.__security_group:
# Populate rules
@@ -86,9 +85,8 @@ class OpenStackSecurityGroup(OpenStackNetworkObject):
logger.info(
'Creating security group %s...' % self.sec_grp_settings.name)
- keystone = keystone_utils.keystone_client(self._os_creds)
self.__security_group = neutron_utils.create_security_group(
- self._neutron, keystone, self.sec_grp_settings)
+ self._neutron, self._keystone, self.sec_grp_settings)
# Get the rules added for free
auto_rules = neutron_utils.get_rules_by_security_group(
@@ -104,7 +102,7 @@ class OpenStackSecurityGroup(OpenStackNetworkObject):
for sec_grp_rule_setting in self.sec_grp_settings.rule_settings:
try:
custom_rule = neutron_utils.create_security_group_rule(
- self._neutron, keystone, sec_grp_rule_setting,
+ self._neutron, self._keystone, sec_grp_rule_setting,
self._os_creds.project_name)
self.__rules[sec_grp_rule_setting] = custom_rule
except Conflict as e:
@@ -161,6 +159,8 @@ class OpenStackSecurityGroup(OpenStackNetworkObject):
self.__security_group = None
+ super(self.__class__, self).clean()
+
def get_security_group(self):
"""
Returns the OpenStack security group object
@@ -181,9 +181,9 @@ class OpenStackSecurityGroup(OpenStackNetworkObject):
:param rule_setting: the rule configuration
"""
rule_setting.sec_grp_name = self.sec_grp_settings.name
- keystone = keystone_utils.keystone_client(self._os_creds)
new_rule = neutron_utils.create_security_group_rule(
- self._neutron, keystone, rule_setting, self._os_creds.project_name)
+ self._neutron, self._keystone, rule_setting,
+ self._os_creds.project_name)
self.__rules[rule_setting] = new_rule
self.sec_grp_settings.rule_settings.append(rule_setting)
diff --git a/snaps/openstack/create_stack.py b/snaps/openstack/create_stack.py
index aff10b7..12ce602 100644
--- a/snaps/openstack/create_stack.py
+++ b/snaps/openstack/create_stack.py
@@ -29,7 +29,7 @@ from snaps.openstack.create_volume import OpenStackVolume
from snaps.openstack.create_volume_type import OpenStackVolumeType
from snaps.openstack.openstack_creator import OpenStackCloudObject
from snaps.openstack.utils import (
- nova_utils, settings_utils, glance_utils, cinder_utils, keystone_utils)
+ nova_utils, settings_utils, glance_utils, cinder_utils)
from snaps.openstack.create_network import OpenStackNetwork
from snaps.openstack.utils import heat_utils, neutron_utils
@@ -73,12 +73,28 @@ class OpenStackHeatStack(OpenStackCloudObject, object):
self.__stack = None
self.__heat_cli = None
+ self.__neutron = None
+ self.__nova = None
+ self.__glance = None
+ self.__cinder = None
+
def initialize(self):
"""
Loads the existing heat stack
:return: The Stack domain object or None
"""
- self.__heat_cli = heat_utils.heat_client(self._os_creds)
+ super(self.__class__, self).initialize()
+
+ self.__neutron = neutron_utils.neutron_client(
+ self._os_creds, self._os_session)
+ self.__nova = nova_utils.nova_client(self._os_creds, self._os_session)
+ self.__glance = glance_utils.glance_client(
+ self._os_creds, self._os_session)
+ self.__cinder = cinder_utils.cinder_client(
+ self._os_creds, self._os_session)
+
+ self.__heat_cli = heat_utils.heat_client(
+ self._os_creds, self._os_session)
self.__stack = heat_utils.get_stack(
self.__heat_cli, stack_settings=self.stack_settings)
if self.__stack:
@@ -152,6 +168,13 @@ class OpenStackHeatStack(OpenStackCloudObject, object):
self.__stack = None
+ self.__neutron.httpclient.session.session.close()
+ self.__nova.client.session.session.close()
+ self.__glance.http_client.session.session.close()
+ self.__cinder.client.session.session.close()
+
+ super(self.__class__, self).clean()
+
def get_stack(self):
"""
Returns the domain Stack object as it was populated when create() was
@@ -219,15 +242,13 @@ class OpenStackHeatStack(OpenStackCloudObject, object):
:return: list() of OpenStackNetwork objects
"""
- neutron = neutron_utils.neutron_client(self._os_creds)
-
out = list()
stack_networks = heat_utils.get_stack_networks(
- self.__heat_cli, neutron, self.__stack)
+ self.__heat_cli, self.__neutron, self.__stack)
for stack_network in stack_networks:
net_settings = settings_utils.create_network_config(
- neutron, stack_network)
+ self.__neutron, stack_network)
net_creator = OpenStackNetwork(self._os_creds, net_settings)
out.append(net_creator)
net_creator.initialize()
@@ -241,15 +262,13 @@ class OpenStackHeatStack(OpenStackCloudObject, object):
:return: list() of OpenStackNetwork objects
"""
- neutron = neutron_utils.neutron_client(self._os_creds)
-
out = list()
stack_security_groups = heat_utils.get_stack_security_groups(
- self.__heat_cli, neutron, self.__stack)
+ self.__heat_cli, self.__neutron, self.__stack)
for stack_security_group in stack_security_groups:
settings = settings_utils.create_security_group_config(
- neutron, stack_security_group)
+ self.__neutron, stack_security_group)
creator = OpenStackSecurityGroup(self._os_creds, settings)
out.append(creator)
creator.initialize()
@@ -263,15 +282,13 @@ class OpenStackHeatStack(OpenStackCloudObject, object):
:return: list() of OpenStackRouter objects
"""
- neutron = neutron_utils.neutron_client(self._os_creds)
-
out = list()
stack_routers = heat_utils.get_stack_routers(
- self.__heat_cli, neutron, self.__stack)
+ self.__heat_cli, self.__neutron, self.__stack)
for routers in stack_routers:
settings = settings_utils.create_router_config(
- neutron, routers)
+ self.__neutron, routers)
creator = OpenStackRouter(self._os_creds, settings)
out.append(creator)
creator.initialize()
@@ -287,21 +304,16 @@ class OpenStackHeatStack(OpenStackCloudObject, object):
out = list()
- nova = nova_utils.nova_client(self._os_creds)
- keystone = keystone_utils.keystone_client(self._os_creds)
- neutron = neutron_utils.neutron_client(self._os_creds)
stack_servers = heat_utils.get_stack_servers(
- self.__heat_cli, nova, neutron, keystone, self.__stack,
- self._os_creds.project_name)
-
- glance = glance_utils.glance_client(self._os_creds)
+ self.__heat_cli, self.__nova, self.__neutron, self._keystone,
+ self.__stack, self._os_creds.project_name)
for stack_server in stack_servers:
vm_inst_settings = settings_utils.create_vm_inst_config(
- nova, keystone, neutron, stack_server,
+ self.__nova, self._keystone, self.__neutron, stack_server,
self._os_creds.project_name)
image_settings = settings_utils.determine_image_config(
- glance, stack_server, self.image_settings)
+ self.__glance, stack_server, self.image_settings)
keypair_settings = settings_utils.determine_keypair_config(
self.__heat_cli, self.__stack, stack_server,
keypair_settings=self.keypair_settings,
@@ -322,10 +334,8 @@ class OpenStackHeatStack(OpenStackCloudObject, object):
"""
out = list()
- cinder = cinder_utils.cinder_client(self._os_creds)
-
volumes = heat_utils.get_stack_volumes(
- self.__heat_cli, cinder, self.__stack)
+ self.__heat_cli, self.__cinder, self.__stack)
for volume in volumes:
settings = settings_utils.create_volume_config(volume)
@@ -348,10 +358,8 @@ class OpenStackHeatStack(OpenStackCloudObject, object):
"""
out = list()
- cinder = cinder_utils.cinder_client(self._os_creds)
-
vol_types = heat_utils.get_stack_volume_types(
- self.__heat_cli, cinder, self.__stack)
+ self.__heat_cli, self.__cinder, self.__stack)
for volume in vol_types:
settings = settings_utils.create_volume_type_config(volume)
@@ -375,10 +383,9 @@ class OpenStackHeatStack(OpenStackCloudObject, object):
"""
out = list()
- nova = nova_utils.nova_client(self._os_creds)
keypairs = heat_utils.get_stack_keypairs(
- self.__heat_cli, nova, self.__stack)
+ self.__heat_cli, self.__nova, self.__stack)
for keypair in keypairs:
settings = settings_utils.create_keypair_config(
@@ -403,10 +410,9 @@ class OpenStackHeatStack(OpenStackCloudObject, object):
"""
out = list()
- nova = nova_utils.nova_client(self._os_creds)
flavors = heat_utils.get_stack_flavors(
- self.__heat_cli, nova, self.__stack)
+ self.__heat_cli, self.__nova, self.__stack)
for flavor in flavors:
settings = settings_utils.create_flavor_config(flavor)
diff --git a/snaps/openstack/create_user.py b/snaps/openstack/create_user.py
index aefebe4..b187f4e 100644
--- a/snaps/openstack/create_user.py
+++ b/snaps/openstack/create_user.py
@@ -77,6 +77,8 @@ class OpenStackUser(OpenStackIdentityObject):
pass
self.__user = None
+ super(self.__class__, self).clean()
+
def get_user(self):
"""
Returns the OpenStack user object populated in create()
diff --git a/snaps/openstack/create_volume.py b/snaps/openstack/create_volume.py
index 656df80..b35cd89 100644
--- a/snaps/openstack/create_volume.py
+++ b/snaps/openstack/create_volume.py
@@ -20,7 +20,7 @@ from cinderclient.exceptions import NotFound
from snaps.config.volume import VolumeConfig
from snaps.openstack.openstack_creator import OpenStackVolumeObject
-from snaps.openstack.utils import cinder_utils, keystone_utils
+from snaps.openstack.utils import cinder_utils
__author__ = 'spisarski'
@@ -51,7 +51,6 @@ class OpenStackVolume(OpenStackVolumeObject):
self.volume_settings = volume_settings
self.__volume = None
- self.__keystone = None
def initialize(self):
"""
@@ -60,9 +59,8 @@ class OpenStackVolume(OpenStackVolumeObject):
"""
super(self.__class__, self).initialize()
- self.__keystone = keystone_utils.keystone_client(self._os_creds)
self.__volume = cinder_utils.get_volume(
- self._cinder, self.__keystone,
+ self._cinder, self._keystone,
volume_settings=self.volume_settings,
project_name=self._os_creds.project_name)
return self.__volume
@@ -77,7 +75,7 @@ class OpenStackVolume(OpenStackVolumeObject):
if not self.__volume:
self.__volume = cinder_utils.create_volume(
- self._cinder, self.__keystone, self.volume_settings)
+ self._cinder, self._keystone, self.volume_settings)
logger.info(
'Created volume with name - %s', self.volume_settings.name)
@@ -128,6 +126,8 @@ class OpenStackVolume(OpenStackVolumeObject):
self.__volume = None
+ super(self.__class__, self).clean()
+
def get_volume(self):
"""
Returns the domain Volume object as it was populated when create() was
diff --git a/snaps/openstack/create_volume_type.py b/snaps/openstack/create_volume_type.py
index a7198d8..9a45561 100644
--- a/snaps/openstack/create_volume_type.py
+++ b/snaps/openstack/create_volume_type.py
@@ -87,6 +87,8 @@ class OpenStackVolumeType(OpenStackVolumeObject):
self.__volume_type = None
+ super(self.__class__, self).clean()
+
def get_volume_type(self):
"""
Returns the domain Volume object as it was populated when create() was
diff --git a/snaps/openstack/openstack_creator.py b/snaps/openstack/openstack_creator.py
index cf741f3..9bd099b 100644
--- a/snaps/openstack/openstack_creator.py
+++ b/snaps/openstack/openstack_creator.py
@@ -30,15 +30,20 @@ class OpenStackCloudObject(CloudObject):
:param os_creds: the OpenStack credentials object
"""
self._os_creds = os_creds
+ self._os_session = None
+ self._keystone = None
def initialize(self):
- raise NotImplementedError('Do not override abstract method')
+ self._os_session = keystone_utils.keystone_session(self._os_creds)
+ self._keystone = keystone_utils.keystone_client(
+ self._os_creds, session=self._os_session)
def create(self):
raise NotImplementedError('Do not override abstract method')
def clean(self):
- raise NotImplementedError('Do not override abstract method')
+ if self._os_session:
+ keystone_utils.close_session(self._os_session)
class OpenStackComputeObject(OpenStackCloudObject):
@@ -55,14 +60,12 @@ class OpenStackComputeObject(OpenStackCloudObject):
self._nova = None
def initialize(self):
- self._nova = nova_utils.nova_client(self._os_creds)
+ super(OpenStackComputeObject, self).initialize()
+ self._nova = nova_utils.nova_client(self._os_creds, self._os_session)
def create(self):
raise NotImplementedError('Do not override abstract method')
- def clean(self):
- raise NotImplementedError('Do not override abstract method')
-
class OpenStackNetworkObject(OpenStackCloudObject):
"""
@@ -78,14 +81,13 @@ class OpenStackNetworkObject(OpenStackCloudObject):
self._neutron = None
def initialize(self):
- self._neutron = neutron_utils.neutron_client(self._os_creds)
+ super(OpenStackNetworkObject, self).initialize()
+ self._neutron = neutron_utils.neutron_client(
+ self._os_creds, self._os_session)
def create(self):
raise NotImplementedError('Do not override abstract method')
- def clean(self):
- raise NotImplementedError('Do not override abstract method')
-
class OpenStackIdentityObject(OpenStackCloudObject):
"""
@@ -98,17 +100,13 @@ class OpenStackIdentityObject(OpenStackCloudObject):
:param os_creds: the OpenStack credentials object
"""
super(OpenStackIdentityObject, self).__init__(os_creds)
- self._keystone = None
def initialize(self):
- self._keystone = keystone_utils.keystone_client(self._os_creds)
+ super(OpenStackIdentityObject, self).initialize()
def create(self):
raise NotImplementedError('Do not override abstract method')
- def clean(self):
- raise NotImplementedError('Do not override abstract method')
-
class OpenStackVolumeObject(OpenStackCloudObject):
"""
@@ -124,14 +122,13 @@ class OpenStackVolumeObject(OpenStackCloudObject):
self._cinder = None
def initialize(self):
- self._cinder = cinder_utils.cinder_client(self._os_creds)
+ super(OpenStackVolumeObject, self).initialize()
+ self._cinder = cinder_utils.cinder_client(
+ self._os_creds, self._os_session)
def create(self):
raise NotImplementedError('Do not override abstract method')
- def clean(self):
- raise NotImplementedError('Do not override abstract method')
-
class OpenStackMagnumObject(OpenStackCloudObject):
"""
@@ -147,10 +144,9 @@ class OpenStackMagnumObject(OpenStackCloudObject):
self._magnum = None
def initialize(self):
- self._magnum = magnum_utils.magnum_client(self._os_creds)
+ super(OpenStackMagnumObject, self).initialize()
+ self._magnum = magnum_utils.magnum_client(
+ self._os_creds, self._os_session)
def create(self):
raise NotImplementedError('Do not override abstract method')
-
- def clean(self):
- raise NotImplementedError('Do not override abstract method')
diff --git a/snaps/openstack/tests/cluster_template_tests.py b/snaps/openstack/tests/cluster_template_tests.py
index 355467d..b08f260 100644
--- a/snaps/openstack/tests/cluster_template_tests.py
+++ b/snaps/openstack/tests/cluster_template_tests.py
@@ -54,7 +54,8 @@ class CreateClusterTemplateTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.cluster_type_name = self.guid + '-cluster-type'
- self.magnum = magnum_utils.magnum_client(self.os_creds)
+ self.magnum = magnum_utils.magnum_client(
+ self.os_creds, self.os_session)
metadata = self.image_metadata
if not metadata:
diff --git a/snaps/openstack/tests/create_flavor_tests.py b/snaps/openstack/tests/create_flavor_tests.py
index f84355d..453509b 100644
--- a/snaps/openstack/tests/create_flavor_tests.py
+++ b/snaps/openstack/tests/create_flavor_tests.py
@@ -274,7 +274,7 @@ class CreateFlavorTests(OSComponentTestCase):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.flavor_name = guid + 'name'
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
# Initialize for cleanup
self.flavor_creator = None
@@ -286,6 +286,8 @@ class CreateFlavorTests(OSComponentTestCase):
if self.flavor_creator:
self.flavor_creator.clean()
+ super(self.__class__, self).__clean__()
+
def test_create_flavor(self):
"""
Tests the creation of an OpenStack flavor.
diff --git a/snaps/openstack/tests/create_image_tests.py b/snaps/openstack/tests/create_image_tests.py
index 9965f87..ae59a67 100644
--- a/snaps/openstack/tests/create_image_tests.py
+++ b/snaps/openstack/tests/create_image_tests.py
@@ -265,7 +265,8 @@ class CreateImageSuccessTests(OSIntegrationTestCase):
guid = uuid.uuid4()
self.image_name = self.__class__.__name__ + '-' + str(guid)
- self.glance = glance_utils.glance_client(self.os_creds)
+ self.glance = glance_utils.glance_client(
+ self.os_creds, self.os_session)
self.image_creator = None
if self.image_metadata and 'glance_tests' in self.image_metadata:
@@ -379,8 +380,8 @@ class CreateImageSuccessTests(OSIntegrationTestCase):
clean() does not raise an Exception.
"""
# Create Image
- self.image_creator = create_image.OpenStackImage(self.os_creds,
- self.image_settings)
+ self.image_creator = create_image.OpenStackImage(
+ self.os_creds, self.image_settings)
created_image = self.image_creator.create()
self.assertIsNotNone(created_image)
@@ -562,7 +563,8 @@ class CreateMultiPartImageTests(OSIntegrationTestCase):
guid = uuid.uuid4()
self.image_creators = list()
self.image_name = self.__class__.__name__ + '-' + str(guid)
- self.glance = glance_utils.glance_client(self.os_creds)
+ self.glance = glance_utils.glance_client(
+ self.os_creds, self.os_session)
self.tmp_dir = 'tmp/' + str(guid)
if not os.path.exists(self.tmp_dir):
diff --git a/snaps/openstack/tests/create_instance_tests.py b/snaps/openstack/tests/create_instance_tests.py
index 12ae10b..6005f98 100644
--- a/snaps/openstack/tests/create_instance_tests.py
+++ b/snaps/openstack/tests/create_instance_tests.py
@@ -50,6 +50,7 @@ from snaps.openstack.tests.os_source_file_test import (
OSIntegrationTestCase, OSComponentTestCase)
from snaps.openstack.utils import nova_utils, keystone_utils, neutron_utils
from snaps.openstack.utils.nova_utils import RebootType
+from snaps.openstack.utils import nova_utils, settings_utils, neutron_utils
__author__ = 'spisarski'
@@ -293,7 +294,7 @@ class SimpleHealthCheck(OSIntegrationTestCase):
"""
super(self.__class__, self).__start__()
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.vm_inst_name = guid + '-inst'
self.port_1_name = guid + 'port-1'
@@ -512,9 +513,10 @@ class CreateInstanceSimpleTests(OSIntegrationTestCase):
self.image_creator.image_settings)
vm_inst = self.inst_creator.create(block=True)
- self.assertIsNotNone(nova_utils.get_server(
+ vm_inst_get = nova_utils.get_server(
self.nova, self.neutron, self.keystone,
- vm_inst_settings=instance_settings))
+ vm_inst_settings=instance_settings)
+ self.assertEqual(vm_inst, vm_inst_get)
self.assertIsNotNone(self.inst_creator.get_vm_inst().availability_zone)
self.assertIsNone(self.inst_creator.get_vm_inst().compute_host)
@@ -590,7 +592,7 @@ class CreateInstanceSingleNetworkTests(OSIntegrationTestCase):
"""
super(self.__class__, self).__start__()
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.keypair_priv_filepath = 'tmp/' + guid
self.keypair_pub_filepath = self.keypair_priv_filepath + '.pub'
@@ -1016,7 +1018,7 @@ class CreateInstanceIPv6NetworkTests(OSIntegrationTestCase):
"""
super(self.__class__, self).__start__()
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.keypair_priv_filepath = 'tmp/' + self.guid
self.keypair_pub_filepath = self.keypair_priv_filepath + '.pub'
@@ -1621,7 +1623,8 @@ class CreateInstanceOnComputeHost(OSIntegrationTestCase):
Tests the creation of OpenStack VM instances to each compute node.
"""
from snaps.openstack.utils import nova_utils
- nova = nova_utils.nova_client(self.admin_os_creds)
+ nova = nova_utils.nova_client(
+ self.admin_os_creds, self.admin_os_session)
zone_hosts = nova_utils.get_availability_zone_hosts(nova)
# Create Instance on each server/zone
@@ -1675,7 +1678,7 @@ class InstanceSecurityGroupTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.vm_inst_name = self.guid + '-inst'
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
os_image_settings = openstack_tests.cirros_image_settings(
name=self.guid + '-image', image_metadata=self.image_metadata)
@@ -2006,7 +2009,7 @@ class CreateInstanceFromThreePartImage(OSIntegrationTestCase):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.image_name = guid
self.vm_inst_name = guid + '-inst'
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
net_config = openstack_tests.get_priv_net_config(
net_name=guid + '-pub-net', subnet_name=guid + '-pub-subnet',
@@ -2216,6 +2219,8 @@ class CreateInstanceMockOfflineTests(OSComponentTestCase):
if os.path.exists(self.tmpDir) and os.path.isdir(self.tmpDir):
shutil.rmtree(self.tmpDir)
+ super(self.__class__, self).__clean__()
+
def test_inst_from_file_image_simple_flat(self):
"""
Creates a VM instance from a locally sourced file image using simply
@@ -2636,7 +2641,7 @@ class CreateInstanceTwoNetTests(OSIntegrationTestCase):
self.ip1 = '10.200.201.5'
self.ip2 = '10.200.202.5'
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
# Initialize for tearDown()
self.image_creator = None
@@ -2858,8 +2863,10 @@ class CreateInstanceVolumeTests(OSIntegrationTestCase):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.vm_inst_name = guid + '-inst'
- self.nova = nova_utils.nova_client(self.os_creds)
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.nova = nova_utils.nova_client(
+ self.os_creds, self.os_session)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
os_image_settings = openstack_tests.cirros_image_settings(
name=guid + '-image', image_metadata=self.image_metadata)
diff --git a/snaps/openstack/tests/create_keypairs_tests.py b/snaps/openstack/tests/create_keypairs_tests.py
index 63e0bcc..44214d0 100644
--- a/snaps/openstack/tests/create_keypairs_tests.py
+++ b/snaps/openstack/tests/create_keypairs_tests.py
@@ -200,7 +200,7 @@ class CreateKeypairsTests(OSIntegrationTestCase):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.priv_file_path = 'tmp/' + guid
self.pub_file_path = self.priv_file_path + '.pub'
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
self.keypair_name = guid
self.keypair_creator = None
@@ -370,7 +370,7 @@ class CreateKeypairsCleanupTests(OSIntegrationTestCase):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.priv_file_path = 'tmp/' + guid
self.pub_file_path = self.priv_file_path + '.pub'
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
self.keypair_name = guid
self.keypair_creator = None
diff --git a/snaps/openstack/tests/create_network_tests.py b/snaps/openstack/tests/create_network_tests.py
index a863a05..d326889 100644
--- a/snaps/openstack/tests/create_network_tests.py
+++ b/snaps/openstack/tests/create_network_tests.py
@@ -369,7 +369,8 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
router_name=guid + '-pub-router', external_net=self.ext_net_name,
netconf_override=self.netconf_override)
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
# Initialize for cleanup
self.net_creator = None
@@ -576,7 +577,8 @@ class CreateNetworkGatewayTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
self.ip_prfx = '10.1.0.'
@@ -708,7 +710,8 @@ class CreateNetworkIPv6Tests(OSIntegrationTestCase):
super(self.__class__, self).__start__()
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
# Initialize for cleanup
self.net_creator = None
@@ -811,8 +814,10 @@ class CreateNetworkTypeTests(OSComponentTestCase):
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)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
# Initialize for cleanup
self.net_creator = None
@@ -824,6 +829,8 @@ class CreateNetworkTypeTests(OSComponentTestCase):
if self.net_creator:
self.net_creator.clean()
+ super(self.__class__, self).__clean__()
+
def test_create_network_type_vlan(self):
"""
Tests the creation of an OpenStack network of type vlan.
@@ -954,7 +961,8 @@ class CreateMultipleNetworkTests(OSIntegrationTestCase):
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)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
# Initialize for cleanup
self.admin_net_creator = None
diff --git a/snaps/openstack/tests/create_project_tests.py b/snaps/openstack/tests/create_project_tests.py
index 2c10311..41e58fc 100644
--- a/snaps/openstack/tests/create_project_tests.py
+++ b/snaps/openstack/tests/create_project_tests.py
@@ -99,7 +99,8 @@ class CreateProjectSuccessTests(OSComponentTestCase):
name=guid + '-name',
domain=self.os_creds.project_domain_name)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
# Initialize for cleanup
self.project_creator = None
@@ -111,6 +112,8 @@ class CreateProjectSuccessTests(OSComponentTestCase):
if self.project_creator:
self.project_creator.clean()
+ super(self.__class__, self).__clean__()
+
def test_create_project_bad_domain(self):
"""
Tests the creation of an OpenStack project with an invalid domain
@@ -214,12 +217,12 @@ class CreateProjectSuccessTests(OSComponentTestCase):
self.assertEqual(update_network_quotas,
self.project_creator.get_network_quotas())
- nova = nova_utils.nova_client(self.os_creds)
+ nova = nova_utils.nova_client(self.os_creds, self.os_session)
new_compute_quotas = nova_utils.get_compute_quotas(
nova, self.project_creator.get_project().id)
self.assertEqual(update_compute_quotas, new_compute_quotas)
- neutron = neutron_utils.neutron_client(self.os_creds)
+ neutron = neutron_utils.neutron_client(self.os_creds, self.os_session)
new_network_quotas = neutron_utils.get_network_quotas(
neutron, self.project_creator.get_project().id)
self.assertEqual(update_network_quotas, new_network_quotas)
@@ -241,7 +244,8 @@ class CreateProjectUserTests(OSComponentTestCase):
name=self.guid + '-name',
domain=self.os_creds.project_domain_name)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
# Initialize for cleanup
self.project_creator = None
@@ -262,6 +266,8 @@ class CreateProjectUserTests(OSComponentTestCase):
if self.project_creator:
self.project_creator.clean()
+ super(self.__class__, self).__clean__()
+
def test_create_project_sec_grp_one_user(self):
"""
Tests the creation of an OpenStack object to a project with a new users
diff --git a/snaps/openstack/tests/create_qos_tests.py b/snaps/openstack/tests/create_qos_tests.py
index 1d7fbd0..b3d7979 100644
--- a/snaps/openstack/tests/create_qos_tests.py
+++ b/snaps/openstack/tests/create_qos_tests.py
@@ -126,7 +126,8 @@ class CreateQoSTests(OSIntegrationTestCase):
name=self.__class__.__name__ + '-' + str(guid),
consumer=Consumer.both)
- self.cinder = cinder_utils.cinder_client(self.admin_os_creds)
+ self.cinder = cinder_utils.cinder_client(
+ self.admin_os_creds, self.admin_os_session)
self.qos_creator = create_qos.OpenStackQoS(
self.admin_os_creds, qos_settings)
diff --git a/snaps/openstack/tests/create_router_tests.py b/snaps/openstack/tests/create_router_tests.py
index d605916..439d9e3 100644
--- a/snaps/openstack/tests/create_router_tests.py
+++ b/snaps/openstack/tests/create_router_tests.py
@@ -130,7 +130,8 @@ class CreateRouterSuccessTests(OSIntegrationTestCase):
self.router_creator = None
self.network_creator1 = None
self.network_creator2 = None
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
@@ -515,7 +516,8 @@ class CreateMultipleRouterTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.admin_router_creator = None
self.proj_router_creator = None
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
network_settings = NetworkConfig(
name=self.guid + '-pub-net', shared=True,
@@ -623,7 +625,8 @@ class CreateRouterSecurityGroupTests(OSIntegrationTestCase):
self.os_creds, SecurityGroupConfig(name=self.guid + '-sec_grp'))
self.sec_grp_creator.create()
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
diff --git a/snaps/openstack/tests/create_security_group_tests.py b/snaps/openstack/tests/create_security_group_tests.py
index 6f0fdec..dc632b7 100644
--- a/snaps/openstack/tests/create_security_group_tests.py
+++ b/snaps/openstack/tests/create_security_group_tests.py
@@ -210,7 +210,8 @@ class CreateSecurityGroupTests(OSIntegrationTestCase):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.sec_grp_name = guid + 'name'
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
# Initialize for cleanup
self.sec_grp_creator = None
@@ -697,7 +698,8 @@ class CreateMultipleSecurityGroupTests(OSIntegrationTestCase):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.sec_grp_name = guid + 'name'
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
# Initialize for cleanup
self.admin_sec_grp_config = SecurityGroupConfig(
diff --git a/snaps/openstack/tests/create_stack_tests.py b/snaps/openstack/tests/create_stack_tests.py
index ad8ac31..f728211 100644
--- a/snaps/openstack/tests/create_stack_tests.py
+++ b/snaps/openstack/tests/create_stack_tests.py
@@ -139,7 +139,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.heat_cli = heat_utils.heat_client(self.os_creds)
+ self.heat_cli = heat_utils.heat_client(self.os_creds, self.os_session)
self.stack_creator = None
self.image_creator = OpenStackImage(
@@ -351,8 +351,10 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
# Need to use 'admin' creds as heat creates objects under it's own
# project/tenant
- neutron = neutron_utils.neutron_client(self.os_creds)
- keystone = keystone_utils.keystone_client(self.os_creds)
+ neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
+ keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
net_by_name = neutron_utils.get_network(
neutron, keystone, network_name=net_creators[0].get_network().name)
self.assertEqual(net_creators[0].get_network(), net_by_name)
@@ -389,9 +391,9 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
self.assertEqual(self.vm_inst_name,
vm_inst_creators[0].get_vm_inst().name)
- nova = nova_utils.nova_client(self.os_creds)
- neutron = neutron_utils.neutron_client(self.os_creds)
- keystone = keystone_utils.keystone_client(self.os_creds)
+ nova = nova_utils.nova_client(self.os_creds, self.os_session)
+ neutron = neutron_utils.neutron_client(self.os_creds, self.os_session)
+ keystone = keystone_utils.keystone_client(self.os_creds, self.os_session)
vm_inst_by_name = nova_utils.get_server(
nova, neutron, keystone,
server_name=vm_inst_creators[0].get_vm_inst().name)
@@ -414,7 +416,7 @@ class CreateStackFloatingIpTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.heat_cli = heat_utils.heat_client(self.os_creds)
+ self.heat_cli = heat_utils.heat_client(self.os_creds, self.os_session)
self.stack_creator = None
self.image_creator = OpenStackImage(
@@ -521,7 +523,7 @@ class CreateStackNestedResourceTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.heat_cli = heat_utils.heat_client(self.os_creds)
+ self.heat_cli = heat_utils.heat_client(self.os_creds, self.os_session)
self.stack_creator = None
self.image_creator = OpenStackImage(
@@ -632,8 +634,9 @@ class CreateStackRouterTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.heat_cli = heat_utils.heat_client(self.os_creds)
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.heat_cli = heat_utils.heat_client(self.os_creds, self.os_session)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
self.stack_creator = None
self.net_name = self.guid + '-net'
@@ -702,7 +705,7 @@ class CreateStackVolumeTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.heat_cli = heat_utils.heat_client(self.os_creds)
+ self.heat_cli = heat_utils.heat_client(self.os_creds, self.os_session)
self.stack_creator = None
self.volume_name = self.guid + '-volume'
@@ -796,7 +799,7 @@ class CreateStackFlavorTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.heat_cli = heat_utils.heat_client(self.os_creds)
+ self.heat_cli = heat_utils.heat_client(self.os_creds, self.os_session)
self.stack_creator = None
self.heat_tmplt_path = pkg_resources.resource_filename(
@@ -855,8 +858,8 @@ class CreateStackKeypairTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.heat_cli = heat_utils.heat_client(self.os_creds)
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.heat_cli = heat_utils.heat_client(self.os_creds, self.os_session)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
self.stack_creator = None
self.keypair_name = self.guid + '-kp'
@@ -939,8 +942,8 @@ class CreateStackSecurityGroupTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.heat_cli = heat_utils.heat_client(self.os_creds)
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.heat_cli = heat_utils.heat_client(self.os_creds, self.os_session)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
self.stack_creator = None
self.security_group_name = self.guid + '-sec-grp'
@@ -1034,6 +1037,7 @@ class CreateStackNegativeTests(OSIntegrationTestCase):
def tearDown(self):
if self.stack_creator:
self.stack_creator.clean()
+
super(self.__class__, self).__clean__()
def test_missing_dependencies(self):
@@ -1073,7 +1077,7 @@ class CreateStackFailureTests(OSIntegrationTestCase):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.heat_cli = heat_utils.heat_client(self.os_creds)
+ self.heat_cli = heat_utils.heat_client(self.os_creds, self.os_session)
self.stack_creator = None
self.tmp_file = file_utils.save_string_to_file(
diff --git a/snaps/openstack/tests/create_user_tests.py b/snaps/openstack/tests/create_user_tests.py
index d3eb4a6..718d5a3 100644
--- a/snaps/openstack/tests/create_user_tests.py
+++ b/snaps/openstack/tests/create_user_tests.py
@@ -109,7 +109,7 @@ class CreateUserSuccessTests(OSComponentTestCase):
roles={'admin': self.os_creds.project_name},
domain_name=self.os_creds.user_domain_name)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
+ self.keystone = keystone_utils.keystone_client(self.os_creds, self.os_session)
# Initialize for cleanup
self.user_creator = None
@@ -121,6 +121,8 @@ class CreateUserSuccessTests(OSComponentTestCase):
if self.user_creator:
self.user_creator.clean()
+ super(self.__class__, self).__clean__()
+
def test_create_user(self):
"""
Tests the creation of an OpenStack user.
diff --git a/snaps/openstack/tests/create_volume_tests.py b/snaps/openstack/tests/create_volume_tests.py
index cf90b6e..4392245 100644
--- a/snaps/openstack/tests/create_volume_tests.py
+++ b/snaps/openstack/tests/create_volume_tests.py
@@ -129,8 +129,10 @@ class CreateSimpleVolumeSuccessTests(OSIntegrationTestCase):
self.volume_settings = VolumeConfig(
name=self.__class__.__name__ + '-' + str(guid))
- self.cinder = cinder_utils.cinder_client(self.os_creds)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
+ self.cinder = cinder_utils.cinder_client(
+ self.os_creds, self.os_session)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
self.volume_creator = None
def tearDown(self):
@@ -223,7 +225,8 @@ class CreateSimpleVolumeFailureTests(OSIntegrationTestCase):
super(self.__class__, self).__start__()
self.guid = uuid.uuid4()
- self.cinder = cinder_utils.cinder_client(self.os_creds)
+ self.cinder = cinder_utils.cinder_client(
+ self.os_creds, self.os_session)
self.volume_creator = None
def tearDown(self):
@@ -353,7 +356,8 @@ class CreateVolumeWithImageTests(OSIntegrationTestCase):
def setUp(self):
super(self.__class__, self).__start__()
- self.cinder = cinder_utils.cinder_client(self.os_creds)
+ self.cinder = cinder_utils.cinder_client(
+ self.os_creds, self.os_session)
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.volume_name = guid + '-vol'
@@ -465,12 +469,14 @@ class CreateVolMultipleCredsTests(OSIntegrationTestCase):
admin_vol = self.volume_creators[0].create(block=True)
self.assertIsNotNone(admin_vol)
- admin_key = keystone_utils.keystone_client(self.admin_os_creds)
+ admin_key = keystone_utils.keystone_client(
+ self.admin_os_creds, self.admin_os_session)
admin_proj = keystone_utils.get_project(
admin_key, project_name=self.admin_os_creds.project_name)
self.assertEqual(admin_vol.project_id, admin_proj.id)
- admin_cinder = cinder_utils.cinder_client(self.admin_os_creds)
+ admin_cinder = cinder_utils.cinder_client(
+ self.admin_os_creds, self.admin_os_session)
admin_vol_get = cinder_utils.get_volume(
admin_cinder, admin_key, volume_name=vol_name,
project_name=self.admin_os_creds.project_name)
@@ -484,8 +490,10 @@ class CreateVolMultipleCredsTests(OSIntegrationTestCase):
self.assertNotEqual(admin_vol, proj_vol)
- proj_key = keystone_utils.keystone_client(self.os_creds)
- proj_cinder = cinder_utils.cinder_client(self.os_creds)
+ proj_key = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
+ proj_cinder = cinder_utils.cinder_client(
+ self.os_creds, self.os_session)
proj_vol_get = cinder_utils.get_volume(
proj_cinder, proj_key, volume_name=vol_name,
project_name=self.os_creds.project_name)
diff --git a/snaps/openstack/tests/create_volume_type_tests.py b/snaps/openstack/tests/create_volume_type_tests.py
index 5e78ee9..b797274 100644
--- a/snaps/openstack/tests/create_volume_type_tests.py
+++ b/snaps/openstack/tests/create_volume_type_tests.py
@@ -127,7 +127,8 @@ class CreateSimpleVolumeTypeSuccessTests(OSIntegrationTestCase):
self.volume_type_settings = VolumeTypeConfig(
name=self.__class__.__name__ + '-' + str(guid))
- self.cinder = cinder_utils.cinder_client(self.admin_os_creds)
+ self.cinder = cinder_utils.cinder_client(
+ self.admin_os_creds, self.admin_os_session)
self.volume_type_creator = OpenStackVolumeType(
self.admin_os_creds, self.volume_type_settings)
@@ -211,7 +212,8 @@ class CreateVolumeTypeComplexTests(OSIntegrationTestCase):
def setUp(self):
super(self.__class__, self).__start__()
- self.cinder = cinder_utils.cinder_client(self.admin_os_creds)
+ self.cinder = cinder_utils.cinder_client(
+ self.admin_os_creds, self.admin_os_session)
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
diff --git a/snaps/openstack/tests/os_source_file_test.py b/snaps/openstack/tests/os_source_file_test.py
index b361ea8..51b9400 100644
--- a/snaps/openstack/tests/os_source_file_test.py
+++ b/snaps/openstack/tests/os_source_file_test.py
@@ -53,6 +53,7 @@ class OSComponentTestCase(unittest.TestCase):
self.os_creds = openstack_tests.get_credentials(
dev_os_env_file=dev_os_env_file)
+ self.os_session = keystone_utils.keystone_session(self.os_creds)
self.ext_net_name = ext_net_name
if not self.ext_net_name and file_utils.file_exists(dev_os_env_file):
@@ -76,6 +77,14 @@ class OSComponentTestCase(unittest.TestCase):
return suite
+ def __clean__(self):
+ """
+ Cleans up keystone session.
+ """
+ if self.os_session:
+ keystone_utils.close_session(self.os_session)
+
+
class OSIntegrationTestCase(OSComponentTestCase):
def __init__(self, method_name='runTest', os_creds=None, ext_net_name=None,
@@ -144,9 +153,13 @@ class OSIntegrationTestCase(OSComponentTestCase):
self.project_creator = None
self.user_creator = None
self.admin_os_creds = self.os_creds
+ self.admin_os_session = self.os_session
+ keystone_utils.keystone_session(
+ self.admin_os_creds)
if self.use_keystone:
- self.keystone = keystone_utils.keystone_client(self.admin_os_creds)
+ self.keystone = keystone_utils.keystone_client(
+ self.admin_os_creds, self.admin_os_session)
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())[:-19]
project_name = guid + '-proj'
self.project_creator = deploy_utils.create_project(
@@ -168,6 +181,7 @@ class OSIntegrationTestCase(OSComponentTestCase):
self.os_creds = self.user_creator.get_os_creds(
self.project_creator.project_settings.name)
+ self.os_session = keystone_utils.keystone_session(self.os_creds)
# add user to project
self.project_creator.assoc_user(self.user_creator.get_user())
@@ -184,3 +198,9 @@ class OSIntegrationTestCase(OSComponentTestCase):
if self.user_creator:
self.user_creator.clean()
+
+ if self.admin_os_session:
+ keystone_utils.close_session(self.admin_os_session)
+
+ super(OSIntegrationTestCase, self).__clean__()
+
diff --git a/snaps/openstack/utils/cinder_utils.py b/snaps/openstack/utils/cinder_utils.py
index 246245e..61abe22 100644
--- a/snaps/openstack/utils/cinder_utils.py
+++ b/snaps/openstack/utils/cinder_utils.py
@@ -33,13 +33,18 @@ Utilities for basic neutron API calls
"""
-def cinder_client(os_creds):
+def cinder_client(os_creds, session=None):
"""
Creates and returns a cinder client object
+ :param os_creds: the credentials for connecting to the OpenStack remote API
+ :param session: the keystone session object (optional)
:return: the cinder client
"""
+ if not session:
+ session = keystone_utils.keystone_session(os_creds)
+
return Client(version=os_creds.volume_api_version,
- session=keystone_utils.keystone_session(os_creds),
+ session=session,
region_name=os_creds.region_name)
diff --git a/snaps/openstack/utils/glance_utils.py b/snaps/openstack/utils/glance_utils.py
index a127ad3..db20f2f 100644
--- a/snaps/openstack/utils/glance_utils.py
+++ b/snaps/openstack/utils/glance_utils.py
@@ -34,13 +34,18 @@ Utilities for basic neutron API calls
"""
-def glance_client(os_creds):
+def glance_client(os_creds, session=None):
"""
Creates and returns a glance client object
+ :param os_creds: the credentials for connecting to the OpenStack remote API
+ :param session: the keystone session object (optional)
:return: the glance client
"""
+ if not session:
+ session = keystone_utils.keystone_session(os_creds)
+
return Client(version=os_creds.image_api_version,
- session=keystone_utils.keystone_session(os_creds),
+ session=session,
region_name=os_creds.region_name)
diff --git a/snaps/openstack/utils/heat_utils.py b/snaps/openstack/utils/heat_utils.py
index d42eefa..3d62fdf 100644
--- a/snaps/openstack/utils/heat_utils.py
+++ b/snaps/openstack/utils/heat_utils.py
@@ -32,15 +32,17 @@ __author__ = 'spisarski'
logger = logging.getLogger('heat_utils')
-def heat_client(os_creds):
+def heat_client(os_creds, session=None):
"""
Retrieves the Heat client
:param os_creds: the OpenStack credentials
:return: the client
"""
logger.debug('Retrieving Heat Client')
+ if not session:
+ session = keystone_utils.keystone_session(os_creds)
return Client(os_creds.heat_api_version,
- session=keystone_utils.keystone_session(os_creds),
+ session=session,
region_name=os_creds.region_name)
diff --git a/snaps/openstack/utils/keystone_utils.py b/snaps/openstack/utils/keystone_utils.py
index 263f823..52c86d8 100644
--- a/snaps/openstack/utils/keystone_utils.py
+++ b/snaps/openstack/utils/keystone_utils.py
@@ -14,6 +14,7 @@
# limitations under the License.
import logging
+import keystoneauth1
from keystoneclient.client import Client
from keystoneauth1.identity import v3, v2
from keystoneauth1 import session
@@ -78,15 +79,29 @@ def keystone_session(os_creds):
verify=os_creds.cacert)
-def keystone_client(os_creds):
+def close_session(session):
+ """
+ Closes a keystone session
+ :param session: a session.Session object
+ """
+ if isinstance(session, keystoneauth1.session.Session):
+ session.session.close()
+
+
+def keystone_client(os_creds, session=None):
"""
Returns the keystone client
:param os_creds: the OpenStack credentials (OSCreds) object
+ :param session: the keystone session object (optional)
:return: the client
"""
+
+ if not session:
+ session = keystone_session(os_creds)
+
return Client(
version=os_creds.identity_api_version,
- session=keystone_session(os_creds),
+ session=session,
interface=os_creds.interface,
region_name=os_creds.region_name)
diff --git a/snaps/openstack/utils/launch_utils.py b/snaps/openstack/utils/launch_utils.py
index 1899ef6..fd78bd2 100644
--- a/snaps/openstack/utils/launch_utils.py
+++ b/snaps/openstack/utils/launch_utils.py
@@ -48,7 +48,7 @@ from snaps.openstack.create_user import OpenStackUser
from snaps.openstack.create_volume import OpenStackVolume
from snaps.openstack.create_volume_type import OpenStackVolumeType
from snaps.openstack.os_credentials import OSCreds, ProxySettings
-from snaps.openstack.utils import deploy_utils, neutron_utils
+from snaps.openstack.utils import deploy_utils, neutron_utils, keystone_utils
from snaps.provisioning import ansible_utils
logger = logging.getLogger('lanuch_utils')
@@ -713,18 +713,22 @@ def __get_router_variable_value(var_config_values, routers_dict, os_creds):
if router_creator:
if 'external_fixed_ip' == var_config_values.get('attr'):
- neutron = neutron_utils.neutron_client(os_creds)
- ext_nets = neutron_utils.get_external_networks(neutron)
-
- subnet_name = var_config_values.get('subnet_name')
-
- for ext_net in ext_nets:
- for subnet in ext_net.subnets:
- if subnet_name == subnet.name:
- router = router_creator.get_router()
- for fixed_ips in router.external_fixed_ips:
- if subnet.id == fixed_ips['subnet_id']:
- return fixed_ips['ip_address']
+ session = keystone_utils.keystone_session(os_creds)
+ neutron = neutron_utils.neutron_client(os_creds, session)
+ try:
+ ext_nets = neutron_utils.get_external_networks(neutron)
+
+ subnet_name = var_config_values.get('subnet_name')
+
+ for ext_net in ext_nets:
+ for subnet in ext_net.subnets:
+ if subnet_name == subnet.name:
+ router = router_creator.get_router()
+ for fixed_ips in router.external_fixed_ips:
+ if subnet.id == fixed_ips['subnet_id']:
+ return fixed_ips['ip_address']
+ finally:
+ keystone_utils.close_session(session)
def __get_vm_port_variable_value(var_config_values, vm_dict):
diff --git a/snaps/openstack/utils/magnum_utils.py b/snaps/openstack/utils/magnum_utils.py
index 96ba6d1..1f39cfe 100644
--- a/snaps/openstack/utils/magnum_utils.py
+++ b/snaps/openstack/utils/magnum_utils.py
@@ -24,15 +24,18 @@ __author__ = 'spisarski'
logger = logging.getLogger('magnum_utils')
-def magnum_client(os_creds):
+def magnum_client(os_creds, session=None):
"""
Retrieves the Magnum client
:param os_creds: the OpenStack credentialsf
+ :param session: the keystone session object (optional)
:return: the client
"""
logger.debug('Retrieving Magnum Client')
- return Client(str(os_creds.magnum_api_version),
- session=keystone_utils.keystone_session(os_creds))
+ if not session:
+ session = keystone_utils.keystone_session(os_creds)
+
+ return Client(str(os_creds.magnum_api_version), session=session)
def get_cluster_template(magnum, template_config=None, template_name=None):
diff --git a/snaps/openstack/utils/neutron_utils.py b/snaps/openstack/utils/neutron_utils.py
index 8685d14..03e24f5 100644
--- a/snaps/openstack/utils/neutron_utils.py
+++ b/snaps/openstack/utils/neutron_utils.py
@@ -33,15 +33,18 @@ Utilities for basic neutron API calls
"""
-def neutron_client(os_creds):
+def neutron_client(os_creds, session=None):
"""
Instantiates and returns a client for communications with OpenStack's
Neutron server
:param os_creds: the credentials for connecting to the OpenStack remote API
+ :param session: the keystone session object (optional)
:return: the client object
"""
+ if not session:
+ session = keystone_utils.keystone_session(os_creds)
return Client(api_version=os_creds.network_api_version,
- session=keystone_utils.keystone_session(os_creds),
+ session=session,
region_name=os_creds.region_name)
diff --git a/snaps/openstack/utils/nova_utils.py b/snaps/openstack/utils/nova_utils.py
index faa2d75..38460c5 100644
--- a/snaps/openstack/utils/nova_utils.py
+++ b/snaps/openstack/utils/nova_utils.py
@@ -42,16 +42,20 @@ Utilities for basic OpenStack Nova API calls
"""
-def nova_client(os_creds):
+def nova_client(os_creds, session=None):
"""
Instantiates and returns a client for communications with OpenStack's Nova
server
:param os_creds: The connection credentials to the OpenStack API
+ :param session: the keystone session object (optional)
:return: the client object
"""
logger.debug('Retrieving Nova Client')
+ if not session:
+ session = keystone_utils.keystone_session(os_creds)
+
return Client(os_creds.compute_api_version,
- session=keystone_utils.keystone_session(os_creds),
+ session=session,
region_name=os_creds.region_name)
diff --git a/snaps/openstack/utils/tests/cinder_utils_tests.py b/snaps/openstack/utils/tests/cinder_utils_tests.py
index 3004c0f..073d574 100644
--- a/snaps/openstack/utils/tests/cinder_utils_tests.py
+++ b/snaps/openstack/utils/tests/cinder_utils_tests.py
@@ -43,7 +43,7 @@ class CinderSmokeTests(OSComponentTestCase):
"""
Tests to ensure that the proper credentials can connect.
"""
- cinder = cinder_utils.cinder_client(self.os_creds)
+ cinder = cinder_utils.cinder_client(self.os_creds, self.os_session)
volumes = cinder.volumes.list()
self.assertIsNotNone(volumes)
self.assertTrue(isinstance(volumes, list))
@@ -74,8 +74,10 @@ class CinderUtilsVolumeTests(OSComponentTestCase):
guid = uuid.uuid4()
self.volume_name = self.__class__.__name__ + '-' + str(guid)
self.volume = None
- self.cinder = cinder_utils.cinder_client(self.os_creds)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
+ self.cinder = cinder_utils.cinder_client(
+ self.os_creds, self.os_session)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
@@ -186,7 +188,8 @@ class CinderUtilsQoSTests(OSComponentTestCase):
self.qos_name = self.__class__.__name__ + '-' + str(guid)
self.specs = {'foo': 'bar '}
self.qos = None
- self.cinder = cinder_utils.cinder_client(self.os_creds)
+ self.cinder = cinder_utils.cinder_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
@@ -198,6 +201,8 @@ class CinderUtilsQoSTests(OSComponentTestCase):
except NotFound:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_qos_both(self):
"""
Tests the cinder_utils.create_qos()
@@ -283,7 +288,8 @@ class CinderUtilsSimpleVolumeTypeTests(OSComponentTestCase):
volume_type_name = self.__class__.__name__ + '-' + str(guid)
self.volume_type_settings = VolumeTypeConfig(name=volume_type_name)
self.volume_type = None
- self.cinder = cinder_utils.cinder_client(self.os_creds)
+ self.cinder = cinder_utils.cinder_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
@@ -295,6 +301,8 @@ class CinderUtilsSimpleVolumeTypeTests(OSComponentTestCase):
except NotFound:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_simple_volume_type(self):
"""
Tests the cinder_utils.create_volume_type(), get_volume_type(), and
@@ -351,7 +359,8 @@ class CinderUtilsAddEncryptionTests(OSComponentTestCase):
self.encryption_name = self.__class__.__name__ + '-' + str(guid)
self.encryption = None
- self.cinder = cinder_utils.cinder_client(self.os_creds)
+ self.cinder = cinder_utils.cinder_client(
+ self.os_creds, self.os_session)
volume_type_name = self.__class__.__name__ + '-' + str(guid) + '-type'
self.volume_type = cinder_utils.create_volume_type(
@@ -374,6 +383,8 @@ class CinderUtilsAddEncryptionTests(OSComponentTestCase):
except NotFound:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_simple_encryption(self):
"""
Tests the cinder_utils.create_volume_encryption(),
@@ -468,7 +479,8 @@ class CinderUtilsVolumeTypeCompleteTests(OSComponentTestCase):
self.qos_name = self.__class__.__name__ + '-' + str(guid) + '-qos'
self.vol_type_name = self.__class__.__name__ + '-' + str(guid)
self.specs = {'foo': 'bar'}
- self.cinder = cinder_utils.cinder_client(self.os_creds)
+ self.cinder = cinder_utils.cinder_client(
+ self.os_creds, self.os_session)
qos_settings = QoSConfig(
name=self.qos_name, specs=self.specs, consumer=Consumer.both)
self.qos = cinder_utils.create_qos(self.cinder, qos_settings)
@@ -496,6 +508,8 @@ class CinderUtilsVolumeTypeCompleteTests(OSComponentTestCase):
except NotFound:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_with_encryption(self):
"""
Tests the cinder_utils.create_volume_type() where encryption has been
diff --git a/snaps/openstack/utils/tests/glance_utils_tests.py b/snaps/openstack/utils/tests/glance_utils_tests.py
index e61b795..e761ed8 100644
--- a/snaps/openstack/utils/tests/glance_utils_tests.py
+++ b/snaps/openstack/utils/tests/glance_utils_tests.py
@@ -39,7 +39,7 @@ class GlanceSmokeTests(OSComponentTestCase):
"""
Tests to ensure that the proper credentials can connect.
"""
- glance = glance_utils.glance_client(self.os_creds)
+ glance = glance_utils.glance_client(self.os_creds, self.os_session)
image = glance_utils.get_image(glance, image_name='foo')
self.assertIsNone(image)
@@ -69,7 +69,8 @@ class GlanceUtilsTests(OSComponentTestCase):
guid = uuid.uuid4()
self.image_name = self.__class__.__name__ + '-' + str(guid)
self.image = None
- self.glance = glance_utils.glance_client(self.os_creds)
+ self.glance = glance_utils.glance_client(
+ self.os_creds, self.os_session)
if self.image_metadata:
self.glance_test_meta = self.image_metadata.get('glance_tests')
else:
@@ -89,6 +90,8 @@ class GlanceUtilsTests(OSComponentTestCase):
if os.path.exists(self.tmp_dir) and os.path.isdir(self.tmp_dir):
shutil.rmtree(self.tmp_dir)
+ super(self.__class__, self).__clean__()
+
def test_create_image_minimal_url(self):
"""
Tests the glance_utils.create_image() function with a URL unless the
diff --git a/snaps/openstack/utils/tests/heat_utils_tests.py b/snaps/openstack/utils/tests/heat_utils_tests.py
index cad3fc2..081736a 100644
--- a/snaps/openstack/utils/tests/heat_utils_tests.py
+++ b/snaps/openstack/utils/tests/heat_utils_tests.py
@@ -47,7 +47,7 @@ class HeatSmokeTests(OSComponentTestCase):
"""
Tests to ensure that the proper credentials can connect.
"""
- heat = heat_utils.heat_client(self.os_creds)
+ heat = heat_utils.heat_client(self.os_creds, self.os_session)
# This should not throw an exception
stacks = heat.stacks.list()
@@ -115,7 +115,8 @@ class HeatUtilsCreateSimpleStackTests(OSComponentTestCase):
env_values=env_values)
self.stack1 = None
self.stack2 = None
- self.heat_client = heat_utils.heat_client(self.os_creds)
+ self.heat_client = heat_utils.heat_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
@@ -145,6 +146,8 @@ class HeatUtilsCreateSimpleStackTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_stack(self):
"""
Tests the creation of an OpenStack Heat stack1 that does not exist.
@@ -174,7 +177,7 @@ class HeatUtilsCreateSimpleStackTests(OSComponentTestCase):
self.assertTrue(stack_active(self.heat_client, self.stack1))
- neutron = neutron_utils.neutron_client(self.os_creds)
+ neutron = neutron_utils.neutron_client(self.os_creds, self.os_session)
networks = heat_utils.get_stack_networks(
self.heat_client, neutron, self.stack1)
self.assertIsNotNone(networks)
@@ -185,8 +188,9 @@ class HeatUtilsCreateSimpleStackTests(OSComponentTestCase):
self.assertEqual(1, len(subnets))
self.assertEqual(self.subnet_name, subnets[0].name)
- nova = nova_utils.nova_client(self.os_creds)
- keystone = keystone_utils.keystone_client(self.os_creds)
+ nova = nova_utils.nova_client(self.os_creds, self.os_session)
+ keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
servers = heat_utils.get_stack_servers(
self.heat_client, nova, neutron, keystone, self.stack1,
self.os_creds.project_name)
@@ -277,7 +281,8 @@ class HeatUtilsCreateComplexStackTests(OSComponentTestCase):
stack_settings = StackConfig(
name=stack_name, template_path=heat_tmplt_path,
env_values=env_values)
- self.heat_client = heat_utils.heat_client(self.os_creds)
+ self.heat_client = heat_utils.heat_client(
+ self.os_creds, self.os_session)
self.stack = heat_utils.create_stack(self.heat_client, stack_settings)
self.assertTrue(stack_active(self.heat_client, self.stack))
@@ -309,10 +314,15 @@ class HeatUtilsCreateComplexStackTests(OSComponentTestCase):
time.sleep(3)
if not is_deleted:
- nova = nova_utils.nova_client(self.os_creds)
- keystone = keystone_utils.keystone_client(self.os_creds)
- neutron = neutron_utils.neutron_client(self.os_creds)
- glance = glance_utils.glance_client(self.os_creds)
+ nova = nova_utils.nova_client(
+ self.os_creds, self.os_session)
+ keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
+ neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
+ glance = glance_utils.glance_client(
+ self.os_creds, self.os_session)
+
servers = heat_utils.get_stack_servers(
self.heat_client, nova, neutron, keystone, self.stack,
self.os_creds.project_name)
@@ -359,6 +369,8 @@ class HeatUtilsCreateComplexStackTests(OSComponentTestCase):
os.chmod(expanded_path, 0o755)
os.remove(expanded_path)
+ super(self.__class__, self).__clean__()
+
def test_get_settings_from_stack(self):
"""
Tests that a heat template with floating IPs and can have the proper
@@ -372,7 +384,7 @@ class HeatUtilsCreateComplexStackTests(OSComponentTestCase):
self.assertIsNotNone(options)
self.assertEqual(1, len(options))
- neutron = neutron_utils.neutron_client(self.os_creds)
+ neutron = neutron_utils.neutron_client(self.os_creds, self.os_session)
networks = heat_utils.get_stack_networks(
self.heat_client, neutron, self.stack)
self.assertIsNotNone(networks)
@@ -384,9 +396,10 @@ class HeatUtilsCreateComplexStackTests(OSComponentTestCase):
self.assertIsNotNone(network_settings)
self.assertEqual(self.network_name, network_settings.name)
- nova = nova_utils.nova_client(self.os_creds)
- glance = glance_utils.glance_client(self.os_creds)
- keystone = keystone_utils.keystone_client(self.os_creds)
+ nova = nova_utils.nova_client(self.os_creds, self.os_session)
+ glance = glance_utils.glance_client(self.os_creds, self.os_session)
+ keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
servers = heat_utils.get_stack_servers(
self.heat_client, nova, neutron, keystone, self.stack,
self.os_creds.project_name)
@@ -458,8 +471,10 @@ class HeatUtilsRouterTests(OSComponentTestCase):
name=stack_name, template_path=heat_tmplt_path,
env_values=env_values)
self.stack = None
- self.heat_client = heat_utils.heat_client(self.os_creds)
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.heat_client = heat_utils.heat_client(
+ self.os_creds, self.os_session)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
@@ -471,6 +486,8 @@ class HeatUtilsRouterTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_router_with_stack(self):
"""
Tests the creation of an OpenStack router with Heat and the retrieval
@@ -504,7 +521,8 @@ class HeatUtilsRouterTests(OSComponentTestCase):
router = routers[0]
self.assertEqual(self.router_name, router.name)
- keystone = keystone_utils.keystone_client(self.os_creds)
+ keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
ext_net = neutron_utils.get_network(
self.neutron, keystone, network_name=self.ext_net_name)
self.assertEqual(ext_net.id, router.external_network_id)
@@ -534,8 +552,10 @@ class HeatUtilsVolumeTests(OSComponentTestCase):
name=stack_name, template_path=heat_tmplt_path,
env_values=env_values)
self.stack = None
- self.heat_client = heat_utils.heat_client(self.os_creds)
- self.cinder = cinder_utils.cinder_client(self.os_creds)
+ self.heat_client = heat_utils.heat_client(
+ self.os_creds, self.os_session)
+ self.cinder = cinder_utils.cinder_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
@@ -547,6 +567,8 @@ class HeatUtilsVolumeTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_vol_with_stack(self):
"""
Tests the creation of an OpenStack volume with Heat.
@@ -614,8 +636,10 @@ class HeatUtilsFlavorTests(OSComponentTestCase):
self.stack_settings = StackConfig(
name=stack_name, template_path=heat_tmplt_path)
self.stack = None
- self.heat_client = heat_utils.heat_client(self.os_creds)
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.heat_client = heat_utils.heat_client(
+ self.os_creds, self.os_session)
+ self.nova = nova_utils.nova_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
@@ -627,6 +651,8 @@ class HeatUtilsFlavorTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_flavor_with_stack(self):
"""
Tests the creation of an OpenStack volume with Heat.
@@ -673,8 +699,10 @@ class HeatUtilsKeypairTests(OSComponentTestCase):
name=stack_name, template_path=heat_tmplt_path,
env_values=env_values)
self.stack = None
- self.heat_client = heat_utils.heat_client(self.os_creds)
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.heat_client = heat_utils.heat_client(
+ self.os_creds, self.os_session)
+ self.nova = nova_utils.nova_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
@@ -686,6 +714,8 @@ class HeatUtilsKeypairTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_keypair_with_stack(self):
"""
Tests the creation of an OpenStack keypair with Heat.
@@ -736,8 +766,10 @@ class HeatUtilsSecurityGroupTests(OSComponentTestCase):
name=stack_name, template_path=heat_tmplt_path,
env_values=env_values)
self.stack = None
- self.heat_client = heat_utils.heat_client(self.os_creds)
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.heat_client = heat_utils.heat_client(
+ self.os_creds, self.os_session)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
@@ -749,6 +781,8 @@ class HeatUtilsSecurityGroupTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_security_group_with_stack(self):
"""
Tests the creation of an OpenStack SecurityGroup with Heat.
diff --git a/snaps/openstack/utils/tests/keystone_utils_tests.py b/snaps/openstack/utils/tests/keystone_utils_tests.py
index 7ce7a61..cc3a8ad 100644
--- a/snaps/openstack/utils/tests/keystone_utils_tests.py
+++ b/snaps/openstack/utils/tests/keystone_utils_tests.py
@@ -31,7 +31,8 @@ class KeystoneSmokeTests(OSComponentTestCase):
"""
Tests to ensure that the proper credentials can connect.
"""
- keystone = keystone_utils.keystone_client(self.os_creds)
+ keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
users = keystone.users.list()
self.assertIsNotNone(users)
@@ -66,14 +67,16 @@ class KeystoneUtilsTests(OSComponentTestCase):
self.project_name = self.guid + '-projName'
self.project = None
self.role = None
- self.keystone = keystone_utils.keystone_client(self.os_creds)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
Cleans the remote OpenStack objects
"""
if self.project:
- neutron = neutron_utils.neutron_client(self.os_creds)
+ neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
default_sec_grp = neutron_utils.get_security_group(
neutron, self.keystone, sec_grp_name='default',
project_name=self.os_creds.project_name)
@@ -92,6 +95,8 @@ class KeystoneUtilsTests(OSComponentTestCase):
if self.role:
keystone_utils.delete_role(self.keystone, self.role)
+ super(self.__class__, self).__clean__()
+
def test_create_user_minimal(self):
"""
Tests the keystone_utils.create_user() function
diff --git a/snaps/openstack/utils/tests/magnum_utils_tests.py b/snaps/openstack/utils/tests/magnum_utils_tests.py
index f841c48..d87d97a 100644
--- a/snaps/openstack/utils/tests/magnum_utils_tests.py
+++ b/snaps/openstack/utils/tests/magnum_utils_tests.py
@@ -44,7 +44,8 @@ class MagnumSmokeTests(OSComponentTestCase):
"""
Tests to ensure that the proper credentials can connect.
"""
- magnum = magnum_utils.magnum_client(self.os_creds)
+ magnum = magnum_utils.magnum_client(
+ self.os_creds, self.os_session)
# This should not throw an exception
self.assertIsNotNone(magnum.clusters.list())
@@ -70,7 +71,8 @@ class MagnumUtilsClusterTypeTests(OSComponentTestCase):
def setUp(self):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.cluster_type_name = self.guid + '-cluster-type'
- self.magnum = magnum_utils.magnum_client(self.os_creds)
+ self.magnum = magnum_utils.magnum_client(
+ self.os_creds, self.os_session)
metadata = self.image_metadata
if not metadata:
@@ -130,6 +132,8 @@ class MagnumUtilsClusterTypeTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_cluster_template_simple(self):
config = ClusterTemplateConfig(
name=self.cluster_type_name,
diff --git a/snaps/openstack/utils/tests/neutron_utils_tests.py b/snaps/openstack/utils/tests/neutron_utils_tests.py
index 2583a96..cd293ca 100644
--- a/snaps/openstack/utils/tests/neutron_utils_tests.py
+++ b/snaps/openstack/utils/tests/neutron_utils_tests.py
@@ -41,7 +41,7 @@ class NeutronSmokeTests(OSComponentTestCase):
"""
Tests to ensure that the proper credentials can connect.
"""
- neutron = neutron_utils.neutron_client(self.os_creds)
+ neutron = neutron_utils.neutron_client(self.os_creds, self.os_session)
networks = neutron.list_networks()
@@ -70,7 +70,7 @@ class NeutronSmokeTests(OSComponentTestCase):
configured self.ext_net_name is contained within the returned list
:return:
"""
- neutron = neutron_utils.neutron_client(self.os_creds)
+ neutron = neutron_utils.neutron_client(self.os_creds, self.os_session)
ext_networks = neutron_utils.get_external_networks(neutron)
found = False
for network in ext_networks:
@@ -88,8 +88,10 @@ class NeutronUtilsNetworkTests(OSComponentTestCase):
def setUp(self):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.port_name = str(guid) + '-port'
- self.neutron = neutron_utils.neutron_client(self.os_creds)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
self.network = None
self.net_config = openstack_tests.get_pub_net_config(
net_name=guid + '-pub-net')
@@ -101,6 +103,8 @@ class NeutronUtilsNetworkTests(OSComponentTestCase):
if self.network:
neutron_utils.delete_network(self.neutron, self.network)
+ super(self.__class__, self).__clean__()
+
def test_create_network(self):
"""
Tests the neutron_utils.create_network() function
@@ -145,8 +149,10 @@ class NeutronUtilsSubnetTests(OSComponentTestCase):
def setUp(self):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.port_name = str(guid) + '-port'
- self.neutron = neutron_utils.neutron_client(self.os_creds)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
self.network = None
self.net_config = openstack_tests.get_pub_net_config(
net_name=guid + '-pub-net', subnet_name=guid + '-pub-subnet',
@@ -162,6 +168,8 @@ class NeutronUtilsSubnetTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_subnet(self):
"""
Tests the neutron_utils.create_network() function
@@ -264,7 +272,8 @@ class NeutronUtilsIPv6Tests(OSComponentTestCase):
def setUp(self):
self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
self.network = None
def tearDown(self):
@@ -277,6 +286,8 @@ class NeutronUtilsIPv6Tests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_network_slaac(self):
"""
Tests the neutron_utils.create_network() with an IPv6 subnet where DHCP
@@ -497,8 +508,10 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
def setUp(self):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.port_name = str(guid) + '-port'
- self.neutron = neutron_utils.neutron_client(self.os_creds)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
self.network = None
self.port = None
self.router = None
@@ -533,6 +546,8 @@ class NeutronUtilsRouterTests(OSComponentTestCase):
if self.network:
neutron_utils.delete_network(self.neutron, self.network)
+ super(self.__class__, self).__clean__()
+
def test_create_router_simple(self):
"""
Tests the neutron_utils.create_router()
@@ -856,8 +871,10 @@ class NeutronUtilsSecurityGroupTests(OSComponentTestCase):
self.security_groups = list()
self.security_group_rules = list()
- self.neutron = neutron_utils.neutron_client(self.os_creds)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
@@ -873,6 +890,8 @@ class NeutronUtilsSecurityGroupTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_delete_simple_sec_grp(self):
"""
Tests the neutron_utils.create_security_group() function
@@ -944,7 +963,8 @@ class NeutronUtilsSecurityGroupTests(OSComponentTestCase):
for free_rule in free_rules:
self.security_group_rules.append(free_rule)
- keystone = keystone_utils.keystone_client(self.os_creds)
+ keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
self.security_group_rules.append(
neutron_utils.create_security_group_rule(
self.neutron, keystone, sec_grp_settings.rule_settings[0],
@@ -1001,8 +1021,10 @@ class NeutronUtilsFloatingIpTests(OSComponentTestCase):
Instantiates the CreateImage object that is responsible for downloading
and creating an OS image file within OpenStack
"""
- self.neutron = neutron_utils.neutron_client(self.os_creds)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
self.floating_ip = None
def tearDown(self):
@@ -1016,6 +1038,8 @@ class NeutronUtilsFloatingIpTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_floating_ips(self):
"""
Tests the creation of a floating IP
diff --git a/snaps/openstack/utils/tests/nova_utils_tests.py b/snaps/openstack/utils/tests/nova_utils_tests.py
index 910684c..f5df865 100644
--- a/snaps/openstack/utils/tests/nova_utils_tests.py
+++ b/snaps/openstack/utils/tests/nova_utils_tests.py
@@ -49,7 +49,7 @@ class NovaSmokeTests(OSComponentTestCase):
"""
Tests to ensure that the proper credentials can connect.
"""
- nova = nova_utils.nova_client(self.os_creds)
+ nova = nova_utils.nova_client(self.os_creds, self.os_session)
# This should not throw an exception
nova.flavors.list()
@@ -58,7 +58,7 @@ class NovaSmokeTests(OSComponentTestCase):
"""
Tests to ensure that get_hypervisors() function works.
"""
- nova = nova_utils.nova_client(self.os_creds)
+ nova = nova_utils.nova_client(self.os_creds, self.os_session)
hosts = nova_utils.get_hypervisor_hosts(nova)
# This should not throw an exception
@@ -95,7 +95,7 @@ class NovaUtilsKeypairTests(OSComponentTestCase):
self.priv_key_file_path = 'tmp/' + guid
self.pub_key_file_path = self.priv_key_file_path + '.pub'
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
self.keys = nova_utils.create_keys()
self.public_key = nova_utils.public_key_openssh(self.keys)
self.keypair_name = guid
@@ -123,6 +123,8 @@ class NovaUtilsKeypairTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_keypair(self):
"""
Tests the creation of an OpenStack keypair that does not exist.
@@ -176,7 +178,7 @@ class NovaUtilsFlavorTests(OSComponentTestCase):
self.flavor_settings = FlavorConfig(
name=guid + '-name', flavor_id=guid + '-id', ram=1, disk=1,
vcpus=1, ephemeral=1, swap=2, rxtx_factor=3.0, is_public=False)
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
self.flavor = None
def tearDown(self):
@@ -189,6 +191,8 @@ class NovaUtilsFlavorTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_flavor(self):
"""
Tests the creation of an OpenStack keypair that does not exist.
@@ -242,10 +246,14 @@ class NovaUtilsInstanceTests(OSComponentTestCase):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.nova = nova_utils.nova_client(self.os_creds)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
- self.neutron = neutron_utils.neutron_client(self.os_creds)
- self.glance = glance_utils.glance_client(self.os_creds)
+ self.nova = nova_utils.nova_client(
+ self.os_creds, self.os_session)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
+ self.glance = glance_utils.glance_client(
+ self.os_creds, self.os_session)
self.image_creator = None
self.network_creator = None
@@ -316,6 +324,8 @@ class NovaUtilsInstanceTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_create_instance(self):
"""
Tests the nova_utils.create_server() method
@@ -363,8 +373,9 @@ class NovaUtilsInstanceVolumeTests(OSComponentTestCase):
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
- self.nova = nova_utils.nova_client(self.os_creds)
- self.cinder = cinder_utils.cinder_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
+ self.cinder = cinder_utils.cinder_client(
+ self.os_creds, self.os_session)
self.image_creator = None
self.network_creator = None
@@ -442,6 +453,8 @@ class NovaUtilsInstanceVolumeTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_add_remove_volume(self):
"""
Tests the nova_utils.attach_volume() and detach_volume functions with
@@ -453,8 +466,10 @@ class NovaUtilsInstanceVolumeTests(OSComponentTestCase):
self.assertEqual(0, len(self.volume_creator.get_volume().attachments))
# Attach volume to VM
- neutron = neutron_utils.neutron_client(self.os_creds)
- keystone = keystone_utils.keystone_client(self.os_creds)
+ neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
+ keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
self.assertIsNotNone(nova_utils.attach_volume(
self.nova, neutron, keystone, self.instance_creator.get_vm_inst(),
self.volume_creator.get_volume(), self.os_creds.project_name))
@@ -476,7 +491,8 @@ class NovaUtilsInstanceVolumeTests(OSComponentTestCase):
self.assertTrue(attached)
self.assertIsNotNone(vol_attach)
- keystone = keystone_utils.keystone_client(self.os_creds)
+ keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
vm_attach = nova_utils.get_server_object_by_id(
self.nova, neutron, keystone,
self.instance_creator.get_vm_inst().id, self.os_creds.project_name)
@@ -528,8 +544,9 @@ class NovaUtilsInstanceVolumeTests(OSComponentTestCase):
self.assertEqual(0, len(self.volume_creator.get_volume().attachments))
# Attach volume to VM
- neutron = neutron_utils.neutron_client(self.os_creds)
- keystone = keystone_utils.keystone_client(self.os_creds)
+ neutron = neutron_utils.neutron_client(self.os_creds, self.os_session)
+ keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
with self.assertRaises(NovaException):
nova_utils.attach_volume(
self.nova, neutron, keystone,
@@ -548,14 +565,16 @@ class NovaUtilsInstanceVolumeTests(OSComponentTestCase):
self.assertEqual(0, len(self.volume_creator.get_volume().attachments))
# Attach volume to VM
- neutron = neutron_utils.neutron_client(self.os_creds)
- keystone = keystone_utils.keystone_client(self.os_creds)
+ neutron = neutron_utils.neutron_client(self.os_creds, self.os_session)
+ keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
nova_utils.attach_volume(
self.nova, neutron, keystone, self.instance_creator.get_vm_inst(),
self.volume_creator.get_volume(), self.os_creds.project_name)
# Check VmInst for attachment
- keystone = keystone_utils.keystone_client(self.os_creds)
+ keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
latest_vm = nova_utils.get_server_object_by_id(
self.nova, neutron, keystone,
self.instance_creator.get_vm_inst().id, self.os_creds.project_name)
diff --git a/snaps/openstack/utils/tests/settings_utils_tests.py b/snaps/openstack/utils/tests/settings_utils_tests.py
index 7dc59b5..14af990 100644
--- a/snaps/openstack/utils/tests/settings_utils_tests.py
+++ b/snaps/openstack/utils/tests/settings_utils_tests.py
@@ -58,7 +58,8 @@ class SettingsUtilsNetworkingTests(OSComponentTestCase):
self.network_name = guid + '-net'
self.subnet_name = guid + '-subnet'
self.net_creator = None
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
def tearDown(self):
"""
@@ -70,6 +71,8 @@ class SettingsUtilsNetworkingTests(OSComponentTestCase):
except:
pass
+ super(self.__class__, self).__clean__()
+
def test_derive_net_settings_no_subnet(self):
"""
Validates the utility function settings_utils#create_network_config
@@ -154,10 +157,14 @@ class SettingsUtilsVmInstTests(OSComponentTestCase):
Instantiates the CreateImage object that is responsible for downloading
and creating an OS image file within OpenStack
"""
- self.nova = nova_utils.nova_client(self.os_creds)
- self.keystone = keystone_utils.keystone_client(self.os_creds)
- self.glance = glance_utils.glance_client(self.os_creds)
- self.neutron = neutron_utils.neutron_client(self.os_creds)
+ self.nova = nova_utils.nova_client(
+ self.os_creds, self.os_session)
+ self.keystone = keystone_utils.keystone_client(
+ self.os_creds, self.os_session)
+ self.glance = glance_utils.glance_client(
+ self.os_creds, self.os_session)
+ self.neutron = neutron_utils.neutron_client(
+ self.os_creds, self.os_session)
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.keypair_priv_filepath = 'tmp/' + guid
@@ -315,7 +322,7 @@ class SettingsUtilsVmInstTests(OSComponentTestCase):
if os.path.isfile(self.test_file_local_path):
os.remove(self.test_file_local_path)
- # super(self.__class__, self).__clean__()
+ super(self.__class__, self).__clean__()
def test_derive_vm_inst_config(self):
"""
diff --git a/snaps/provisioning/tests/ansible_utils_tests.py b/snaps/provisioning/tests/ansible_utils_tests.py
index 851dd64..14fe8e9 100644
--- a/snaps/provisioning/tests/ansible_utils_tests.py
+++ b/snaps/provisioning/tests/ansible_utils_tests.py
@@ -58,7 +58,7 @@ class AnsibleProvisioningTests(OSIntegrationTestCase):
"""
super(self.__class__, self).__start__()
- self.nova = nova_utils.nova_client(self.os_creds)
+ self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
self.keypair_priv_filepath = 'tmp/' + guid