예제 #1
0
        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}");
                    }
                }
            });
        }