diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-08-16 21:43:21 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-08-16 21:43:21 +0000 |
| commit | 12257fa089686ac3ca6a11a7c262b8f0f0dcf8ca (patch) | |
| tree | 0e7dd1ac666b59bd5a1271ccc5f8a006aaec263e | |
| parent | 93eab627813ec886b7caecc5217c690d69d918a3 (diff) | |
| parent | 5fc1abfc64f68ed56938f275ad6d7df0ccf228e7 (diff) | |
| download | nova-12257fa089686ac3ca6a11a7c262b8f0f0dcf8ca.tar.gz nova-12257fa089686ac3ca6a11a7c262b8f0f0dcf8ca.tar.xz nova-12257fa089686ac3ca6a11a7c262b8f0f0dcf8ca.zip | |
Merge "xenapi: attach root disk during rescue before boot"
| -rw-r--r-- | nova/virt/xenapi/vmops.py | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py index 10cca68f4..3a0c8e4d1 100644 --- a/nova/virt/xenapi/vmops.py +++ b/nova/virt/xenapi/vmops.py @@ -303,6 +303,18 @@ class VMOps(object): undo_mgr.undo_with(undo_create_vm) return vm_ref + if rescue: + # NOTE(johannes): Attach root disk to rescue VM now, before + # booting the VM, since we can't hotplug block devices + # on non-PV guests + @step + def attach_root_disk_step(undo_mgr, vm_ref): + orig_vm_ref = vm_utils.lookup(self._session, instance['name']) + vdi_ref = self._find_root_vdi_ref(orig_vm_ref) + + vm_utils.create_vbd(self._session, vm_ref, vdi_ref, + DEVICE_RESCUE, bootable=False) + @step def prepare_security_group_filters_step(undo_mgr): try: @@ -345,6 +357,9 @@ class VMOps(object): vm_ref = create_vm_step(undo_mgr, vdis, kernel_file, ramdisk_file) prepare_security_group_filters_step(undo_mgr) + if rescue: + attach_root_disk_step(undo_mgr, vm_ref) + boot_instance_step(undo_mgr, vm_ref) apply_security_group_filters_step(undo_mgr) @@ -1054,13 +1069,6 @@ class VMOps(object): self._acquire_bootlock(vm_ref) self.spawn(context, instance, image_meta, [], rescue_password, network_info, name_label=rescue_name_label, rescue=True) - rescue_vm_ref = vm_utils.lookup(self._session, rescue_name_label) - vdi_ref = self._find_root_vdi_ref(vm_ref) - - rescue_vbd_ref = vm_utils.create_vbd(self._session, rescue_vm_ref, - vdi_ref, DEVICE_RESCUE, - bootable=False) - self._session.call_xenapi('VBD.plug', rescue_vbd_ref) def unrescue(self, instance): """Unrescue the specified instance. |
