Fix backup metadata management and update

max_microversion on the backup resource was missed causing no
microversion to be enabled at all for it. This leads to server refusing
managing metadata of the backup. Fix this and add corresponding test
with attempting to set metadata.
Since this change sets microversion we also need to ensure we add all
attributes of this version - encryption_key_id is the one added last.

Change-Id: I2c161ca30524bf230104958b8afdd8cf0b682a89
This commit is contained in:
Artem Goncharov
2022-11-04 11:36:31 +01:00
parent 57fbb72e32
commit 117642f1f9
3 changed files with 25 additions and 3 deletions

View File

@@ -50,6 +50,8 @@ class Backup(resource.Resource):
data_timestamp = resource.Body('data_timestamp')
#: backup description
description = resource.Body("description")
#: The UUID of the encryption key. Only included for encrypted volumes.
encryption_key_id = resource.Body("encryption_key_id")
#: Backup fail reason
fail_reason = resource.Body("fail_reason")
#: Force backup
@@ -86,6 +88,8 @@ class Backup(resource.Resource):
#: The UUID of the volume.
volume_id = resource.Body("volume_id")
_max_microversion = "3.64"
def create(self, session, prepend_key=True, base_path=None, **params):
"""Create a remote resource based on this instance.

View File

@@ -69,6 +69,21 @@ class TestBackup(base.BaseBlockStorageTest):
self.assertEqual(self.BACKUP_NAME, sot.name)
self.assertEqual(False, sot.is_incremental)
def test_create_metadata(self):
metadata_backup = self.user_cloud.block_storage.create_backup(
name=self.getUniqueString(),
volume_id=self.VOLUME_ID,
metadata=dict(foo="bar"))
self.user_cloud.block_storage.wait_for_status(
metadata_backup,
status='available',
failures=['error'],
interval=5,
wait=self._wait_for_timeout)
self.user_cloud.block_storage.delete_backup(
metadata_backup.id,
ignore_missing=False)
def test_create_incremental(self):
incremental_backup = self.user_cloud.block_storage.create_backup(
name=self.getUniqueString(),

View File

@@ -27,6 +27,7 @@ BACKUP = {
"created_at": "2018-04-02T10:35:27.000000",
"updated_at": "2018-04-03T10:35:27.000000",
"description": 'description',
"encryption_key_id": "fake_encry_id",
"fail_reason": 'fail reason',
"id": FAKE_ID,
"name": "backup001",
@@ -55,7 +56,7 @@ class TestBackup(base.TestCase):
self.sess = mock.Mock(spec=adapter.Adapter)
self.sess.get = mock.Mock()
self.sess.post = mock.Mock(return_value=self.resp)
self.sess.default_microversion = None
self.sess.default_microversion = "3.64"
def test_basic(self):
sot = backup.Backup(BACKUP)
@@ -67,6 +68,7 @@ class TestBackup(base.TestCase):
self.assertTrue(sot.allow_list)
self.assertTrue(sot.allow_get)
self.assertTrue(sot.allow_fetch)
self.assertIsNotNone(sot._max_microversion)
self.assertDictEqual(
{
@@ -104,6 +106,7 @@ class TestBackup(base.TestCase):
sot.project_id)
self.assertEqual(BACKUP['metadata'], sot.metadata)
self.assertEqual(BACKUP['user_id'], sot.user_id)
self.assertEqual(BACKUP['encryption_key_id'], sot.encryption_key_id)
def test_create_incremental(self):
sot = backup.Backup(is_incremental=True)
@@ -124,7 +127,7 @@ class TestBackup(base.TestCase):
'incremental': True,
}
},
microversion=None,
microversion="3.64",
params={}
)
@@ -137,7 +140,7 @@ class TestBackup(base.TestCase):
'incremental': False,
}
},
microversion=None,
microversion="3.64",
params={}
)