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); }
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); } } }
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); }
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); } }