Skip to content

Commit 3361202

Browse files
committed
Merge branch 'yoga-fully-patched' into stackhpc/yoga
Change-Id: I8eebc1d6019047b5ab6f60e1057c0dd81c31cb6f
2 parents 186a1f6 + 28cac20 commit 3361202

File tree

8 files changed

+212
-52
lines changed

8 files changed

+212
-52
lines changed

.zuul.yaml

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,8 @@
213213
The regular tempest-integrated-storage job but with glance metadata injection
214214
post-run: playbooks/post-check-metadata-injection.yaml
215215
vars:
216+
configure_swap_size: 8192
217+
tempest_concurrency: 3
216218
zuul_copy_output:
217219
/etc/glance-remote: logs
218220
devstack_localrc:
@@ -236,6 +238,11 @@
236238
"glance_devstack_test":"doyouseeme?"
237239
image_conversion:
238240
output_format: raw
241+
test-config:
242+
"$TEMPEST_CONFIG":
243+
image:
244+
image_caching_enabled: True
245+
disk_formats: qcow2,ari,aki,vhd,vmdk,raw,ami,vdi,iso,vhdx
239246

240247
- job:
241248
name: glance-multistore-cinder-import
@@ -249,27 +256,6 @@
249256
CINDER_ENABLED_BACKENDS: lvm:lvmdriver-1,lvm:lvmdriver-2
250257
GLANCE_CINDER_DEFAULT_BACKEND: lvmdriver-1
251258

252-
- job:
253-
name: glance-multistore-cinder-import-fips
254-
parent: tempest-integrated-storage-import
255-
description: |
256-
The regular import workflow job to test with multiple cinder stores with
257-
fips enabled
258-
nodeset: devstack-single-node-centos-8-stream
259-
pre-run: playbooks/enable-fips.yaml
260-
vars:
261-
configure_swap_size: 4096
262-
devstack_localrc:
263-
USE_CINDER_FOR_GLANCE: True
264-
GLANCE_ENABLE_MULTIPLE_STORES: True
265-
CINDER_ENABLED_BACKENDS: lvm:lvmdriver-1,lvm:lvmdriver-2
266-
GLANCE_CINDER_DEFAULT_BACKEND: lvmdriver-1
267-
devstack_local_conf:
268-
test-config:
269-
"$TEMPEST_CONFIG":
270-
validation:
271-
ssh_key_type: 'ecdsa'
272-
273259
- job:
274260
name: tempest-integrated-storage-import-standalone
275261
parent: tempest-integrated-storage-import
@@ -306,7 +292,6 @@
306292
- release-notes-jobs-python3
307293
check:
308294
jobs:
309-
- openstack-tox-functional-py36-fips
310295
- openstack-tox-functional-py39
311296
- glance-tox-functional-py39-rbac-defaults
312297
- glance-ceph-thin-provisioning:
@@ -331,16 +316,18 @@
331316
irrelevant-files: *tempest-irrelevant-files
332317
- glance-multistore-cinder-import:
333318
irrelevant-files: *tempest-irrelevant-files
334-
- glance-multistore-cinder-import-fips:
335-
voting: false
336-
irrelevant-files: *tempest-irrelevant-files
337319
- grenade:
338320
irrelevant-files: *tempest-irrelevant-files
339321
- tempest-ipv6-only:
340322
irrelevant-files: *tempest-irrelevant-files
341323
- nova-ceph-multistore:
342324
irrelevant-files: *tempest-irrelevant-files
343-
- glance-secure-rbac-protection-functional
325+
- glance-secure-rbac-protection-functional:
326+
required-projects:
327+
- name: openstack/glance
328+
override-checkout: yoga-last
329+
- name: openstack/glance-tempest-plugin
330+
override-checkout: yoga-last
344331

345332
gate:
346333
jobs:
@@ -358,7 +345,12 @@
358345
irrelevant-files: *tempest-irrelevant-files
359346
- nova-ceph-multistore:
360347
irrelevant-files: *tempest-irrelevant-files
361-
- glance-secure-rbac-protection-functional
348+
- glance-secure-rbac-protection-functional:
349+
required-projects:
350+
- name: openstack/glance
351+
override-checkout: yoga-last
352+
- name: openstack/glance-tempest-plugin
353+
override-checkout: yoga-last
362354
experimental:
363355
jobs:
364356
- glance-tox-py39-glance_store-tips

