Merge "Add backup export command"
This commit is contained in:
@@ -716,6 +716,18 @@ class Proxy(proxy.Proxy):
|
||||
"""
|
||||
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):
|
||||
"""Find a single backup
|
||||
|
||||
|
||||
@@ -164,6 +164,17 @@ class Backup(resource.Resource):
|
||||
exceptions.raise_from_response(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):
|
||||
"""Restore current backup to volume
|
||||
|
||||
|
||||
@@ -1433,6 +1433,18 @@ class Proxy(proxy.Proxy):
|
||||
backup = self._get_resource(_backup.Backup, backup)
|
||||
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):
|
||||
"""Update metadata for a backup
|
||||
|
||||
|
||||
@@ -187,6 +187,17 @@ class Backup(resource.Resource, metadata.MetadataMixin):
|
||||
exceptions.raise_from_response(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):
|
||||
"""Restore current backup to volume
|
||||
|
||||
|
||||
@@ -582,6 +582,21 @@ class BlockStorageCloudMixin(openstackcloud._OpenStackCloudMixin):
|
||||
|
||||
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
|
||||
def get_volume_backup(self, name_or_id, filters=None):
|
||||
"""Get a volume backup by name or ID.
|
||||
|
||||
@@ -147,6 +147,18 @@ class TestBackup(base.TestCase):
|
||||
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):
|
||||
sot = backup.Backup(**BACKUP)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user