List of usage examples for com.amazonaws.services.cloudformation.model StackEvent getEventId
public String getEventId()
The unique ID of this event.
From source file:com.carrotgarden.maven.aws.cfn.CarrotCloudForm.java
License:BSD License
private void printStackEvents() { final DescribeStackEventsRequest request = new DescribeStackEventsRequest(); request.withStackName(name);/*from www.ja v a2 s .com*/ final DescribeStackEventsResult describeStackEvents = amazonClient.describeStackEvents(request); final List<StackEvent> stackEvents = describeStackEvents.getStackEvents(); Collections.reverse(stackEvents); logger.info("stack events:"); for (final StackEvent event : stackEvents) { final StringBuilder text = new StringBuilder(128); text.append("\n\t"); text.append("time="); text.append(event.getTimestamp()); text.append("\n\t"); text.append("id="); text.append(event.getEventId()); text.append("\n\t"); text.append("type="); text.append(event.getResourceType()); text.append("\n\t"); text.append("status="); text.append(event.getResourceStatus()); text.append("\n\t"); text.append("reason="); text.append(event.getResourceStatusReason()); logger.info("event {}", text); } }
From source file:com.deploymentio.cfnstacker.CloudFormationClient.java
License:Apache License
private String createStackEventLogMessage(StackEvent evt, Date startDate, String message) { return message + ": StartDate=" + DateUtils.formatISO8601Date(startDate) + " EventStatus=" + evt.getResourceStatus() + " EventDate=" + DateUtils.formatISO8601Date(evt.getTimestamp()) + " EventId=" + evt.getEventId() + " EventResourceId=" + evt.getLogicalResourceId() + " EventResourceType=" + evt.getResourceType(); }
From source file:com.mweagle.tereus.aws.CloudFormation.java
License:Open Source License
protected Optional<DescribeStacksResult> waitForStackComplete(final AmazonCloudFormationAsyncClient awsClient, final String stackName, List<StackEvent> priorEvents, Logger logger) throws Exception { Map<String, StackEvent> eventHistory = new HashMap<>(); for (StackEvent eachEvent : priorEvents) { eventHistory.put(eachEvent.getEventId(), eachEvent); }/*from w w w .j a va 2s. co m*/ Optional<StackEvent> terminationEvent = Optional.empty(); final Predicate<StackEvent> isNewEvent = event -> { return !eventHistory.containsKey(event.getEventId()); }; final Predicate<StackEvent> isTerminalEvent = stackEvent -> { return (CloudFormation.TERMINAL_EVENTS.contains(stackEvent.getResourceStatus()) && stackEvent.getResourceType().equals("AWS::CloudFormation::Stack")); }; // Query for events final DescribeStackEventsRequest describeRequest = new DescribeStackEventsRequest(); describeRequest.setStackName(stackName); while (!terminationEvent.isPresent()) { logger.debug("Waiting for StackEvents"); Thread.sleep(20 * 1000); final List<StackEvent> events = getStackEvents(awsClient, stackName, logger); // Get all the events we haven't seen, log and mark them events.stream().filter(isNewEvent).forEach(item -> { logger.info(item.toString()); eventHistory.put(item.getEventId(), item); }); // Find the first terminal event terminationEvent = events.stream().filter(isTerminalEvent).findFirst(); } // Don't ever delete anything, unless the initial event set length was empty, implying // a creation event if (priorEvents.size() <= 0 && terminationEvent.get().getResourceStatus().contains("_FAILED")) { logger.warn("Stack creation . Deleting stack."); final DeleteStackRequest deleteStackRequest = new DeleteStackRequest(); deleteStackRequest.setStackName(stackName); awsClient.deleteStack(deleteStackRequest); return Optional.empty(); } else { // Looks good, let's get the final output for the stack... return describeStack(awsClient, stackName, logger); } }
From source file:com.nike.cerberus.service.CloudFormationService.java
License:Apache License
/** * Blocking call that waits for a stack change to complete. Times out if waiting more than 30 minutes. * * @param endStatuses Status to end on/*w ww. j a v a 2s . com*/ * @return The final status */ public StackStatus waitForStatus(final String stackId, final HashSet<StackStatus> endStatuses) { DateTime now = DateTime.now(DateTimeZone.UTC).minusSeconds(10); DateTime timeoutDateTime = now.plusMinutes(90); Set<String> recordedStackEvents = Sets.newHashSet(); boolean isRunning = true; StackStatus stackStatus = null; while (isRunning) { try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { logger.warn("Thread sleep interrupted. Continuing...", e); } stackStatus = getStackStatus(stackId); if (endStatuses.contains(stackStatus) || stackStatus == null) { isRunning = false; } if (stackStatus != null) { List<StackEvent> stackEvents = getStackEvents(stackId); stackEvents.sort((o1, o2) -> o1.getTimestamp().compareTo(o2.getTimestamp())); for (StackEvent stackEvent : stackEvents) { DateTime eventTime = new DateTime(stackEvent.getTimestamp()); if (!recordedStackEvents.contains(stackEvent.getEventId()) && now.isBefore(eventTime)) { logger.info(String.format("TS: %s, Status: %s, Type: %s, Reason: %s", Chalk.on(stackEvent.getTimestamp().toString()).yellow(), getStatusColor(stackEvent.getResourceStatus()), Chalk.on(stackEvent.getResourceType()).yellow(), Chalk.on(stackEvent.getResourceStatusReason()).yellow())); recordedStackEvents.add(stackEvent.getEventId()); } } } if (timeoutDateTime.isBeforeNow()) { logger.error("Timed out waiting for CloudFormation completion status."); isRunning = false; } } return stackStatus; }
From source file:de.taimos.pipeline.aws.cloudformation.EventPrinter.java
License:Apache License
private void waitAndPrintEvents(String stack, long pollIntervalMillis, BasicFuture<AmazonWebServiceRequest> waitResult) throws ExecutionException { Date startDate = new Date(); String lastEventId = null;//from w ww .ja v a 2 s. co m this.printLine(); this.printStackName(stack); this.printLine(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); if (pollIntervalMillis > 0) { while (!waitResult.isDone()) { try { DescribeStackEventsResult result = this.client .describeStackEvents(new DescribeStackEventsRequest().withStackName(stack)); List<StackEvent> stackEvents = new ArrayList<>(); for (StackEvent event : result.getStackEvents()) { if (event.getEventId().equals(lastEventId) || event.getTimestamp().before(startDate)) { break; } stackEvents.add(event); } if (!stackEvents.isEmpty()) { Collections.reverse(stackEvents); for (StackEvent event : stackEvents) { this.printEvent(sdf, event); this.printLine(); } lastEventId = stackEvents.get(stackEvents.size() - 1).getEventId(); } } catch (AmazonCloudFormationException e) { // suppress and continue } try { Thread.sleep(pollIntervalMillis); } catch (InterruptedException e) { // suppress and continue } } } try { waitResult.get(); } catch (InterruptedException e) { this.listener.getLogger().format("Failed to wait for CFN action to complete: %s", e.getMessage()); } }
From source file:jetbrains.buildServer.runner.cloudformation.AWSClient.java
License:Apache License
public List<String> describeStackEvents(AmazonCloudFormationClient stackbuilder, String stackName, String ACTION) {//from w w w .j av a2 s .c om List<String> output = new ArrayList<String>(); DescribeStackEventsRequest request = new DescribeStackEventsRequest(); request.setStackName(stackName); DescribeStackEventsResult results = stackbuilder.describeStackEvents(request); for (StackEvent event : results.getStackEvents()) { if (event.getEventId().contains(ACTION)) { output.add(event.getEventId()); // myListener.debugLog(event.toString()); } } return output; }