Closing keystone sessions after done with them.
[snaps.git] / snaps / openstack / openstack_creator.py
index cf741f3..9bd099b 100644 (file)
@@ -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')