private void PopulateTreeView() { ApplianceTreeView.BeginUpdate(); ApplianceTreeView.Cursor = Cursors.WaitCursor; try { ApplianceTreeView.ClearAllNodes(); foreach (var vdiRef in allPoolMetadata.Keys) { PoolMetadata poolMetadata = allPoolMetadata[vdiRef]; //if (!String.IsNullOrEmpty(poolMetadata.Pool.Name)) { string description = poolMetadata.Pool.uuid == Pool.uuid ? Messages.DR_WIZARD_APPLIANCESPAGE_CURRENT_POOL : string.Empty; PoolNode poolNode = new PoolNode(vdiRef, poolMetadata.Pool.Name, description); ApplianceTreeView.AddNode(poolNode); poolNode.Enabled = (poolMetadata.Pool.uuid != Pool.uuid); PopulateTreeView(poolMetadata, poolNode); } } } finally { ApplianceTreeView.EndUpdate(); ApplianceTreeView.Cursor = Cursors.Default; } }
List <AsyncAction> CreateSubActionsFor(PoolMetadata poolMetadata) { log.DebugFormat("Generating recovery actions from pool {0} (VDI {1})", poolMetadata.Pool.Name(), poolMetadata.Vdi.Name()); List <AsyncAction> subActions = new List <AsyncAction>(); VdiOpenDatabaseAction openDatabaseAction = new VdiOpenDatabaseAction(Connection, poolMetadata.Vdi); openDatabaseAction.Completed += OpenDatabaseActionCompleted; subActions.Add(openDatabaseAction); foreach (var vmAppliance in poolMetadata.VmAppliances.Values) { DrRecoverAction drRecoverAction = new DrRecoverAction(Connection, vmAppliance); drRecoverAction.Completed += SingleRecoverActionCompleted; drRecoverAction.Changed += SingleRecoverActionChanged; subActions.Add(drRecoverAction); dataGridView1.Rows.Add(new DataGridViewRowRecover(vmAppliance)); objectsToBeRecovered++; } foreach (var vm in poolMetadata.Vms.Values) { if (vm.IsAssignedToVapp()) { //VM included in an appliance continue; } DrRecoverAction drRecoverAction = new DrRecoverAction(Connection, vm); drRecoverAction.Completed += SingleRecoverActionCompleted; drRecoverAction.Changed += SingleRecoverActionChanged; subActions.Add(drRecoverAction); dataGridView1.Rows.Add(new DataGridViewRowRecover(vm)); objectsToBeRecovered++; } log.DebugFormat("Done - {0} actions generated", subActions.Count); return(subActions); }
private List <KeyValuePair <string, List <Check> > > GenerateChecks() { List <KeyValuePair <string, List <Check> > > checks = new List <KeyValuePair <string, List <Check> > >(); List <Check> checkGroup; //HA checks if (WizardType == DRWizardType.Dryrun) { checks.Add(new KeyValuePair <string, List <Check> >(Messages.DR_WIZARD_CHECKING_HA_STATUS, new List <Check>())); checkGroup = checks[checks.Count - 1].Value; checkGroup.Add(new DrHAEnabledCheck(_pool)); } // check if selected VMs and appliances are still running in the source pool if (WizardType != DRWizardType.Dryrun) { checkGroup = new List <Check>(); foreach (PoolMetadata poolMetadata in selectedPoolMetadata.Values) { // is source pool connected? PoolMetadata metadata = poolMetadata; Pool sourcePool = ConnectionsManager.XenConnectionsCopy.Select (connection => Helpers.GetPoolOfOne(connection)).FirstOrDefault (pool => pool != null && pool.uuid == metadata.Pool.uuid); if (sourcePool != null) { foreach (VM_appliance vmAppliance in poolMetadata.VmAppliances.Values) { checkGroup.Add(new RunningVmApplianceCheck(vmAppliance, sourcePool)); } foreach (VM vm in poolMetadata.Vms.Values) { if (vm.appliance.opaque_ref != null && vm.appliance.opaque_ref.StartsWith("OpaqueRef:") && vm.appliance.opaque_ref != "OpaqueRef:NULL") { //VM included in an appliance continue; } checkGroup.Add(new RunningVmCheck(vm, sourcePool)); } } } if (checkGroup.Count > 0) { checks.Add( new KeyValuePair <string, List <Check> >( Messages.DR_WIZARD_CHECKING_POWER_STATE_IN_SOURCE_POOLS, checkGroup)); } } //Existing VMs and appliances checks checkGroup = new List <Check>(); foreach (PoolMetadata poolMetadata in selectedPoolMetadata.Values) { foreach (VM_appliance vmAppliance in poolMetadata.VmAppliances.Values) { PoolMetadata metadata = poolMetadata; List <VM> vms = (from vmRef in vmAppliance.VMs where metadata.Vms.ContainsKey(vmRef) select metadata.Vms[vmRef]).ToList(); checkGroup.Add(new ExistingVmApplianceCheck(vmAppliance, vms, _pool)); } foreach (VM vm in poolMetadata.Vms.Values) { if (vm.appliance.opaque_ref != null && vm.appliance.opaque_ref.StartsWith("OpaqueRef:") && vm.appliance.opaque_ref != "OpaqueRef:NULL") { //VM included in an appliance continue; } checkGroup.Add(new ExistingVmCheck(vm, _pool)); } } if (checkGroup.Count > 0) { checks.Add(new KeyValuePair <string, List <Check> >(String.Format(Messages.DR_WIZARD_CHECKING_EXISTING_APPLIANCES_AND_VMS, _pool.Name()), checkGroup)); } //VM and appliance can be recovered checks checks.Add(new KeyValuePair <string, List <Check> >(String.Format(Messages.DR_WIZARD_CHECKING_VMS_CAN_BE_RECOVERED, _pool.Name()), new List <Check>())); checkGroup = checks[checks.Count - 1].Value; foreach (PoolMetadata poolMetadata in selectedPoolMetadata.Values) { foreach (VM_appliance vmAppliance in poolMetadata.VmAppliances.Values) { checkGroup.Add(new AssertCanBeRecoveredCheck(vmAppliance, _pool, poolMetadata.Vdi)); } foreach (VM vm in poolMetadata.Vms.Values) { if (vm.appliance.opaque_ref != null && vm.appliance.opaque_ref.StartsWith("OpaqueRef:") && vm.appliance.opaque_ref != "OpaqueRef:NULL") { //VM included in an appliance continue; } checkGroup.Add(new AssertCanBeRecoveredCheck(vm, _pool, poolMetadata.Vdi)); } } return(checks); }
private void PopulateTreeView(PoolMetadata poolMetadata, CustomTreeNode parentNode) { ApplianceTreeView.BeginUpdate(); ApplianceTreeView.Cursor = Cursors.WaitCursor; try { if (poolMetadata.VmAppliances != null && poolMetadata.VmAppliances.Count > 0) { foreach (var applianceItem in poolMetadata.VmAppliances) { ApplianceNode applianceNode = new ApplianceNode(applianceItem.Key, applianceItem.Value); if (parentNode != null) { ApplianceTreeView.AddChildNode(parentNode, applianceNode); applianceNode.Enabled = parentNode.Enabled; } else { ApplianceTreeView.AddNode(applianceNode); } foreach (XenRef <VM> vmRef in applianceItem.Value.VMs) { if (poolMetadata.Vms.ContainsKey(vmRef)) { VmNode vmNode = new VmNode(vmRef, poolMetadata.Vms[vmRef], false); ApplianceTreeView.AddChildNode(applianceNode, vmNode); vmNode.Enabled = applianceNode.Enabled; } } applianceNode.Expanded = false; } } if (poolMetadata.Vms != null || poolMetadata.Vms.Count > 0) { foreach (var vmItem in poolMetadata.Vms) { if (vmItem.Value.appliance.opaque_ref != null && vmItem.Value.appliance.opaque_ref.StartsWith("OpaqueRef:") && vmItem.Value.appliance.opaque_ref != "OpaqueRef:NULL") { //VM included in an appliance continue; } VmNode vmNode = new VmNode(vmItem.Key, vmItem.Value, true); if (parentNode != null) { ApplianceTreeView.AddChildNode(parentNode, vmNode); vmNode.Enabled = parentNode.Enabled; } else { ApplianceTreeView.AddNode(vmNode); } } } } finally { ApplianceTreeView.EndUpdate(); ApplianceTreeView.Cursor = Cursors.Default; } }
List<AsyncAction> CreateSubActionsFor(PoolMetadata poolMetadata) { log.DebugFormat("Generating recovery actions from pool {0} (VDI {1})", poolMetadata.Pool.Name, poolMetadata.Vdi.Name); List<AsyncAction> subActions = new List<AsyncAction>(); VdiOpenDatabaseAction openDatabaseAction = new VdiOpenDatabaseAction(Connection, poolMetadata.Vdi); openDatabaseAction.Completed += OpenDatabaseActionCompleted; subActions.Add(openDatabaseAction); foreach (var vmAppliance in poolMetadata.VmAppliances.Values) { DrRecoverAction drRecoverAction = new DrRecoverAction(Connection, vmAppliance); drRecoverAction.Completed += SingleRecoverActionCompleted; drRecoverAction.Changed += SingleRecoverActionChanged; subActions.Add(drRecoverAction); dataGridView1.Rows.Add(new DataGridViewRowRecover(vmAppliance)); objectsToBeRecovered++; } foreach (var vm in poolMetadata.Vms.Values) { if (vm.appliance.opaque_ref != null && vm.appliance.opaque_ref.StartsWith("OpaqueRef:") && vm.appliance.opaque_ref != "OpaqueRef:NULL") { //VM included in an appliance continue; } DrRecoverAction drRecoverAction = new DrRecoverAction(Connection, vm); drRecoverAction.Completed += SingleRecoverActionCompleted; drRecoverAction.Changed += SingleRecoverActionChanged; subActions.Add(drRecoverAction); dataGridView1.Rows.Add(new DataGridViewRowRecover(vm)); objectsToBeRecovered++; } log.DebugFormat("Done - {0} actions generated", subActions.Count); return subActions; }