Skip to content

Commit a2acb31

Browse files
kk7dsElod Illes
authored andcommitted
Fix vmdk_allowed_types checking
This restores the vmdk_allowed_types checking in create_image() that was unintentionally lost by tightening the qemu-type-matches-glance code in the fetch patch recently. Since we are still detecting the format of base images without metadata, we would have treated a vmdk file that claims to be raw as raw in fetch, but then read it like a vmdk once it was used as a base image for something else. Conflicts: nova/tests/unit/virt/libvirt/test_utils.py NOTE(elod.illes): conflicts are due to encryption support adding patch I5d6d2a7b03b5ace0826af80c4004de852579ff12 was introduced in zed. Change-Id: I07b332a7edb814f6a91661651d9d24bfd6651ae7 Related-Bug: #2059809 (cherry picked from commit 08be7b2) (cherry picked from commit 11301e7) (cherry picked from commit 70a435f) (cherry picked from commit f732f84)
1 parent 303c2c9 commit a2acb31

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

nova/tests/unit/virt/libvirt/test_utils.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,11 @@ def _test_create_image(
117117
else:
118118
backing_info = {}
119119
backing_backing_file = backing_info.pop('backing_file', None)
120+
backing_fmt = backing_info.pop('backing_fmt',
121+
mock.sentinel.backing_fmt)
120122

121123
mock_info.return_value = mock.Mock(
122-
file_format=mock.sentinel.backing_fmt,
124+
file_format=backing_fmt,
123125
cluster_size=mock.sentinel.cluster_size,
124126
backing_file=backing_backing_file,
125127
format_specific=backing_info,
@@ -139,7 +141,7 @@ def _test_create_image(
139141
cow_opts = [
140142
'-o',
141143
f'backing_file={backing_file},'
142-
f'backing_fmt={mock.sentinel.backing_fmt},'
144+
f'backing_fmt={backing_fmt},'
143145
f'cluster_size={mock.sentinel.cluster_size}',
144146
]
145147

@@ -193,6 +195,25 @@ def test_create_image_size_none(self):
193195
backing_file=mock.sentinel.backing_file,
194196
)
195197

198+
def test_create_image_vmdk(self):
199+
self._test_create_image(
200+
'/some/vmdk', 'vmdk', '1234567891234',
201+
backing_file={'file': mock.sentinel.backing_file,
202+
'backing_fmt': 'vmdk',
203+
'backing_file': None,
204+
'data': {'create-type': 'monolithicSparse'}}
205+
)
206+
207+
def test_create_image_vmdk_invalid_type(self):
208+
self.assertRaises(exception.ImageUnacceptable,
209+
self._test_create_image,
210+
'/some/vmdk', 'vmdk', '1234567891234',
211+
backing_file={'file': mock.sentinel.backing_file,
212+
'backing_fmt': 'vmdk',
213+
'backing_file': None,
214+
'data': {'create-type': 'monolithicFlat'}}
215+
)
216+
196217
@ddt.unpack
197218
@ddt.data({'fs_type': 'some_fs_type',
198219
'default_eph_format': None,

nova/virt/libvirt/utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ def create_image(
148148
reason=_('Base image failed safety check'))
149149

150150
base_details = images.qemu_img_info(backing_file)
151+
if base_details.file_format == 'vmdk':
152+
images.check_vmdk_image('base', base_details)
151153
if base_details.backing_file is not None:
152154
LOG.warning('Base image %s failed safety check', backing_file)
153155
raise exception.InvalidDiskInfo(

0 commit comments

Comments
 (0)