glance/async_/flows/api_image_import.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,10 @@ def image_locations(self):
207207
# should have moderated access like all the other things here.
208208
return copy.deepcopy(self._image.locations)
209209

210+
@property
211+
def image_disk_format(self):
212+
return self._image.disk_format
213+
210214
@property
211215
def image_status(self):
212216
return self._image.status

glance/async_/flows/plugins/image_conversion.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,7 @@ def _execute(self, action, file_path, **kwargs):
8989
'target': target_format}
9090
self.dest_path = dest_path
9191

92-
# Backport fixup due to lack of
93-
# Ic51c5fd87caf04d38aeaf758ad2d0e2f28098e4d in Yoga:
94-
#source_format = action.image_disk_format
95-
source_format = action._image.disk_format
92+
source_format = action.image_disk_format
9693
inspector_cls = format_inspector.get_inspector(source_format)
9794
if not inspector_cls:
9895
# We cannot convert from disk_format types that qemu-img doesn't

glance/common/format_inspector.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,7 @@ class VHDXInspector(FileInspector):
488488
"""
489489
METAREGION = '8B7CA206-4790-4B9A-B8FE-575F050F886E'
490490
VIRTUAL_DISK_SIZE = '2FA54224-CD1B-4876-B211-5DBED83BF4B8'
491+
VHDX_METADATA_TABLE_MAX_SIZE = 32 * 2048 # From qemu
491492

492493
def __init__(self, *a, **k):
493494
super(VHDXInspector, self).__init__(*a, **k)
@@ -602,6 +603,8 @@ def _find_meta_entry(self, desired_guid):
602603
item_offset, item_length, _reserved = struct.unpack(
603604
'<III',
604605
meta_buffer[entry_offset + 16:entry_offset + 28])
606+
item_length = min(item_length,
607+
self.VHDX_METADATA_TABLE_MAX_SIZE)
605608
self.region('metadata').length = len(meta_buffer)
606609
self._log.debug('Found entry at offset %x', item_offset)
607610
# Metadata item offset is from the beginning of the metadata
@@ -652,7 +655,7 @@ def __str__(self):
652655
#
653656
# https://www.vmware.com/app/vmdk/?src=vmdk
654657
class VMDKInspector(FileInspector):
655-
"""vmware VMDK format (monolithicSparse variant only)
658+
"""vmware VMDK format (monolithicSparse and streamOptimized variants only)
656659
657660
This needs to store the 512 byte header and the descriptor region
658661
which should be just after that. The descriptor region is some
@@ -683,7 +686,6 @@ def post_process(self):
683686

684687
if sig != b'KDMV':
685688
raise ImageFormatError('Signature KDMV not found: %r' % sig)
686-
return
687689

688690
if ver not in (1, 2, 3):
689691
raise ImageFormatError('Unsupported format version %i' % ver)
@@ -693,9 +695,18 @@ def post_process(self):
693695
# header, which we cannot support since we stream.
694696
raise ImageFormatError('Unsupported VMDK footer')
695697

698+
# Since we parse both desc_sec and desc_num (the location of the
699+
# VMDK's descriptor, expressed in 512 bytes sectors) we enforce a
700+
# check on the bounds to create a reasonable CaptureRegion. This
701+
# is similar to how it's done in qemu.
702+
desc_offset = desc_sec * 512
703+
desc_size = min(desc_num * 512, self.DESC_MAX_SIZE)
704+
if desc_offset != self.DESC_OFFSET:
705+
raise ImageFormatError("Wrong descriptor location")
706+
696707
if not self.has_region('descriptor'):
697708
self.new_region('descriptor', CaptureRegion(
698-
desc_sec * 512, desc_num * 512))
709+
desc_offset, desc_size))
699710

700711
@property
701712
def format_match(self):
@@ -721,7 +732,7 @@ def virtual_size(self):
721732
vmdktype = descriptor[type_idx:type_end]
722733
else:
723734
vmdktype = b'formatnotfound'
724-
if vmdktype != b'monolithicSparse':
735+
if vmdktype not in (b'monolithicSparse', b'streamOptimized'):
725736
LOG.warning('Unsupported VMDK format %s', vmdktype)
726737
return 0
727738

0 commit comments

Comments
 (0)