public async Task <RemoteCredentials> Locate(string profile, string stackName) { var credentials = this.GetCredentials(profile); var cloudClient = new Amazon.CloudFormation.AmazonCloudFormationClient(credentials); var stacks = await cloudClient.DescribeStacksAsync(new DescribeStacksRequest { StackName = stackName }); var stack = stacks.Stacks.FirstOrDefault(); if (stack != default(Stack)) { return(new RemoteCredentials { ProfileName = profile, StackName = stackName, S3InputId = stack.Outputs.First(x => x.OutputKey == "SourceBucket").OutputValue, S3OutputId = stack.Outputs.First(x => x.OutputKey == "ResultsBucket").OutputValue, RenderJobDefinitionId = stack.Outputs.First(x => x.OutputKey == "RenderJobDefinition").OutputValue, RenderJobQueueId = stack.Outputs.First(x => x.OutputKey == "RenderJobQueue").OutputValue, BakeJobDefinitionId = stack.Outputs.First(x => x.OutputKey == "BakeJobDefinition").OutputValue, BakeJobQueueId = stack.Outputs.First(x => x.OutputKey == "BakeJobQueue").OutputValue, }); } throw new Exception("Could not find stack!"); }
public override async Task DoAction(string RoleARN) { await base.DoAction(RoleARN); var logger = LogManager.GetCurrentClassLogger(); Parallel.ForEach(SharedLibrary.Utilities.GetRegions(), (region) => { logger.Debug($"Checking CloudFormation stacks in region {region.DisplayName }"); var creds = SharedLibrary.Utilities.AssumeRole(RoleARN, region); var sessionCreds = new SessionAWSCredentials(creds.AccessKeyId, creds.SecretAccessKey, creds.SessionToken); Amazon.CloudFormation.AmazonCloudFormationClient client = new Amazon.CloudFormation.AmazonCloudFormationClient(creds, region); var listStackResult = client.ListStacksAsync(new ListStacksRequest { StackStatusFilter = new List <string> { "CREATE_COMPLETE", "CREATE_IN_PROGRESS", "CREATE_FAILED", "REVIEW_IN_PROGRESS", "ROLLBACK_COMPLETE", "UPDATE_COMPLETE", "UPDATE_ROLLBACK_COMPLETE", "UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS", "UPDATE_ROLLBACK_IN_PROGRESS" } }).Result; foreach (var cfStack in listStackResult.StackSummaries) { var deleteStackResult = client.DeleteStackAsync(new DeleteStackRequest { StackName = cfStack.StackName }).Result; if (deleteStackResult.HttpStatusCode == System.Net.HttpStatusCode.OK) { logger.Debug($"Successfully deleted stack {cfStack.StackName} in {region.DisplayName}"); } } }); }