summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormatt.dietz@rackspace.com <>2011-06-16 12:50:55 -0500
committermatt.dietz@rackspace.com <>2011-06-16 12:50:55 -0500
commitfb5cc193cfbd9f92ba777bdbcdaae045c982b05a (patch)
tree834083cc1eff9a70ecb45f7ecce0eb6a8a28a108
parent7c583997df2c243c4bd21f876da4658331efe37d (diff)
downloadnova-fb5cc193cfbd9f92ba777bdbcdaae045c982b05a.tar.gz
nova-fb5cc193cfbd9f92ba777bdbcdaae045c982b05a.tar.xz
nova-fb5cc193cfbd9f92ba777bdbcdaae045c982b05a.zip
Attempting to retrieve the correct VDI for snapshotting
-rw-r--r--nova/virt/xenapi/vm_utils.py23
1 files changed, 10 insertions, 13 deletions
diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py
index 11da221f2..c91a9bab7 100644
--- a/nova/virt/xenapi/vm_utils.py
+++ b/nova/virt/xenapi/vm_utils.py
@@ -283,19 +283,16 @@ class VMHelper(HelperBase):
@classmethod
def get_vdi_for_vm_safely(cls, session, vm_ref):
- vdi_refs = VMHelper.lookup_vm_vdis(session, vm_ref)
- if vdi_refs is None:
- raise Exception(_("No VDIs found for VM %s") % vm_ref)
- else:
- num_vdis = len(vdi_refs)
- if num_vdis != 1:
- raise Exception(
- _("Unexpected number of VDIs (%(num_vdis)s) found"
- " for VM %(vm_ref)s") % locals())
-
- vdi_ref = vdi_refs[0]
- vdi_rec = session.get_xenapi().VDI.get_record(vdi_ref)
- return vdi_ref, vdi_rec
+ """Retrieves the primary VDI for a VM"""
+ vbd_refs = session.get_xenapi().VM.get_VBDs(vm_ref)
+ for vbd in vbd_refs:
+ vbd_rec = session.get_xenapi().VBD.get_record(vbd)
+ # Convention dictates the primary VDI will be userdevice 0
+ if vbd_rec['userdevice'] == '0':
+ vdi_rec = session.get_xenapi().VDI.get_record(vbd_rec['VDI'])
+ return vbd_rec['VDI'], vdi_rec
+ raise exception.Error(_("No primary VDI found for"
+ "%(vm_ref)s") % locals())
@classmethod
def create_snapshot(cls, session, instance_id, vm_ref, label):