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={} )