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(); } }
public KubernetesAppInstanceStatus(Pod pod, Service service, KubernetesDeployerProperties properties) { this.pod = pod; this.service = service; this.properties = properties; // we assume one container per pod if (pod != null && pod.getStatus().getContainerStatuses().size() == 1) { this.containerStatus = pod.getStatus().getContainerStatuses().get(0); } else { this.containerStatus = null; } this.runningPhaseDeploymentStateResolver = new DefaultRunningPhaseDeploymentStateResolver(properties); }
/** * Returns the current container map for the current pod state; lazily creating if required */ public static List<ContainerStatus> getOrCreateContainerStatuses(Pod pod) { PodStatus currentState = getOrCreatetStatus(pod); List<ContainerStatus> containerStatuses = currentState.getContainerStatuses(); if (containerStatuses == null) { containerStatuses = new ArrayList<>(); currentState.setContainerStatuses(containerStatuses); } return containerStatuses; }
/** * Get list of all ready pods * * @param kubernetes client for manipulation with kubernetes cluster * @return */ public static List<Pod> listReadyPods(Kubernetes kubernetes) { return kubernetes.listPods().stream() .filter(pod -> pod.getStatus().getContainerStatuses().stream().allMatch(ContainerStatus::getReady) && !pod.getMetadata().getName().startsWith(SystemtestsOpenshiftApp.MESSAGING_CLIENTS.toString())) .collect(Collectors.toList()); }
static Optional<ContainerStatus> getMainContainerStatus(Pod pod) { return readPodWorkflowInstance(pod) .flatMap(wfi -> pod.getStatus().getContainerStatuses().stream() .filter(status -> isMainContainer(status.getName(), pod)) .findAny()); }
public static String getDockerContainerID(Pod pod) { PodStatus status = pod.getStatus(); if (status != null) { List<ContainerStatus> containerStatuses = status.getContainerStatuses(); if (containerStatuses != null) { for (ContainerStatus containerStatus : containerStatuses) { String containerID = containerStatus.getContainerID(); if (StringUtils.isNotBlank(containerID)) { String prefix = "://"; int idx = containerID.indexOf(prefix); if (idx > 0) { return containerID.substring(idx + prefix.length()); } return containerID; } } } } return null; }
PodStatus currentState = pod.getStatus(); if (currentState != null) { List<ContainerStatus> containerStatuses = currentState.getContainerStatuses();
private void waitUntilContainerIsReady() throws IOException { try { Pod pod = client.pods().inNamespace(namespace).withName(podName) .waitUntilReady(CONTAINER_READY_TIMEOUT, TimeUnit.MINUTES); if (pod == null || pod.getStatus() == null || pod.getStatus().getContainerStatuses() == null) { throw new IOException("Failed to execute shell script inside container " + "[" + containerName + "] of pod [" + podName + "]." + "Failed to get container status"); } for (ContainerStatus info : pod.getStatus().getContainerStatuses()) { if (info.getName().equals(containerName)) { if (info.getReady()) { return; } else { // container died in the meantime throw new IOException("container [" + containerName + "] of pod [" + podName + "] is not ready, state is " + info.getState()); } } } throw new IOException("container [" + containerName + "] does not exist in pod [" + podName + "]"); } catch (InterruptedException | KubernetesClientTimeoutException e) { throw new IOException("Failed to execute shell script inside container " + "[" + containerName + "] of pod [" + podName + "]." + " Timed out waiting for container to become ready!", e); } } };
public static void setPodRunning(PodStatus podStatus) { List<ContainerStatus> containerStatuses = podStatus.getContainerStatuses(); if (containerStatuses == null) { containerStatuses = new ArrayList<ContainerStatus>(); podStatus.setContainerStatuses(containerStatuses); } containerStatuses.clear(); ContainerStatus status = new ContainerStatusBuilder().withNewState(). withNewRunning().withStartedAt(createAtString()).endRunning().endState(). build(); containerStatuses.add(status); podStatus.setContainerStatuses(containerStatuses); }
public static void setPodWaiting(PodStatus podStatus, String reason) { List<ContainerStatus> containerStatuses = podStatus.getContainerStatuses(); if (containerStatuses == null) { containerStatuses = new ArrayList<ContainerStatus>(); podStatus.setContainerStatuses(containerStatuses); } containerStatuses.clear(); ContainerStatus status = new ContainerStatusBuilder().withNewState(). withNewWaiting().withReason(reason).endWaiting().endState(). build(); containerStatuses.add(status); podStatus.setContainerStatuses(containerStatuses); } }
public static void setPodTerminated(PodStatus podStatus, String message) { List<ContainerStatus> containerStatuses = podStatus.getContainerStatuses(); if (containerStatuses == null) { containerStatuses = new ArrayList<ContainerStatus>(); podStatus.setContainerStatuses(containerStatuses); } containerStatuses.clear(); ContainerStatus status = new ContainerStatusBuilder().withNewState(). withNewTermination().withMessage(message).withFinishedAt(createAtString()).endTermination().endState(). build(); containerStatuses.add(status); podStatus.setContainerStatuses(containerStatuses); }
if(currNode==null) for(ContainerStatus status : pod.getStatus().getContainerStatuses())
public HashMap<String, String> getLogsOfTerminatedPods(String namespace) { HashMap<String, String> terminatedPodsLogs = new HashMap<>(); try { client.pods().inNamespace(namespace).list().getItems().forEach(pod -> { pod.getStatus().getContainerStatuses().forEach(containerStatus -> { log.info("pod:'{}' : restart count '{}'", pod.getMetadata().getName(), containerStatus.getRestartCount()); if (containerStatus.getRestartCount() > 0) { terminatedPodsLogs.put( pod.getMetadata().getName(), client.pods().inNamespace(namespace) .withName(pod.getMetadata().getName()) .inContainer(containerStatus.getName()) .terminated().getLog()); } }); }); } catch (Exception allExceptions) { log.warn("Searching in terminated pods failed! No logs of terminated pods will be stored."); allExceptions.printStackTrace(); } return terminatedPodsLogs; }
public PodStatusBuilder( PodStatusFluent<?> fluent , PodStatus instance ){ this.fluent = fluent; fluent.withConditions(instance.getConditions()); fluent.withContainerStatuses(instance.getContainerStatuses()); fluent.withHostIP(instance.getHostIP()); fluent.withMessage(instance.getMessage()); fluent.withPhase(instance.getPhase()); fluent.withPodIP(instance.getPodIP()); fluent.withStartTime(instance.getStartTime()); } public PodStatusBuilder( PodStatus instance ){
public PodStatusBuilder( PodStatusFluent<?> fluent , PodStatus instance ){ this.fluent = fluent; fluent.withCondition(instance.getCondition()); fluent.withContainerStatuses(instance.getContainerStatuses()); fluent.withHostIP(instance.getHostIP()); fluent.withMessage(instance.getMessage()); fluent.withPhase(instance.getPhase()); fluent.withPodIP(instance.getPodIP()); fluent.withStartTime(instance.getStartTime()); } public PodStatusBuilder( PodStatus instance ){
public PodStatusBuilder( PodStatus instance ){ this.fluent = this; this.withCondition(instance.getCondition()); this.withContainerStatuses(instance.getContainerStatuses()); this.withHostIP(instance.getHostIP()); this.withMessage(instance.getMessage()); this.withPhase(instance.getPhase()); this.withPodIP(instance.getPodIP()); this.withStartTime(instance.getStartTime()); }
public PodStatusBuilder( PodStatus instance ){ this.fluent = this; this.withConditions(instance.getConditions()); this.withContainerStatuses(instance.getContainerStatuses()); this.withHostIP(instance.getHostIP()); this.withMessage(instance.getMessage()); this.withPhase(instance.getPhase()); this.withPodIP(instance.getPodIP()); this.withStartTime(instance.getStartTime()); }
public PodStatusBuilder(PodStatusFluent<?> fluent,PodStatus instance,Boolean validationEnabled){ this.fluent = fluent; fluent.withConditions(instance.getConditions()); fluent.withContainerStatuses(instance.getContainerStatuses()); fluent.withHostIP(instance.getHostIP()); fluent.withMessage(instance.getMessage()); fluent.withPhase(instance.getPhase()); fluent.withPodIP(instance.getPodIP()); fluent.withReason(instance.getReason()); fluent.withStartTime(instance.getStartTime()); this.validationEnabled = validationEnabled; } public PodStatusBuilder(PodStatus instance){
public PodStatusFluentImpl(PodStatus instance){ this.withConditions(instance.getConditions()); this.withContainerStatuses(instance.getContainerStatuses()); this.withHostIP(instance.getHostIP()); this.withMessage(instance.getMessage()); this.withPhase(instance.getPhase()); this.withPodIP(instance.getPodIP()); this.withReason(instance.getReason()); this.withStartTime(instance.getStartTime()); }
public PodStatusBuilder(PodStatus instance,Boolean validationEnabled){ this.fluent = this; this.withConditions(instance.getConditions()); this.withContainerStatuses(instance.getContainerStatuses()); this.withHostIP(instance.getHostIP()); this.withMessage(instance.getMessage()); this.withPhase(instance.getPhase()); this.withPodIP(instance.getPodIP()); this.withReason(instance.getReason()); this.withStartTime(instance.getStartTime()); this.validationEnabled = validationEnabled; }