Esempio n. 1
0
    static void WaitForStack(AmazonCloudFormationClient amazonCloudFormationClient, string stackName)
    {
        var    stack        = GetStack(amazonCloudFormationClient, stackName);
        var    status       = stack.StackStatus;
        string statusReason = null;

        while (status == StackStatus.CREATE_IN_PROGRESS ||
               status == StackStatus.UPDATE_IN_PROGRESS ||
               status == StackStatus.UPDATE_ROLLBACK_IN_PROGRESS ||
               status == StackStatus.ROLLBACK_IN_PROGRESS ||
               status == StackStatus.UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS ||
               status == StackStatus.UPDATE_COMPLETE_CLEANUP_IN_PROGRESS ||
               status == StackStatus.REVIEW_IN_PROGRESS)
        {
            stack        = GetStack(amazonCloudFormationClient, stackName);
            status       = stack.StackStatus;
            statusReason = stack.StackStatusReason;
            Log.Info(Program.LogPath, $"Stack '{stackName}' status is {status} because {statusReason} at {DateTime.Now.TimeOfDay}");
            if (status == StackStatus.CREATE_IN_PROGRESS || status == StackStatus.UPDATE_IN_PROGRESS)
            {
                Thread.Sleep(TimeSpan.FromSeconds(10));
            }
        }
        if (status != StackStatus.CREATE_COMPLETE &&
            status != StackStatus.UPDATE_COMPLETE &&
            status != StackStatus.ROLLBACK_COMPLETE &&
            status != StackStatus.UPDATE_ROLLBACK_COMPLETE)
        {
            var eventsResponse = amazonCloudFormationClient.DescribeStackEvents(new DescribeStackEventsRequest {
                StackName = stackName
            });
            throw new FailedToCreateStackException(stackName, RegionEndpoint.GetBySystemName(Program.AWSLambdaToolsJsonConfig.Region), status.Value, statusReason, eventsResponse.StackEvents);
        }
    }
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonCloudFormationConfig config = new AmazonCloudFormationConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonCloudFormationClient client = new AmazonCloudFormationClient(creds, config);

            DescribeStackEventsResponse resp = new DescribeStackEventsResponse();

            do
            {
                DescribeStackEventsRequest req = new DescribeStackEventsRequest
                {
                    NextToken = resp.NextToken
                };

                resp = client.DescribeStackEvents(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.StackEvents)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.NextToken));
        }