public static ConDepExecutionResult ExecuteFromAssembly(ConDepSettings conDepSettings, CancellationToken token)
        {
            try
            {
                if (conDepSettings.Options.Assembly == null) throw new ArgumentException("assembly");

                var lbLookup = new LoadBalancerLookup(conDepSettings.Config.LoadBalancer);
                var runbookConfigurationHandler = new RunbookConfigurationHandler(new RunbookHandler(), new RunbookDependencyHandler(), lbLookup.GetLoadBalancer());
                //var sequenceManager = artifactConfigHandler.CreateExecutionSequence(conDepSettings);

                var clientValidator = new ClientValidator();

                var serverInfoHarvester = HarvesterFactory.GetHarvester(conDepSettings);
                var serverValidator = new RemoteServerValidator(conDepSettings.Config.Servers,
                                                                serverInfoHarvester, new PowerShellExecutor());

                //if (conDepSettings.Options.DryRun)
                //{
                //    Logger.Warn("Showing execution sequence from dry run:");
                //    sequenceManager.DryRun(conDepSettings);
                //    return new ConDepExecutionResult(true);
                //}

                return new ConDepConfigurationExecutor().Execute(conDepSettings, clientValidator, serverValidator, runbookConfigurationHandler.GetRunbooksToExecute(conDepSettings), new ServerHandler(), token);
            }
            catch (Exception ex)
            {
                Logger.Error("An error sneaked by.", ex);
                throw;
            }
        }
        public static ConDepExecutionResult ExecuteFromAssembly(ConDepSettings conDepSettings, CancellationToken token)
        {
            try
            {
                if (conDepSettings.Options.Assembly == null)
                {
                    throw new ArgumentException("assembly");
                }

                var lbLookup = new LoadBalancerLookup(conDepSettings.Config.LoadBalancer);
                var runbookConfigurationHandler = new RunbookConfigurationHandler(new RunbookHandler(), new RunbookDependencyHandler(), lbLookup.GetLoadBalancer());
                //var sequenceManager = artifactConfigHandler.CreateExecutionSequence(conDepSettings);

                var clientValidator = new ClientValidator();

                var serverInfoHarvester = HarvesterFactory.GetHarvester(conDepSettings);
                var serverValidator     = new RemoteServerValidator(conDepSettings.Config.Servers,
                                                                    serverInfoHarvester, new PowerShellExecutor());


                //if (conDepSettings.Options.DryRun)
                //{
                //    Logger.Warn("Showing execution sequence from dry run:");
                //    sequenceManager.DryRun(conDepSettings);
                //    return new ConDepExecutionResult(true);
                //}

                return(new ConDepConfigurationExecutor().Execute(conDepSettings, clientValidator, serverValidator, runbookConfigurationHandler.GetRunbooksToExecute(conDepSettings), new ServerHandler(), token));
            }
            catch (Exception ex)
            {
                Logger.Error("An error sneaked by.", ex);
                throw;
            }
        }
