Merge "Add backup export command"
This commit is contained in:
@@ -716,6 +716,18 @@ class Proxy(proxy.Proxy):
|
|||||||
"""
|
"""
|
||||||
return self._get(_backup.Backup, backup)
|
return self._get(_backup.Backup, backup)
|
||||||
|
|
||||||
|
def export_record(self, backup):
|
||||||
|
"""Get a backup
|
||||||
|
|
||||||
|
:param backup: The value can be the ID of a backup
|
||||||
|
or a :class:`~openstack.block_storage.v2.backup.Backup`
|
||||||
|
instance.
|
||||||
|
|
||||||
|
:returns: The backup export record fields
|
||||||
|
"""
|
||||||
|
backup = self._get_resource(_backup.Backup, backup)
|
||||||
|
return backup.export(self)
|
||||||
|
|
||||||
def find_backup(self, name_or_id, ignore_missing=True, *, details=True):
|
def find_backup(self, name_or_id, ignore_missing=True, *, details=True):
|
||||||
"""Find a single backup
|
"""Find a single backup
|
||||||
|
|
||||||
|
|||||||
@@ -164,6 +164,17 @@ class Backup(resource.Resource):
|
|||||||
exceptions.raise_from_response(resp)
|
exceptions.raise_from_response(resp)
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
def export(self, session):
|
||||||
|
"""Export the current backup
|
||||||
|
|
||||||
|
:param session: openstack session
|
||||||
|
:return: The backup export record fields
|
||||||
|
"""
|
||||||
|
url = utils.urljoin(self.base_path, self.id, "export_record")
|
||||||
|
resp = session.get(url)
|
||||||
|
exceptions.raise_from_response(resp)
|
||||||
|
return resp.json()
|
||||||
|
|
||||||
def restore(self, session, volume_id=None, name=None):
|
def restore(self, session, volume_id=None, name=None):
|
||||||
"""Restore current backup to volume
|
"""Restore current backup to volume
|
||||||
|
|
||||||
|
|||||||
@@ -1433,6 +1433,18 @@ class Proxy(proxy.Proxy):
|
|||||||
backup = self._get_resource(_backup.Backup, backup)
|
backup = self._get_resource(_backup.Backup, backup)
|
||||||
return backup.fetch_metadata(self)
|
return backup.fetch_metadata(self)
|
||||||
|
|
||||||
|
def export_record(self, backup):
|
||||||
|
"""Get a backup meatadata to export
|
||||||
|
|
||||||
|
:param backup: The value can be the ID of a backup
|
||||||
|
or a :class:`~openstack.block_storage.v2.backup.Backup`
|
||||||
|
instance.
|
||||||
|
|
||||||
|
:returns: The backup export record fields
|
||||||
|
"""
|
||||||
|
backup = self._get_resource(_backup.Backup, backup)
|
||||||
|
return backup.export(self)
|
||||||
|
|
||||||
def set_backup_metadata(self, backup, **metadata):
|
def set_backup_metadata(self, backup, **metadata):
|
||||||
"""Update metadata for a backup
|
"""Update metadata for a backup
|
||||||
|
|
||||||
|
|||||||
@@ -187,6 +187,17 @@ class Backup(resource.Resource, metadata.MetadataMixin):
|
|||||||
exceptions.raise_from_response(resp)
|
exceptions.raise_from_response(resp)
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
def export(self, session):
|
||||||
|
"""Export the current backup
|
||||||
|
|
||||||
|
:param session: openstack session
|
||||||
|
:return: The backup export record fields
|
||||||
|
"""
|
||||||
|
url = utils.urljoin(self.base_path, self.id, "export_record")
|
||||||
|
resp = session.get(url)
|
||||||
|
exceptions.raise_from_response(resp)
|
||||||
|
return resp
|
||||||
|
|
||||||
def restore(self, session, volume_id=None, name=None):
|
def restore(self, session, volume_id=None, name=None):
|
||||||
"""Restore current backup to volume
|
"""Restore current backup to volume
|
||||||
|
|
||||||
|
|||||||
@@ -582,6 +582,21 @@ class BlockStorageCloudMixin(openstackcloud._OpenStackCloudMixin):
|
|||||||
|
|
||||||
return backup
|
return backup
|
||||||
|
|
||||||
|
def export_volume_backup(self, backup_id):
|
||||||
|
"""Export a volume backup.
|
||||||
|
|
||||||
|
:param backup_id: the ID of the backup.
|
||||||
|
|
||||||
|
:returns: The backup export record fields
|
||||||
|
:raises: :class:`~openstack.exceptions.ResourceTimeout` if wait time
|
||||||
|
exceeded.
|
||||||
|
:raises: :class:`~openstack.exceptions.SDKException` on operation
|
||||||
|
error.
|
||||||
|
"""
|
||||||
|
payload = {'backup': backup_id}
|
||||||
|
|
||||||
|
return self.block_storage.export_record(**payload)
|
||||||
|
|
||||||
# TODO(stephenfin): Remove 'filters' in a future major version
|
# TODO(stephenfin): Remove 'filters' in a future major version
|
||||||
def get_volume_backup(self, name_or_id, filters=None):
|
def get_volume_backup(self, name_or_id, filters=None):
|
||||||
"""Get a volume backup by name or ID.
|
"""Get a volume backup by name or ID.
|
||||||
|
|||||||
@@ -147,6 +147,18 @@ class TestBackup(base.TestCase):
|
|||||||
params={},
|
params={},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_export(self):
|
||||||
|
sot = backup.Backup(**BACKUP)
|
||||||
|
|
||||||
|
create_response = mock.Mock()
|
||||||
|
create_response.status_code = 200
|
||||||
|
create_response.json.return_value = {}
|
||||||
|
create_response.headers = {}
|
||||||
|
self.sess.get.return_value = create_response
|
||||||
|
url = f'backups/{FAKE_ID}/export_record'
|
||||||
|
sot.export(self.sess)
|
||||||
|
self.sess.get.assert_called_with(url)
|
||||||
|
|
||||||
def test_restore(self):
|
def test_restore(self):
|
||||||
sot = backup.Backup(**BACKUP)
|
sot = backup.Backup(**BACKUP)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user