private bool VDIIsSuitable(VDI vdi) { if (vdi == null) return false; if (vdi.is_a_snapshot) return false; if (vdi.Locked) return false; if (vdi.IsHaType) return false; if(vdi.Connection.ResolveAll(vdi.VBDs).Count < 1) return false; if(vdi.GetVMs().Any(vm=>!vm.IsRunning) && !Helpers.DundeeOrGreater(vdi.Connection)) return false; SR sr = GetSR(vdi); if (sr == null || sr.HBALunPerVDI) return false; return true; }
private bool CanBeMigrated(VDI vdi) { if (vdi == null || vdi.is_a_snapshot || vdi.Locked || vdi.IsHaType) return false; if(vdi.Connection.ResolveAll(vdi.VBDs).Count == 0) return false; if(vdi.GetVMs().Any(vm=>!vm.IsRunning) && !Helpers.DundeeOrGreater(vdi.Connection)) return false; SR sr = vdi.Connection.Resolve(vdi.SR); if (sr == null || sr.HBALunPerVDI) return false; if (Helpers.DundeePlusOrGreater(vdi.Connection) && !sr.allowed_operations.Contains(storage_operations.vdi_mirror)) return false; return true; }
private List<AsyncAction> getDestroyVDIAction(VDI vdi, List<VM> deletedVMSnapshots) { List<AsyncAction> actions = new List<AsyncAction>(); // Destroy the entire snapshot if it exists. Else destroy disk if (vdi.is_a_snapshot && vdi.GetVMs().Count >= 1) { foreach (VM vm in vdi.GetVMs()) { if (!vm.is_a_snapshot || deletedVMSnapshots.Contains(vm)) continue; AsyncAction action = new VMSnapshotDeleteAction(vm); actions.Add(action); deletedVMSnapshots.Add(vm); } } else { SR sr = vdi.Connection.Resolve(vdi.SR); if (sr == null) { // Nothing we can do here, but this should have been caught in the getcantexecutereason method and prompted return actions; } DestroyDiskAction a = new DestroyDiskAction(vdi); a.AllowRunningVMDelete = AllowRunningVMDelete; actions.Add(a); } return actions; }
private bool VDIIsSuitable(VDI vdi) { if (vdi == null) return false; if (vdi.is_a_snapshot) return false; if (vdi.Locked) return false; if (vdi.IsHaType) return false; if(vdi.Connection.ResolveAll(vdi.VBDs).Count < 1) return false; if(vdi.GetVMs().Any(vm=>!vm.IsRunning)) return false; if (vdi.Connection.Resolve(vdi.SR).HBALunPerVDI) return false; return true; }