Example #3
0
        internal ConDepExecutionResult Execute(ConDepSettings settings, IValidateClient clientValidator,
                                               IValidateServer serverValidator, IEnumerable <Runbook> runbooks, IDiscoverServers serverHandler,
                                               CancellationToken token)
        {
            if (settings == null)
            {
                throw new ArgumentException("settings");
            }
            if (settings.Config == null)
            {
                throw new ArgumentException("settings.Config");
            }
            if (settings.Options == null)
            {
                throw new ArgumentException("settings.Options");
            }
            if (clientValidator == null)
            {
                throw new ArgumentException("clientValidator");
            }
            if (serverValidator == null)
            {
                throw new ArgumentException("serverValidator");
            }
            if (runbooks == null)
            {
                throw new ArgumentException("runbook");
            }

            ServicePointManager.ServerCertificateValidationCallback = ValidateConDepNodeServerCert;

            try
            {
                Validate(clientValidator, serverValidator);

                ExecutePreOps(settings, token);
                _serverNodeInstalled = true;

                //Todo: Result of merge. Not sure if this is correct.
                token.Register(() => Cancel(settings, token));

                var lbLocator = new LoadBalancerLookup(settings.Config.LoadBalancer);
                foreach (var runbook in runbooks)
                {
                    var servers = serverHandler.GetServers(runbook, settings);
                    settings.Config.Servers = servers.ToList();
                    runbook.Execute(new OperationsBuilder(1, settings, lbLocator, token), settings);
                }

                return(new ConDepExecutionResult(true));
            }
            catch (OperationCanceledException)
            {
                Cancel(settings, token);
                return(new ConDepExecutionResult(false)
                {
                    Cancelled = true
                });
            }
            catch (AggregateException aggEx)
            {
                var result = new ConDepExecutionResult(false);
                aggEx.Handle(inner =>
                {
                    if (inner is OperationCanceledException)
                    {
                        Cancel(settings, token);
                        result.Cancelled = true;
                        Logger.Warn("ConDep execution cancelled.");
                    }
                    else
                    {
                        result.AddException(inner);
                        Logger.Error("ConDep execution failed.", inner);
                    }

                    return(true);
                });
                return(result);
            }
            catch (Exception ex)
            {
                var result = new ConDepExecutionResult(false);
                result.AddException(ex);
                Logger.Error("ConDep execution failed.", ex);
                return(result);
            }
            finally
            {
                if (!_cancelled)
                {
                    ExecutePostOps(settings, token);
                }
            }
        }
        internal ConDepExecutionResult Execute(ConDepSettings settings, IValidateClient clientValidator, IValidateServer serverValidator, IEnumerable<Runbook> runbooks, IDiscoverServers serverHandler, CancellationToken token)
        {
            if (settings == null) { throw new ArgumentException("settings"); }
            if (settings.Config == null) { throw new ArgumentException("settings.Config"); }
            if (settings.Options == null) { throw new ArgumentException("settings.Options"); }
            if (clientValidator == null) { throw new ArgumentException("clientValidator"); }
            if (serverValidator == null) { throw new ArgumentException("serverValidator"); }
            if (runbooks == null) { throw new ArgumentException("runbook"); }

            ServicePointManager.ServerCertificateValidationCallback = ValidateConDepNodeServerCert;

            try
            {
                Validate(clientValidator, serverValidator);

                ExecutePreOps(settings, token);
                _serverNodeInstalled = true;

                //Todo: Result of merge. Not sure if this is correct.
                token.Register(() => Cancel(settings, token));

                var lbLocator = new LoadBalancerLookup(settings.Config.LoadBalancer);
                foreach (var runbook in runbooks)
                {
                    var servers = serverHandler.GetServers(runbook, settings);
                    settings.Config.Servers = servers.ToList();
                    runbook.Execute(new OperationsBuilder(1, settings, lbLocator, token), settings);
                }

                return new ConDepExecutionResult(true);
            }
            catch (OperationCanceledException)
            {
                Cancel(settings, token);
                return new ConDepExecutionResult(false) { Cancelled = true };
            }
            catch (AggregateException aggEx)
            {
                var result = new ConDepExecutionResult(false);
                aggEx.Handle(inner =>
                {
                    if (inner is OperationCanceledException)
                    {
                        Cancel(settings, token);
                        result.Cancelled = true;
                        Logger.Warn("ConDep execution cancelled.");
                    }
                    else
                    {
                        result.AddException(inner);
                        Logger.Error("ConDep execution failed.", inner);
                    }

                    return true;
                });
                return result;
            }
            catch (Exception ex)
            {
                var result = new ConDepExecutionResult(false);
                result.AddException(ex);
                Logger.Error("ConDep execution failed.", ex);
                return result;
            }
            finally
            {
                if (!_cancelled) ExecutePostOps(settings, token);
            }
        }