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;
     }
 }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 5
0
        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;
        }