diff --git a/nova/tests/virt/xenapi/test_vmops.py b/nova/tests/virt/xenapi/test_vmops.py index 7283179d70b4..200a6c0c681f 100644 --- a/nova/tests/virt/xenapi/test_vmops.py +++ b/nova/tests/virt/xenapi/test_vmops.py @@ -850,6 +850,14 @@ class ResizeVdisTestCase(VMOpsTestBase): self.vmops._resize_up_vdis(instance, {"root": {}}) self.assertFalse(mock_resize.called) + def test_resize_up_vdis_no_vdis_like_initial_spawn(self, mock_resize): + instance = {"root_gb": 0, "ephemeral_gb": 3000} + vdis = {} + + self.vmops._resize_up_vdis(instance, vdis) + + self.assertFalse(mock_resize.called) + @mock.patch.object(vm_utils, 'get_ephemeral_disk_sizes') def test_resize_up_vdis_ephemeral(self, mock_sizes, mock_resize): mock_sizes.return_value = [2000, 1000] diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py index 15397aeb84aa..c215df8b3666 100644 --- a/nova/virt/xenapi/vmops.py +++ b/nova/virt/xenapi/vmops.py @@ -1080,10 +1080,18 @@ class VMOps(object): vm_utils.update_vdi_virtual_size(self._session, instance, vdi_ref, new_root_gb) + ephemeral_vdis = vdis.get('ephemerals') + if not ephemeral_vdis: + # NOTE(johngarbutt) no existing (migrated) ephemeral disks + # to resize, so nothing more to do here. + return + total_ephemeral_gb = instance['ephemeral_gb'] if total_ephemeral_gb: sizes = vm_utils.get_ephemeral_disk_sizes(total_ephemeral_gb) - ephemeral_vdis = vdis.get('ephemerals') + # resize existing (migrated) ephemeral disks, + # and add any extra disks if required due to a + # larger total_ephemeral_gb (resize down is not supported). for userdevice, new_size in enumerate(sizes, start=int(DEVICE_EPHEMERAL)): vdi = ephemeral_vdis.get(str(userdevice))