From 117642f1f9c66a0b0a9d742f967f416817f7d87e Mon Sep 17 00:00:00 2001 From: Artem Goncharov Date: Fri, 4 Nov 2022 11:36:31 +0100 Subject: [PATCH] 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 --- openstack/block_storage/v3/backup.py | 4 ++++ .../functional/block_storage/v3/test_backup.py | 15 +++++++++++++++ .../tests/unit/block_storage/v3/test_backup.py | 9 ++++++--- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/openstack/block_storage/v3/backup.py b/openstack/block_storage/v3/backup.py index 64987183a..9131e5914 100644 --- a/openstack/block_storage/v3/backup.py +++ b/openstack/block_storage/v3/backup.py @@ -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. diff --git a/openstack/tests/functional/block_storage/v3/test_backup.py b/openstack/tests/functional/block_storage/v3/test_backup.py index bb7708888..2849419e5 100644 --- a/openstack/tests/functional/block_storage/v3/test_backup.py +++ b/openstack/tests/functional/block_storage/v3/test_backup.py @@ -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(), diff --git a/openstack/tests/unit/block_storage/v3/test_backup.py b/openstack/tests/unit/block_storage/v3/test_backup.py index f2da69e5b..9e7174d8d 100644 --- a/openstack/tests/unit/block_storage/v3/test_backup.py +++ b/openstack/tests/unit/block_storage/v3/test_backup.py @@ -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={} )