public boolean isTerminated(ContainerCreationStatus container) { Pod pod = client.pods().withName(container.getContainerName()).get(); if (pod == null) { logger.info("Container {} has no pod - terminal.", container); return true; } else { List<ContainerStatus> containerStatuses = pod.getStatus().getContainerStatuses(); Optional<ContainerStateTerminated> terminated = containerStatuses.stream() .flatMap(status -> Optional.ofNullable(status.getState()).map(Stream::of).orElse(Stream.empty())) .flatMap(state -> Optional.ofNullable(state.getTerminated()).map(Stream::of).orElse(Stream.empty())) .findFirst(); terminated.ifPresent(state -> logger.info("Container {} is {} - terminal.", container, state)); return terminated.isPresent(); } }
static boolean isTerminated(ContainerStatus cs) { return cs.getState().getTerminated() != null; }
@Override public boolean test(ContainerStatus containerStatus) { return containerStatus.getLastState().getTerminated().getExitCode().equals( containerStatus.getState().getTerminated().getExitCode()); } });
public boolean test(ContainerStatus containerStatus) { return containerStatus.getLastState() != null && containerStatus.getState() != null && containerStatus.getLastState().getTerminated() != null && containerStatus.getLastState().getTerminated().getReason() != null && containerStatus.getLastState().getTerminated().getReason().contains("Error") && containerStatus.getState().getTerminated() != null && containerStatus.getState().getTerminated().getReason() != null && containerStatus.getState().getTerminated().getReason().contains("Error"); } }, new ContainerStatusCondition("last state exit code == exit code") {
@Override public boolean test(ContainerStatus containerStatus) { return containerStatus.getState() != null && containerStatus.getState().getTerminated() != null; } });
@Override public boolean test(ContainerStatus containerStatus) { // if we are being killed repeatedly due to OOM or using too much CPU, or abnormal termination. return containerStatus.getLastState() != null && containerStatus.getLastState().getTerminated() != null && (containerStatus.getLastState().getTerminated().getExitCode() == 137 || containerStatus.getLastState().getTerminated().getExitCode() == 143 || containerStatus.getLastState().getTerminated().getExitCode() == 1); } });
private boolean isNonDeletePeriodExpired(ContainerStatus cs) { final ContainerStateTerminated t = cs.getState().getTerminated(); if (t.getFinishedAt() == null) { return true; } final Instant finishedAt; try { finishedAt = Instant.parse(t.getFinishedAt()); } catch (DateTimeParseException e) { LOG.warn("Failed to parse container state terminated finishedAt: '{}'", t.getFinishedAt(), e); return true; } final Instant deadline = time.get().minus(Duration.ofSeconds(podDeletionDelaySeconds)); return finishedAt.isBefore(deadline); }
private static Optional<Event> isInErrorState(WorkflowInstance workflowInstance, Pod pod, Optional<ContainerStatus> mainContainerStatusOpt) { final PodStatus status = pod.getStatus(); final String phase = status.getPhase(); if ("NodeLost".equals(pod.getStatus().getReason())) { return Optional.of(Event.runError(workflowInstance, "Lost node running pod")); } switch (phase) { case "Pending": // check if one or more docker contains failed to pull their image, a possible silent error return mainContainerStatusOpt .filter(KubernetesPodEventTranslator::hasPullImageError) .map(x -> Event.runError(workflowInstance, "One or more containers failed to pull their image")); case "Succeeded": case "Failed": if (!mainContainerStatusOpt.isPresent()) { return Optional.of(Event.runError(workflowInstance, "Could not find our container in pod")); } final ContainerStatus containerStatus = mainContainerStatusOpt.get(); final ContainerStateTerminated terminated = containerStatus.getState().getTerminated(); if (terminated == null) { return Optional.of(Event.runError(workflowInstance, "Unexpected null terminated status")); } return Optional.empty(); case "Unknown": return Optional.of(Event.runError(workflowInstance, "Pod entered Unknown phase")); default: return Optional.empty(); } }
public ContainerStateFluentImpl(ContainerState instance){ this.withRunning(instance.getRunning()); this.withTerminated(instance.getTerminated()); this.withWaiting(instance.getWaiting()); }
public ContainerStateBuilder(ContainerState instance,Boolean validationEnabled){ this.fluent = this; this.withRunning(instance.getRunning()); this.withTerminated(instance.getTerminated()); this.withWaiting(instance.getWaiting()); this.validationEnabled = validationEnabled; }
public ContainerStateBuilder(ContainerStateFluent<?> fluent,ContainerState instance,Boolean validationEnabled){ this.fluent = fluent; fluent.withRunning(instance.getRunning()); fluent.withTerminated(instance.getTerminated()); fluent.withWaiting(instance.getWaiting()); this.validationEnabled = validationEnabled; } public ContainerStateBuilder(ContainerState instance){
if (containerStatus.getLastState() != null && containerStatus.getLastState().getTerminated() != null) { result.put("container.lastState.terminated.exitCode", "" + containerStatus.getLastState().getTerminated().getExitCode()); result.put("container.lastState.terminated.reason", containerStatus.getLastState().getTerminated().getReason()); if (containerStatus.getState() != null && containerStatus.getState().getTerminated() != null) { result.put("container.state.terminated.exitCode", "" + containerStatus.getState().getTerminated().getExitCode()); result.put("container.state.terminated.reason", containerStatus.getState().getTerminated().getReason());
ContainerStatus status, Stats stats) { final ContainerStateTerminated terminated = status.getState().getTerminated();
@Override public boolean test(ContainerStatus containerStatus) { return containerStatus.getLastState() != null && containerStatus.getState() != null && containerStatus.getLastState().getTerminated() != null && containerStatus.getState().getWaiting() != null && containerStatus.getState().getWaiting().getReason() != null && containerStatus.getState().getWaiting().getReason().contains("CrashLoopBackOff"); } });
if (info.getState().getTerminated() != null) { terminatedContainers.add(info); } else if (!info.getReady()) { .toMap(ContainerStatus::getName, (info) -> info.getState().getTerminated().getExitCode()));
ContainerStateTerminated t = state.getTerminated(); if (t != null) { cs.put("finishedAt", t.getFinishedAt());
if (!containerStatuses.isEmpty() && containerStatuses.stream().allMatch(s -> s.getState().getRunning() != null && s.getState().getTerminated() == null)) { instance.setRunning(true);
if (!containerStatuses.isEmpty() && containerStatuses.stream().allMatch(s -> s.getState().getRunning() != null && s.getState().getTerminated() == null)) { instance.setRunning(true);