summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-08-16 21:43:21 +0000
committerGerrit Code Review <review@openstack.org>2012-08-16 21:43:21 +0000
commit12257fa089686ac3ca6a11a7c262b8f0f0dcf8ca (patch)
tree0e7dd1ac666b59bd5a1271ccc5f8a006aaec263e
parent93eab627813ec886b7caecc5217c690d69d918a3 (diff)
parent5fc1abfc64f68ed56938f275ad6d7df0ccf228e7 (diff)
downloadnova-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.py22
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.