summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorSalvatore Orlando <salvatore.orlando@eu.citrix.com>2011-02-07 17:06:30 +0000
committerSalvatore Orlando <salvatore.orlando@eu.citrix.com>2011-02-07 17:06:30 +0000
commit93d6050078214945fd2c842a15fb177f24811fa1 (patch)
treee950a77c71891a8ba3665c6f20189bde2ab6ce72 /nova
parent75e052e2c0bb7f470b959ea1a6168a6c5cddd8fd (diff)
downloadnova-93d6050078214945fd2c842a15fb177f24811fa1.tar.gz
nova-93d6050078214945fd2c842a15fb177f24811fa1.tar.xz
nova-93d6050078214945fd2c842a15fb177f24811fa1.zip
Fix for bug #714709
Diffstat (limited to 'nova')
-rw-r--r--nova/virt/xenapi/vm_utils.py5
-rw-r--r--nova/virt/xenapi/vmops.py19
2 files changed, 22 insertions, 2 deletions
diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py
index 4bbd522c1..4f6de7588 100644
--- a/nova/virt/xenapi/vm_utils.py
+++ b/nova/virt/xenapi/vm_utils.py
@@ -438,7 +438,12 @@ class VMHelper(HelperBase):
return vdis
else:
return None
+ @classmethod
+ def lookup_kernel_ramdisk(cls,session,vm):
+ vm_rec = session.get_xenapi().VM.get_record(vm)
+ return (vm_rec['PV_kernel'],vm_rec['PV_ramdisk'])
+
@classmethod
def compile_info(cls, record):
"""Fill record with VM status information"""
diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py
index e84ce20c4..fe95d881b 100644
--- a/nova/virt/xenapi/vmops.py
+++ b/nova/virt/xenapi/vmops.py
@@ -286,8 +286,23 @@ class VMOps(object):
def _destroy_vm(self, instance, vm):
"""Destroys a VM record """
try:
- task = self._session.call_xenapi('Async.VM.destroy', vm)
- self._session.wait_for_task(instance.id, task)
+ kernel = None
+ ramdisk = None
+ if instance.kernel_id or instance.ramdisk_id:
+ (kernel, ramdisk) = VMHelper.lookup_kernel_ramdisk(
+ self._session, vm)
+ task1 = self._session.call_xenapi('Async.VM.destroy', vm)
+ LOG.debug(_("Removing kernel/ramdisk files"))
+ fn = "remove_kernel_ramdisk"
+ args = {}
+ if kernel:
+ args['kernel-file'] = kernel
+ if ramdisk:
+ args['ramdisk-file'] = ramdisk
+ task2 = self._session.async_call_plugin('glance', fn, args)
+ self._session.wait_for_task(instance.id, task1)
+ self._session.wait_for_task(instance.id, task2)
+ LOG.debug(_("kernel/ramdisk files removed"))
except self.XenAPI.Failure, exc:
LOG.exception(exc)