From 2922a3491a5987aa80f0612df44bd60ed22a0225 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Sat, 4 Sep 2021 23:03:17 +0900 Subject: [PATCH] QemuImgInfo: Fix inconsistent value format of encrypted The qemu-img info command shows the encrpyed field in different formats according to the output format. When the default human format is used the field can be 'yes' or None while when json format is used the same field can be True or False. This change ensures the corresponding attribute has the consistent format regardless of the output format used. Closes-Bug: #1942682 Change-Id: I949f07582a708114fdfba76f1a05aa3a3e5c4f40 --- oslo_utils/imageutils.py | 2 +- oslo_utils/tests/test_imageutils.py | 5 ++++- releasenotes/notes/bug-1942682-ea95d54b2587b32f.yaml | 6 ++++++ 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 releasenotes/notes/bug-1942682-ea95d54b2587b32f.yaml diff --git a/oslo_utils/imageutils.py b/oslo_utils/imageutils.py index 65292dc3..d764a7fb 100644 --- a/oslo_utils/imageutils.py +++ b/oslo_utils/imageutils.py @@ -63,7 +63,7 @@ class QemuImgInfo(object): self.cluster_size = details.get('cluster-size') self.disk_size = details.get('actual-size') self.snapshots = details.get('snapshots', []) - self.encrypted = details.get('encrypted') + self.encrypted = 'yes' if details.get('encrypted') else None self.format_specific = details.get('format-specific') else: if cmd_output is not None: diff --git a/oslo_utils/tests/test_imageutils.py b/oslo_utils/tests/test_imageutils.py index 63e0ee9c..6b25226a 100644 --- a/oslo_utils/tests/test_imageutils.py +++ b/oslo_utils/tests/test_imageutils.py @@ -238,7 +238,8 @@ class ImageUtilsJSONTestCase(test_base.BaseTestCase): "cluster-size": 65536, "format": "qcow2", "actual-size": 13168640, - "format-specific": {"data": {"foo": "bar"}} + "format-specific": {"data": {"foo": "bar"}}, + "encrypted": true }''' image_info = imageutils.QemuImgInfo(img_output, format='json') mock_deprecate.assert_not_called() @@ -248,6 +249,7 @@ class ImageUtilsJSONTestCase(test_base.BaseTestCase): self.assertEqual('qcow2', image_info.file_format) self.assertEqual(13168640, image_info.disk_size) self.assertEqual("bar", image_info.format_specific["data"]["foo"]) + self.assertEqual('yes', image_info.encrypted) @mock.patch("debtcollector.deprecate") def test_qemu_img_info_blank(self, mock_deprecate): @@ -260,3 +262,4 @@ class ImageUtilsJSONTestCase(test_base.BaseTestCase): self.assertIsNone(image_info.file_format) self.assertIsNone(image_info.disk_size) self.assertIsNone(image_info.format_specific) + self.assertIsNone(image_info.encrypted) diff --git a/releasenotes/notes/bug-1942682-ea95d54b2587b32f.yaml b/releasenotes/notes/bug-1942682-ea95d54b2587b32f.yaml new file mode 100644 index 00000000..b21d6b04 --- /dev/null +++ b/releasenotes/notes/bug-1942682-ea95d54b2587b32f.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + `bug #1942682 `_: + Fix inconsistent value of `QemuImgInfo.encrypted`. Now the attribute is + always `'yes'` or `None` regardless of the format(`human` or `json`) used.