Merge "Add support for creating/deleting volumes"

This commit is contained in:
Jenkins 2015-02-11 16:49:38 +00:00 committed by Gerrit Code Review
commit 36b32f51f6

View File

@ -551,6 +551,76 @@ class OpenStackCloud(object):
else:
return None
def create_volume(self, wait=True, timeout=None, **volkwargs):
"""Create a volume.
:param wait: If true, waits for volume to be created.
:param timeout: Seconds to wait for volume creation. None is forever.
:param volkwargs: Keyword arguments as expected for cinder client.
:returns: The created volume object.
:raises: OpenStackCloudTimeout if wait time exceeded.
:raises: OpenStackCloudException on operation error.
"""
cinder = self.cinder_client
try:
volume = cinder.volumes.create(**volkwargs)
except Exception as e:
self.log.debug("Volume creation failed", exc_info=True)
raise OpenStackCloudException(
"Error in creating volume: %s" % e.message)
if volume.status == 'error':
raise OpenStackCloudException("Error in creating volume")
if wait:
vol_id = volume.id
for count in _iterate_timeout(
timeout,
"Timeout waiting for the volume to be available."):
volume = self.get_volume(vol_id, cache=False, error=False)
if not volume:
continue
if volume.status == 'available':
return volume
if volume.status == 'error':
raise OpenStackCloudException(
"Error in creating volume, please check logs")
def delete_volume(self, name_or_id=None, wait=True, timeout=None):
"""Delete a volume.
:param name_or_id: Name or unique ID of the volume.
:param wait: If true, waits for volume to be deleted.
:param timeout: Seconds to wait for volume deletion. None is forever.
:raises: OpenStackCloudTimeout if wait time exceeded.
:raises: OpenStackCloudException on operation error.
"""
cinder = self.cinder_client
volume = self.get_volume(name_or_id, cache=False)
try:
cinder.volumes.delete(volume.id)
except Exception as e:
self.log.debug("Volume deletion failed", exc_info=True)
raise OpenStackCloudException(
"Error in deleting volume: %s" % e.message)
if wait:
for count in _iterate_timeout(
timeout,
"Timeout waiting for the volume to be deleted."):
if not self.volume_exists(volume.id):
return
def _get_volumes_from_cloud(self):
try:
return self.cinder_client.volumes.list()
@ -780,15 +850,6 @@ class OpenStackCloud(object):
if not server:
return
def delete_volume(self, name_or_id, wait=False, timeout=180):
volume = self.get_volume(name_or_id)
for count in _iterate_timeout(
timeout,
"Timed out waiting for server to get deleted."):
if self.volume_exists(volume.id, cache=False):
return
def get_container(self, name, skip_cache=False):
if skip_cache or name not in self._container_cache:
try: