Example #1
0
        public override Result Execute(ConDepSettings settings, CancellationToken token)
        {
            LoadOptionsFromConfig(settings);
            ValidateMandatoryOptions(_options);
            var starter      = new Ec2Starter(_options, settings);
            var ec2instances = starter.Start();

            var instances = new List <Ec2Instance>();
            var servers   = new List <ServerConfig>();

            foreach (var instance in ec2instances)
            {
                instances.Add(instance);
                var server = new ServerConfig
                {
                    DeploymentUser = new DeploymentUserConfig
                    {
                        UserName = instance.UserName,
                        Password = instance.Password
                    },
                    Name       = instance.ManagementAddress,
                    PowerShell = new PowerShellConfig()
                    {
                        HttpPort = 5985, HttpsPort = 5986
                    },
                    Node = new NodeConfig()
                    {
                        Port = 4444, TimeoutInSeconds = 100
                    }
                };
                settings.Config.Servers.Add(server);
                servers.Add(server);
            }

            Logger.Verbose("Waiting for WinRM to succeed");
            foreach (var server in servers)
            {
                Logger.Verbose($"Waiting for WinRM to succeed on {server.Name}");
                WaitForWinRm(WaitForStatus.Success, server);
            }
            var serverValidator = new RemoteServerValidator(servers, HarvesterFactory.GetHarvester(settings), new PowerShellExecutor());

            if (!serverValidator.Validate())
            {
                throw new ConDepValidationException("Not all servers fulfill ConDep's requirements. Aborting execution.");
            }

            ConDepConfigurationExecutor.ExecutePreOps(settings, token);

            var result = Result.SuccessChanged();

            result.Data.Instances = instances;
            return(result);
        }
Example #2
0
        public void Execute(CmdHelpWriter helpWriter)
        {
            var failed         = false;
            var conDepSettings = new ConDepSettings();

            try
            {
                conDepSettings.Options = GetOptions(_parser, _validator);
                conDepSettings.Config  = ConfigHandler.GetEnvConfig(conDepSettings);

                helpWriter.PrintCopyrightMessage();
                if (QueuingRequested(conDepSettings))
                {
                    _webQ = WaitInQueue(conDepSettings);
                }

                var status = new ConDepStatus();
                _tokenSource = new CancellationTokenSource();
                var token = _tokenSource.Token;

                var result = ConDepConfigurationExecutor.ExecuteFromAssembly(conDepSettings, token);

                status.EndTime = DateTime.Now;

                if (result.Cancelled || result.Success)
                {
                    status.PrintSummary();
                }
                else
                {
                    status.PrintSummary();
                    failed = true;
                }
            }
            finally
            {
                if (_webQ != null)
                {
                    Logger.Info("Leaving WebQ");
                    _webQ.LeaveQueue();
                }
                if (failed)
                {
                    Environment.Exit(1);
                }
            }
        }
Example #3
0
        public override Result Execute(ConDepSettings settings, CancellationToken token)
        {
            var client = GetAwsClient(settings, _awsOptions);

            var searchFilter = GetSearchFilters(_tags).ToList();
            var request      = new DescribeInstancesRequest {
                Filters = searchFilter
            };
            var response = client.DescribeInstances(request);

            var resultInstances = new List <dynamic>();

            foreach (var reservation in response.Reservations)
            {
                foreach (var instance in reservation.Instances.Where(x => x.State.Name == "Running"))
                {
                    var serverAddress = GetManagementAddress(_awsOptions.RemoteManagementAddressType, instance);
                    resultInstances.Add(new
                    {
                        Server = serverAddress
                    });
                    settings.Config.AddServer(serverAddress);
                }
            }

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

            if (!serverValidator.Validate())
            {
                throw new ConDepValidationException("Not all servers fulfill ConDep's requirements. Aborting execution.");
            }

            ConDepConfigurationExecutor.ExecutePreOps(settings, token);
            var result = Result.SuccessUnChanged();

            result.Data.Instances      = resultInstances;
            result.Data.HttpStatusCode = response.HttpStatusCode;
            return(result);
        }
Example #4
0
        static void Main(string[] args)
        {
            var      exitCode = 0;
            WebQueue webQ     = null;

            try
            {
                new LogConfigLoader().Load();
                Logger.TraceLevel = TraceLevel.Info;

                var optionHandler = new CommandLineOptionHandler(args);
                if (optionHandler.Params.InstallWebQ)
                {
                    throw new NotImplementedException();
                }
                else
                {
                    PrintCopyrightMessage();
                    Logger.LogSectionStart("ConDep");
                    if (!string.IsNullOrWhiteSpace(optionHandler.Params.WebQAddress))
                    {
                        webQ = new WebQueue(optionHandler.Params.WebQAddress, optionHandler.Params.Environment);
                        webQ.WebQueuePositionUpdate += (sender, eventArgs) => Logger.Info(eventArgs.Message);
                        webQ.WebQueueTimeoutUpdate  += (sender, eventArgs) => Logger.Info(eventArgs.Message);
                        Logger.LogSectionStart("Waiting in Deployment Queue");
                        try
                        {
                            webQ.WaitInQueue(TimeSpan.FromMinutes(30));
                        }
                        finally
                        {
                            Logger.LogSectionEnd("Waiting in Deployment Queue");
                        }
                    }

                    var configAssemblyLoader = new ConDepAssemblyHandler(optionHandler.Params.AssemblyName);
                    var assembly             = configAssemblyLoader.GetAssembly();

                    var conDepOptions = new ConDepOptions(optionHandler.Params.DeployAllApps,
                                                          optionHandler.Params.Application,
                                                          optionHandler.Params.DeployOnly,
                                                          optionHandler.Params.WebDeployExist,
                                                          optionHandler.Params.StopAfterMarkedServer,
                                                          optionHandler.Params.ContinueAfterMarkedServer,
                                                          assembly);
                    var envSettings = ConfigHandler.GetEnvConfig(optionHandler.Params.Environment, optionHandler.Params.BypassLB, assembly);

                    var status = new WebDeploymentStatus();
                    ConDepConfigurationExecutor.ExecuteFromAssembly(assembly, envSettings, conDepOptions, status);

                    if (status.HasErrors)
                    {
                        exitCode = 1;
                    }
                    else
                    {
                        status.EndTime = DateTime.Now;
                        status.PrintSummary();
                    }
                }
            }
            catch (Exception ex)
            {
                exitCode = 1;
                Logger.Error("ConDep reported a fatal error:");
                Logger.Error("Message: " + ex.Message);
                Logger.Verbose("Stack trace:\n" + ex.StackTrace);
            }
            finally
            {
                if (webQ != null)
                {
                    webQ.LeaveQueue();
                }

                Logger.LogSectionEnd("ConDep");
                Environment.Exit(exitCode);
            }
        }