Skip to content

Commit f732f84

Browse files
kk7dsgibizer
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. Change-Id: I07b332a7edb814f6a91661651d9d24bfd6651ae7 Related-Bug: #2059809 (cherry picked from commit 08be7b2) (cherry picked from commit 11301e7) (cherry picked from commit 70a435f)
1 parent 9e10ac2 commit f732f84

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
@@ -119,9 +119,11 @@ def _test_create_image(
119119
else:
120120
backing_info = {}
121121
backing_backing_file = backing_info.pop('backing_file', None)
122+
backing_fmt = backing_info.pop('backing_fmt',
123+
mock.sentinel.backing_fmt)
122124

123125
mock_info.return_value = mock.Mock(
124-
file_format=mock.sentinel.backing_fmt,
126+
file_format=backing_fmt,
125127
cluster_size=mock.sentinel.cluster_size,
126128
backing_file=backing_backing_file,
127129
format_specific=backing_info,
@@ -144,7 +146,7 @@ def _test_create_image(
144146
cow_opts = [
145147
'-o',
146148
f'backing_file={backing_file},'
147-
f'backing_fmt={mock.sentinel.backing_fmt},'
149+
f'backing_fmt={backing_fmt},'
148150
f'cluster_size={mock.sentinel.cluster_size}',
149151
]
150152

@@ -221,6 +223,25 @@ def test_create_image_size_none(self):
221223
backing_file=mock.sentinel.backing_file,
222224
)
223225

226+
def test_create_image_vmdk(self):
227+
self._test_create_image(
228+
'/some/vmdk', 'vmdk', '1234567891234',
229+
backing_file={'file': mock.sentinel.backing_file,
230+
'backing_fmt': 'vmdk',
231+
'backing_file': None,
232+
'data': {'create-type': 'monolithicSparse'}}
233+
)
234+
235+
def test_create_image_vmdk_invalid_type(self):
236+
self.assertRaises(exception.ImageUnacceptable,
237+
self._test_create_image,
238+
'/some/vmdk', 'vmdk', '1234567891234',
239+
backing_file={'file': mock.sentinel.backing_file,
240+
'backing_fmt': 'vmdk',
241+
'backing_file': None,
242+
'data': {'create-type': 'monolithicFlat'}}
243+
)
244+
224245
def test_create_image_encryption(self):
225246
encryption = {
226247
'secret': 'a_secret',

nova/virt/libvirt/utils.py

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

165165
base_details = images.qemu_img_info(backing_file)
166+
if base_details.file_format == 'vmdk':
167+
images.check_vmdk_image('base', base_details)
166168
if base_details.backing_file is not None:
167169
LOG.warning('Base image %s failed safety check', backing_file)
168170
raise exception.InvalidDiskInfo(

0 commit comments

Comments
 (0)