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