예제 #1
0
        public bool TestIsHotfixRequiredBasedOnPlatformVersion(string version)
        {
            Mock <Host> host = ObjectManager.NewXenObject <Host>(id);

            host.Setup(h => h.PlatformVersion).Returns(version);
            return(factory.IsHotfixRequired(host.Object));
        }
        protected override List <CheckGroup> GenerateChecks(Pool_patch patch)
        {
            var groups = new List <CheckGroup>();

            List <Host> hostsToUpgrade         = new List <Host>();
            List <Host> hostsToUpgradeOrUpdate = new List <Host>();

            foreach (var pool in SelectedPools)
            {
                var poolHostsToUpgrade = pool.HostsToUpgrade();
                hostsToUpgrade.AddRange(poolHostsToUpgrade);
                hostsToUpgradeOrUpdate.AddRange(ApplyUpdatesToNewVersion
                    ? HostsToUpgradeOrUpdate(pool)
                    : poolHostsToUpgrade);
            }

            //XenCenter version check (if any of the selected server version is not the latest)
            var latestCrVersion = Updates.XenServerVersions.FindAll(item => item.LatestCr).OrderByDescending(v => v.Version).FirstOrDefault();

            if (latestCrVersion != null &&
                hostsToUpgradeOrUpdate.Any(host => new Version(Helpers.HostProductVersion(host)) < latestCrVersion.Version))
            {
                groups.Add(new CheckGroup(Messages.CHECKING_XENCENTER_VERSION, new List <Check> {
                    new XenCenterVersionCheck(null)
                }));
            }

            //HostMaintenanceModeCheck checks - for hosts that will be upgraded or updated
            var livenessChecks = new List <Check>();

            foreach (Host host in hostsToUpgradeOrUpdate)
            {
                livenessChecks.Add(new HostLivenessCheck(host, hostsToUpgrade.Contains(host)));
            }
            groups.Add(new CheckGroup(Messages.CHECKING_HOST_LIVENESS_STATUS, livenessChecks));

            //HotfixesCheck - for hosts that will be upgraded
            var hotfixChecks = new List <Check>();

            foreach (var host in hostsToUpgrade)
            {
                if (HotfixFactory.IsHotfixRequired(host) && !ManualUpgrade)
                {
                    hotfixChecks.Add(new HostHasHotfixCheck(host));
                }
            }
            if (hotfixChecks.Count > 0)
            {
                groups.Add(new CheckGroup(Messages.CHECKING_UPGRADE_HOTFIX_STATUS, hotfixChecks));
            }

            //SafeToUpgrade- and PrepareToUpgrade- checks - in automatic mode only, for hosts that will be upgraded
            if (!ManualUpgrade)
            {
                var prepareToUpgradeChecks = new List <Check>();
                foreach (var host in hostsToUpgrade)
                {
                    prepareToUpgradeChecks.Add(new PrepareToUpgradeCheck(host, InstallMethodConfig));
                }
                groups.Add(new CheckGroup(Messages.CHECKING_PREPARE_TO_UPGRADE, prepareToUpgradeChecks));

                var safeToUpgradeChecks = new List <Check>();
                foreach (var host in hostsToUpgrade)
                {
                    safeToUpgradeChecks.Add(new SafeToUpgradeCheck(host));
                }
                groups.Add(new CheckGroup(Messages.CHECKING_SAFE_TO_UPGRADE, safeToUpgradeChecks));
            }

            //vSwitch controller check - for each pool
            var vSwitchChecks = (from Host server in SelectedMasters
                                 let check = new VSwitchControllerCheck(server, InstallMethodConfig, ManualUpgrade)
                                             where check.CanRun()
                                             select check as Check).ToList();

            if (vSwitchChecks.Count > 0)
            {
                groups.Add(new CheckGroup(Messages.CHECKING_VSWITCH_CONTROLLER_GROUP, vSwitchChecks));
            }

            //protocol check - for each pool
            var sslChecks = (from Host server in SelectedMasters
                             let check = new PoolLegacySslCheck(server, InstallMethodConfig, ManualUpgrade)
                                         where check.CanRun()
                                         select check as Check).ToList();

            if (sslChecks.Count > 0)
            {
                groups.Add(new CheckGroup(Messages.CHECKING_SECURITY_PROTOCOL_GROUP, sslChecks));
            }

            //power on mode check - for each host
            var iloChecks = (from Host server in hostsToUpgradeOrUpdate
                             let check = new PowerOniLoCheck(server, InstallMethodConfig, ManualUpgrade)
                                         where check.CanRun()
                                         select check as Check).ToList();

            if (iloChecks.Count > 0)
            {
                groups.Add(new CheckGroup(Messages.CHECKING_POWER_ON_MODE_GROUP, iloChecks));
            }

            //Checking PV guests - for hosts that have any PV guests and warn the user before the upgrade.
            var pvChecks = (from Host server in SelectedMasters
                            let check = new PVGuestsCheck(server, true, ManualUpgrade, InstallMethodConfig)
                                        where check.CanRun()
                                        select check as Check).ToList();

            if (pvChecks.Count > 0)
            {
                groups.Add(new CheckGroup(Messages.CHECKING_PV_GUESTS, pvChecks));
            }

            //HA checks - for each pool
            var haChecks = (from Host server in SelectedMasters
                            select new HAOffCheck(server) as Check).ToList();

            groups.Add(new CheckGroup(Messages.CHECKING_HA_STATUS, haChecks));

            //Checking can evacuate host - for hosts that will be upgraded or updated
            var evacuateChecks = new List <Check>();

            foreach (Host host in hostsToUpgradeOrUpdate)
            {
                evacuateChecks.Add(new AssertCanEvacuateUpgradeCheck(host));
            }
            groups.Add(new CheckGroup(Messages.CHECKING_CANEVACUATE_STATUS, evacuateChecks));

            //PBDsPluggedCheck -  for hosts that will be upgraded or updated
            var pbdChecks = new List <Check>();

            foreach (Host host in hostsToUpgradeOrUpdate)
            {
                pbdChecks.Add(new PBDsPluggedCheck(host));
            }
            groups.Add(new CheckGroup(Messages.CHECKING_STORAGE_CONNECTIONS_STATUS, pbdChecks));

            //HostMemoryPostUpgradeCheck - for hosts that will be upgraded
            var mostMemoryPostUpgradeChecks = new List <Check>();

            foreach (var host in hostsToUpgrade)
            {
                mostMemoryPostUpgradeChecks.Add(new HostMemoryPostUpgradeCheck(host, InstallMethodConfig));
            }
            if (mostMemoryPostUpgradeChecks.Count > 0)
            {
                groups.Add(new CheckGroup(Messages.CHECKING_HOST_MEMORY_POST_UPGRADE, mostMemoryPostUpgradeChecks));
            }

            var gfs2Checks = new List <Check>();

            foreach (Pool pool in SelectedPools.Where(p =>
                                                      Helpers.KolkataOrGreater(p.Connection) && !Helpers.LimaOrGreater(p.Connection)))
            {
                Host host = pool.Connection.Resolve(pool.master);
                gfs2Checks.Add(new PoolHasGFS2SR(host));
            }

            if (gfs2Checks.Count > 0)
            {
                groups.Add(new CheckGroup(Messages.CHECKING_CLUSTERING_STATUS, gfs2Checks));
            }

            //Checking automated updates are possible if apply updates checkbox is ticked
            if (ApplyUpdatesToNewVersion)
            {
                var automatedUpdateChecks = (from Host server in SelectedMasters
                                             select new AutomatedUpdatesLicenseCheck(server) as Check).ToList();

                automatedUpdateChecks.Add(new CfuAvailabilityCheck());

                groups.Add(new CheckGroup(Messages.CHECKING_AUTOMATED_UPDATES_POSSIBLE,
                                          automatedUpdateChecks));
            }

            return(groups);
        }