Merge "Drop swift check for volume backup"
This commit is contained in:
@@ -16,7 +16,6 @@ from openstack.block_storage.v2 import snapshot as _snapshot
|
|||||||
from openstack.block_storage.v2 import stats as _stats
|
from openstack.block_storage.v2 import stats as _stats
|
||||||
from openstack.block_storage.v2 import type as _type
|
from openstack.block_storage.v2 import type as _type
|
||||||
from openstack.block_storage.v2 import volume as _volume
|
from openstack.block_storage.v2 import volume as _volume
|
||||||
from openstack import exceptions
|
|
||||||
from openstack import resource
|
from openstack import resource
|
||||||
|
|
||||||
|
|
||||||
@@ -231,10 +230,6 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
|
|
||||||
:returns: A generator of backup objects.
|
:returns: A generator of backup objects.
|
||||||
"""
|
"""
|
||||||
if not self._connection.has_service('object-store'):
|
|
||||||
raise exceptions.SDKException(
|
|
||||||
'Object-store service is required for block-store backups'
|
|
||||||
)
|
|
||||||
base_path = '/backups/detail' if details else None
|
base_path = '/backups/detail' if details else None
|
||||||
return self._list(_backup.Backup, base_path=base_path, **query)
|
return self._list(_backup.Backup, base_path=base_path, **query)
|
||||||
|
|
||||||
@@ -248,10 +243,6 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
:returns: Backup instance
|
:returns: Backup instance
|
||||||
:rtype: :class:`~openstack.block_storage.v2.backup.Backup`
|
:rtype: :class:`~openstack.block_storage.v2.backup.Backup`
|
||||||
"""
|
"""
|
||||||
if not self._connection.has_service('object-store'):
|
|
||||||
raise exceptions.SDKException(
|
|
||||||
'Object-store service is required for block-store backups'
|
|
||||||
)
|
|
||||||
return self._get(_backup.Backup, backup)
|
return self._get(_backup.Backup, backup)
|
||||||
|
|
||||||
def create_backup(self, **attrs):
|
def create_backup(self, **attrs):
|
||||||
@@ -264,10 +255,6 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
:returns: The results of Backup creation
|
:returns: The results of Backup creation
|
||||||
:rtype: :class:`~openstack.block_storage.v2.backup.Backup`
|
:rtype: :class:`~openstack.block_storage.v2.backup.Backup`
|
||||||
"""
|
"""
|
||||||
if not self._connection.has_service('object-store'):
|
|
||||||
raise exceptions.SDKException(
|
|
||||||
'Object-store service is required for block-store backups'
|
|
||||||
)
|
|
||||||
return self._create(_backup.Backup, **attrs)
|
return self._create(_backup.Backup, **attrs)
|
||||||
|
|
||||||
def delete_backup(self, backup, ignore_missing=True):
|
def delete_backup(self, backup, ignore_missing=True):
|
||||||
@@ -283,10 +270,6 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
|
|
||||||
:returns: ``None``
|
:returns: ``None``
|
||||||
"""
|
"""
|
||||||
if not self._connection.has_service('object-store'):
|
|
||||||
raise exceptions.SDKException(
|
|
||||||
'Object-store service is required for block-store backups'
|
|
||||||
)
|
|
||||||
self._delete(_backup.Backup, backup,
|
self._delete(_backup.Backup, backup,
|
||||||
ignore_missing=ignore_missing)
|
ignore_missing=ignore_missing)
|
||||||
|
|
||||||
@@ -301,10 +284,6 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
:returns: Updated backup instance
|
:returns: Updated backup instance
|
||||||
:rtype: :class:`~openstack.block_storage.v2.backup.Backup`
|
:rtype: :class:`~openstack.block_storage.v2.backup.Backup`
|
||||||
"""
|
"""
|
||||||
if not self._connection.has_service('object-store'):
|
|
||||||
raise exceptions.SDKException(
|
|
||||||
'Object-store service is required for block-store backups'
|
|
||||||
)
|
|
||||||
backup = self._get_resource(_backup.Backup, backup)
|
backup = self._get_resource(_backup.Backup, backup)
|
||||||
return backup.restore(self, volume_id=volume_id, name=name)
|
return backup.restore(self, volume_id=volume_id, name=name)
|
||||||
|
|
||||||
|
@@ -383,10 +383,6 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
|
|
||||||
:returns: A generator of backup objects.
|
:returns: A generator of backup objects.
|
||||||
"""
|
"""
|
||||||
if not self._connection.has_service('object-store'):
|
|
||||||
raise exceptions.SDKException(
|
|
||||||
'Object-store service is required for block-store backups'
|
|
||||||
)
|
|
||||||
base_path = '/backups/detail' if details else None
|
base_path = '/backups/detail' if details else None
|
||||||
return self._list(_backup.Backup, base_path=base_path, **query)
|
return self._list(_backup.Backup, base_path=base_path, **query)
|
||||||
|
|
||||||
@@ -400,10 +396,6 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
:returns: Backup instance
|
:returns: Backup instance
|
||||||
:rtype: :class:`~openstack.block_storage.v3.backup.Backup`
|
:rtype: :class:`~openstack.block_storage.v3.backup.Backup`
|
||||||
"""
|
"""
|
||||||
if not self._connection.has_service('object-store'):
|
|
||||||
raise exceptions.SDKException(
|
|
||||||
'Object-store service is required for block-store backups'
|
|
||||||
)
|
|
||||||
return self._get(_backup.Backup, backup)
|
return self._get(_backup.Backup, backup)
|
||||||
|
|
||||||
def find_backup(self, name_or_id, ignore_missing=True, **attrs):
|
def find_backup(self, name_or_id, ignore_missing=True, **attrs):
|
||||||
@@ -418,10 +410,6 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
:raises: :class:`~openstack.exceptions.ResourceNotFound`
|
:raises: :class:`~openstack.exceptions.ResourceNotFound`
|
||||||
when no resource can be found.
|
when no resource can be found.
|
||||||
"""
|
"""
|
||||||
if not self._connection.has_service('object-store'):
|
|
||||||
raise exceptions.SDKException(
|
|
||||||
'Object-store service is required for block-store backups'
|
|
||||||
)
|
|
||||||
return self._find(_backup.Backup, name_or_id,
|
return self._find(_backup.Backup, name_or_id,
|
||||||
ignore_missing=ignore_missing)
|
ignore_missing=ignore_missing)
|
||||||
|
|
||||||
@@ -435,10 +423,6 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
:returns: The results of Backup creation
|
:returns: The results of Backup creation
|
||||||
:rtype: :class:`~openstack.block_storage.v3.backup.Backup`
|
:rtype: :class:`~openstack.block_storage.v3.backup.Backup`
|
||||||
"""
|
"""
|
||||||
if not self._connection.has_service('object-store'):
|
|
||||||
raise exceptions.SDKException(
|
|
||||||
'Object-store service is required for block-store backups'
|
|
||||||
)
|
|
||||||
return self._create(_backup.Backup, **attrs)
|
return self._create(_backup.Backup, **attrs)
|
||||||
|
|
||||||
def delete_backup(self, backup, ignore_missing=True):
|
def delete_backup(self, backup, ignore_missing=True):
|
||||||
@@ -454,10 +438,6 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
|
|
||||||
:returns: ``None``
|
:returns: ``None``
|
||||||
"""
|
"""
|
||||||
if not self._connection.has_service('object-store'):
|
|
||||||
raise exceptions.SDKException(
|
|
||||||
'Object-store service is required for block-store backups'
|
|
||||||
)
|
|
||||||
self._delete(_backup.Backup, backup,
|
self._delete(_backup.Backup, backup,
|
||||||
ignore_missing=ignore_missing)
|
ignore_missing=ignore_missing)
|
||||||
|
|
||||||
@@ -472,10 +452,6 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
:returns: Updated backup instance
|
:returns: Updated backup instance
|
||||||
:rtype: :class:`~openstack.block_storage.v3.backup.Backup`
|
:rtype: :class:`~openstack.block_storage.v3.backup.Backup`
|
||||||
"""
|
"""
|
||||||
if not self._connection.has_service('object-store'):
|
|
||||||
raise exceptions.SDKException(
|
|
||||||
'Object-store service is required for block-store backups'
|
|
||||||
)
|
|
||||||
backup = self._get_resource(_backup.Backup, backup)
|
backup = self._get_resource(_backup.Backup, backup)
|
||||||
return backup.restore(self, volume_id=volume_id, name=name)
|
return backup.restore(self, volume_id=volume_id, name=name)
|
||||||
|
|
||||||
@@ -530,29 +506,26 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
def _service_cleanup(self, dry_run=True, client_status_queue=None,
|
def _service_cleanup(self, dry_run=True, client_status_queue=None,
|
||||||
identified_resources=None,
|
identified_resources=None,
|
||||||
filters=None, resource_evaluation_fn=None):
|
filters=None, resource_evaluation_fn=None):
|
||||||
if self._connection.has_service('object-store'):
|
backups = []
|
||||||
# Volume backups require object-store to be available, even for
|
for obj in self.backups(details=False):
|
||||||
# listing
|
need_delete = self._service_cleanup_del_res(
|
||||||
backups = []
|
self.delete_backup,
|
||||||
for obj in self.backups(details=False):
|
obj,
|
||||||
need_delete = self._service_cleanup_del_res(
|
dry_run=dry_run,
|
||||||
self.delete_backup,
|
client_status_queue=client_status_queue,
|
||||||
obj,
|
identified_resources=identified_resources,
|
||||||
dry_run=dry_run,
|
filters=filters,
|
||||||
client_status_queue=client_status_queue,
|
resource_evaluation_fn=resource_evaluation_fn)
|
||||||
identified_resources=identified_resources,
|
if not dry_run and need_delete:
|
||||||
filters=filters,
|
backups.append(obj)
|
||||||
resource_evaluation_fn=resource_evaluation_fn)
|
|
||||||
if not dry_run and need_delete:
|
|
||||||
backups.append(obj)
|
|
||||||
|
|
||||||
# Before deleting snapshots need to wait for backups to be deleted
|
# Before deleting snapshots need to wait for backups to be deleted
|
||||||
for obj in backups:
|
for obj in backups:
|
||||||
try:
|
try:
|
||||||
self.wait_for_delete(obj)
|
self.wait_for_delete(obj)
|
||||||
except exceptions.SDKException:
|
except exceptions.SDKException:
|
||||||
# Well, did our best, still try further
|
# Well, did our best, still try further
|
||||||
pass
|
pass
|
||||||
|
|
||||||
snapshots = []
|
snapshots = []
|
||||||
for obj in self.snapshots(details=False):
|
for obj in self.snapshots(details=False):
|
||||||
|
@@ -17,7 +17,6 @@ from openstack.block_storage.v2 import snapshot
|
|||||||
from openstack.block_storage.v2 import stats
|
from openstack.block_storage.v2 import stats
|
||||||
from openstack.block_storage.v2 import type
|
from openstack.block_storage.v2 import type
|
||||||
from openstack.block_storage.v2 import volume
|
from openstack.block_storage.v2 import volume
|
||||||
from openstack import exceptions
|
|
||||||
from openstack.tests.unit import test_proxy_base
|
from openstack.tests.unit import test_proxy_base
|
||||||
|
|
||||||
|
|
||||||
@@ -150,16 +149,3 @@ class TestVolumeProxy(test_proxy_base.TestProxyBase):
|
|||||||
expected_args=[self.proxy],
|
expected_args=[self.proxy],
|
||||||
expected_kwargs={'volume_id': 'vol_id', 'name': 'name'}
|
expected_kwargs={'volume_id': 'vol_id', 'name': 'name'}
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_backup_no_swift(self):
|
|
||||||
"""Ensure proxy method raises exception if swift is not available
|
|
||||||
"""
|
|
||||||
# NOTE: mock has_service
|
|
||||||
self.proxy._connection = mock.Mock()
|
|
||||||
self.proxy._connection.has_service = mock.Mock(return_value=False)
|
|
||||||
self.assertRaises(
|
|
||||||
exceptions.SDKException,
|
|
||||||
self.proxy.restore_backup,
|
|
||||||
'backup',
|
|
||||||
'volume_id',
|
|
||||||
'name')
|
|
||||||
|
@@ -17,7 +17,6 @@ from openstack.block_storage.v3 import snapshot
|
|||||||
from openstack.block_storage.v3 import stats
|
from openstack.block_storage.v3 import stats
|
||||||
from openstack.block_storage.v3 import type
|
from openstack.block_storage.v3 import type
|
||||||
from openstack.block_storage.v3 import volume
|
from openstack.block_storage.v3 import volume
|
||||||
from openstack import exceptions
|
|
||||||
from openstack.tests.unit import test_proxy_base
|
from openstack.tests.unit import test_proxy_base
|
||||||
|
|
||||||
|
|
||||||
@@ -197,16 +196,3 @@ class TestVolumeProxy(test_proxy_base.TestProxyBase):
|
|||||||
expected_args=[self.proxy],
|
expected_args=[self.proxy],
|
||||||
expected_kwargs={'volume_id': 'vol_id', 'name': 'name'}
|
expected_kwargs={'volume_id': 'vol_id', 'name': 'name'}
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_backup_no_swift(self):
|
|
||||||
"""Ensure proxy method raises exception if swift is not available
|
|
||||||
"""
|
|
||||||
# NOTE: mock has_service
|
|
||||||
self.proxy._connection = mock.Mock()
|
|
||||||
self.proxy._connection.has_service = mock.Mock(return_value=False)
|
|
||||||
self.assertRaises(
|
|
||||||
exceptions.SDKException,
|
|
||||||
self.proxy.restore_backup,
|
|
||||||
'backup',
|
|
||||||
'volume_id',
|
|
||||||
'name')
|
|
||||||
|
Reference in New Issue
Block a user