protected override void RunWithSession(ref Session session)
        {
            var master = Helpers.GetMaster(Connection);
            var mapping = mappings.Find(m => m.XenServerPatch.Equals(patch) && m.MasterHost != null && master != null && m.MasterHost.uuid == master.uuid);

            if (mapping != null && (mapping.Pool_patch != null || mapping.Pool_update != null))
            {
                if (Cancelling)
                    throw new CancelledException();

                try
                {
                    AddProgressStep(string.Format(Messages.UPDATES_WIZARD_RUNNING_PRECHECK, patch.Name, host.Name()));

                    PatchPrecheckCheck check = mapping.Pool_patch == null
                        ? new PatchPrecheckCheck(host, mapping.Pool_update)
                        : new PatchPrecheckCheck(host, mapping.Pool_patch);

                    var problems = check.RunAllChecks();

                    Diagnostics.Problems.Problem problem = null;

                    if (problems != null && problems.Count > 0)
                        problem = problems[0];

                    if (problem != null)
                        throw new Exception(string.Format("{0}: {1}. {2}", host, problem.Title, problem.Description));
                }
                catch (Exception ex)
                {
                    log.Error(string.Format("Precheck failed on host {0}", host.Name()), ex);
                    throw;
                }
            }
        }
        protected override void RunWithSession(ref Session session)
        {
            var master  = Helpers.GetMaster(Connection);
            var mapping = mappings.Find(m => m.XenServerPatch.Equals(patch) && m.MasterHost != null && master != null && m.MasterHost.uuid == master.uuid);

            if (mapping != null && (mapping.Pool_patch != null || mapping.Pool_update != null))
            {
                var livePatchStatus = new Dictionary <string, livepatch_status>();

                if (Cancelling)
                {
                    throw new CancelledException();
                }

                try
                {
                    AddProgressStep(string.Format(Messages.UPDATES_WIZARD_RUNNING_PRECHECK, patch.Name, host.Name()));

                    PatchPrecheckCheck check = mapping.Pool_patch == null
                        ? new PatchPrecheckCheck(host, mapping.Pool_update, livePatchStatus)
                        : new PatchPrecheckCheck(host, mapping.Pool_patch, livePatchStatus);

                    var problems = check.RunAllChecks();

                    Diagnostics.Problems.Problem problem = null;

                    if (problems != null && problems.Count > 0)
                    {
                        problem = problems[0];
                    }

                    if (problem != null)
                    {
                        throw new Exception(problem.Description);
                    }
                }
                catch (Exception ex)
                {
                    log.Error(string.Format("Precheck failed on host {0}", host.Name()), ex);
                    throw;
                }

                if (livePatchStatus.ContainsKey(host.uuid) &&
                    livePatchStatus[host.uuid] != livepatch_status.ok_livepatch_complete &&
                    !hostsThatWillRequireReboot.Contains(host.uuid))
                {
                    hostsThatWillRequireReboot.Add(host.uuid);
                }
            }
        }
        protected override void RunWithSession(ref Session session)
        {
            var master  = Helpers.GetMaster(Connection);
            var mapping = mappings.Find(m => m.XenServerPatch.Equals(patch) && m.MasterHost != null && master != null && m.MasterHost.uuid == master.uuid);

            if (mapping != null && (mapping.Pool_patch != null || mapping.Pool_update != null))
            {
                foreach (var host in hosts)
                {
                    if (Cancelling)
                    {
                        throw new CancelledException();
                    }

                    try
                    {
                        PatchPrecheckCheck check = null;

                        if (mapping.Pool_patch != null)
                        {
                            check = new PatchPrecheckCheck(host, mapping.Pool_patch);
                        }
                        else
                        {
                            check = new PatchPrecheckCheck(host, mapping.Pool_update);
                        }

                        var problems = check.RunAllChecks();

                        Diagnostics.Problems.Problem problem = null;

                        if (problems != null && problems.Count > 0)
                        {
                            problem = problems[0];
                        }

                        if (problem != null)
                        {
                            throw new Exception(string.Format("{0}: {1}. {2}", host, problem.Title, problem.Description));
                        }
                    }
                    catch (Exception ex)
                    {
                        log.Error(string.Format("Precheck failed on host {0}", host.Name()), ex);
                        throw ex;
                    }
                }
            }
        }