I'm on stable/mitaka, but the master code looks similar.
I have compute nodes configured to use qcow2 and libvirt. The flavor has an ephemeral disk and a swap disk. I boot an instance with this flavor, and the instance is boot-from-volume.
When I try to cold-migrate the instance, I get an error:
2016-07-21 23:33:48.561 46340 ERROR nova.compute.manager [instance: 4e52bfd8-0c71-48dc-89fb-6f6b31dc06bb] libvirtError: Cannot access backing file '/etc/nova/instances/_base/ephemeral_1_0706d66' of storage file '/etc/nova/instances/4e52bfd8-0c71-48dc-89fb-6f6b31dc06bb/disk.eph0' (as uid:0, gid:0): No such file or directory
The problem seems to be that in nova.virt.libvirt.driver.LibvirtDriver.finish_migration() we call self._create_image(...block_device_info=None...)
Down in _create_image() we handle the case of a "disk.local" ephemeral device, but that doesn't help because the device is actually named "disk.eph0". It looks like we then try to loop over any ephemerals in block_device_info, but that's None so we don't handle any of those (which is too bad since it looks like they would be named correctly).
The end result is that we have a qcow2 "disk.eph0" image, but with potentially no backing store in <instances_path>/_base. When we tell libvirt to start the instance, this results in the above error.
I'm on stable/mitaka, but the master code looks similar.
I have compute nodes configured to use qcow2 and libvirt. The flavor has an ephemeral disk and a swap disk. I boot an instance with this flavor, and the instance is boot-from-volume.
When I try to cold-migrate the instance, I get an error: manager [instance: 4e52bfd8- 0c71-48dc- 89fb-6f6b31dc06 bb] libvirtError: Cannot access backing file '/etc/nova/ instances/ _base/ephemeral _1_0706d66' of storage file '/etc/nova/ instances/ 4e52bfd8- 0c71-48dc- 89fb-6f6b31dc06 bb/disk. eph0' (as uid:0, gid:0): No such file or directory
2016-07-21 23:33:48.561 46340 ERROR nova.compute.
The problem seems to be that in nova.virt. libvirt. driver. LibvirtDriver. finish_ migration( ) we call self._create_ image(. ..block_ device_ info=None. ..)
Down in _create_image() we handle the case of a "disk.local" ephemeral device, but that doesn't help because the device is actually named "disk.eph0". It looks like we then try to loop over any ephemerals in block_device_info, but that's None so we don't handle any of those (which is too bad since it looks like they would be named correctly).
The end result is that we have a qcow2 "disk.eph0" image, but with potentially no backing store in <instances_ path>/_ base. When we tell libvirt to start the instance, this results in the above error.