Remove AMI snapshot format special case

Note that this includes seemingly-unrelated test changes because we
were actually skipping the snapshot_running test for libvirt, which
has been a bug for years. In that test case, when we went to look
for image_meta.disk_format, that attribute was not set on the o.vo
object, which raised a NotImplementedError. That error is also checked
by the test to skip the test for drivers that do not support snapshot,
which meant that for libvirt, we haven't been running that case
beyond the point at which we create snapshot metadata and trip that
exception. Thus, once removing that, there are other mocks not in
place that are required for the test to actually run. So, this adds
mocks for qemu_img_info() calls that actually try to read the file on
disk, as well as the privsep chown() that attempts to run after.

Change-Id: Ie731045629f0899840a4680d21793a16ade9b98e
This commit is contained in:
Dan Smith 2024-07-24 09:01:31 -07:00
parent df39222b10
commit d5a631ba77
3 changed files with 13 additions and 9 deletions

View File

@ -9462,7 +9462,7 @@ class LibvirtConnTestCase(test.NoDBTestCase,
def test_create_snapshot_metadata(self):
base = objects.ImageMeta.from_dict(
{'disk_format': 'raw'})
{'disk_format': 'qcow2'})
instance_data = {'kernel_id': 'kernel',
'project_id': 'prj_id',
'ramdisk_id': 'ram_id',
@ -9494,10 +9494,12 @@ class LibvirtConnTestCase(test.NoDBTestCase,
{'disk_format': 'ami',
'container_format': 'test_container'})
expected['properties']['os_type'] = instance['os_type']
expected['disk_format'] = base.disk_format
# The disk_format of the snapshot should be the *actual* format of the
# thing we upload, regardless of what type of image we booted from.
expected['disk_format'] = img_fmt
expected['container_format'] = base.container_format
ret = drvr._create_snapshot_metadata(base, instance, img_fmt, snp_name)
self.assertEqual(ret, expected)
self.assertEqual(expected, ret)
def test_get_volume_driver(self):
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
@ -29789,7 +29791,8 @@ class LibvirtSnapshotTests(_BaseSnapshotTests):
utils.get_system_metadata_from_image(
{'disk_format': 'ami'})
self._test_snapshot(disk_format='ami')
# If we're uploading a qcow2, we must set the disk_format as such
self._test_snapshot(disk_format='qcow2')
@mock.patch('nova.virt.libvirt.utils.get_disk_type_from_path',
new=mock.Mock(return_value=None))

View File

@ -832,6 +832,11 @@ class LibvirtConnTestCase(_VirtDriverTestCase, test.TestCase):
# since we don't care about it.
self.stub_out('os_vif.unplug', lambda a, kw: None)
self.stub_out('nova.compute.utils.get_machine_ips', lambda: [])
self.stub_out('nova.virt.libvirt.utils.get_disk_size',
lambda *a, **k: 123456)
self.stub_out('nova.virt.libvirt.utils.get_disk_backing_file',
lambda *a, **k: None)
self.stub_out('nova.privsep.path.chown', lambda *a, **k: None)
def test_init_host_image_type_rbd_force_raw_images_true(self):
CONF.set_override('images_type', 'rbd', group='libvirt')

View File

@ -3110,11 +3110,7 @@ class LibvirtDriver(driver.ComputeDriver):
if instance.os_type:
metadata['properties']['os_type'] = instance.os_type
# NOTE(vish): glance forces ami disk format to be ami
if image_meta.disk_format == 'ami':
metadata['disk_format'] = 'ami'
else:
metadata['disk_format'] = img_fmt
metadata['disk_format'] = img_fmt
if image_meta.obj_attr_is_set("container_format"):
metadata['container_format'] = image_meta.container_format