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; } }
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 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); }
private void Execute(Assembly assembly, ConDepConfig envConfig, ConDepOptions options, IReportStatus status) { if (assembly == null) { throw new ArgumentException("assembly"); } if (envConfig == null) { throw new ArgumentException("envSettings"); } if (options == null) { throw new ArgumentException("options"); } if (status == null) { throw new ArgumentException("status"); } var applications = CreateApplicationArtifacts(options, assembly); if (!options.WebDeployExist) { var serverValidator = new RemoteServerValidator(envConfig.Servers); if (!serverValidator.IsValid()) { Logger.Error("Not all servers fulfill ConDep's requirements. Aborting execution."); return; } } var webDeploy = new WebDeployHandler(); var lbLookup = new LoadBalancerLookup(envConfig.LoadBalancer); var sequenceManager = new ExecutionSequenceManager(lbLookup.GetLoadBalancer()); var notification = new Notification(); var postOpSeq = new PostOpsSequence(); foreach (var application in applications) { var infrastructureSequence = new InfrastructureSequence(); var preOpsSequence = new PreOpsSequence(webDeploy); if (!options.DeployOnly) { var infrastructureBuilder = new InfrastructureBuilder(infrastructureSequence, webDeploy); Configure.InfrastructureOperations = infrastructureBuilder; if (HasInfrastructureDefined(application)) { var infrastructureInstance = GetInfrastructureArtifactForApplication(assembly, application); if (!infrastructureSequence.IsValid(notification)) { notification.Throw(); } infrastructureInstance.Configure(infrastructureBuilder, envConfig); } } var local = new LocalOperationsBuilder(sequenceManager.NewLocalSequence(application.GetType().Name), infrastructureSequence, preOpsSequence, envConfig.Servers, webDeploy); Configure.LocalOperations = local; application.Configure(local, envConfig); } if (!sequenceManager.IsValid(notification)) { notification.Throw(); } sequenceManager.Execute(status, envConfig, options); postOpSeq.Execute(status, options); }