From ce323978d4277fc26b0ad9c139848525862c8d1b Mon Sep 17 00:00:00 2001 From: Yong Kim Date: Tue, 12 Jan 2016 17:34:26 -0500 Subject: [PATCH] Add pod readiness check --- .../kubernetes/await/SessionPodsAreReady.java | 6 ++-- .../kubernetes/api/KubernetesHelper.java | 29 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/components/fabric8-arquillian/src/main/java/io/fabric8/arquillian/kubernetes/await/SessionPodsAreReady.java b/components/fabric8-arquillian/src/main/java/io/fabric8/arquillian/kubernetes/await/SessionPodsAreReady.java index c59d4c6bbf0..c4af703b400 100644 --- a/components/fabric8-arquillian/src/main/java/io/fabric8/arquillian/kubernetes/await/SessionPodsAreReady.java +++ b/components/fabric8-arquillian/src/main/java/io/fabric8/arquillian/kubernetes/await/SessionPodsAreReady.java @@ -50,7 +50,7 @@ public Boolean call() throws Exception { } for (Pod pod : pods) { - result = result && Objects.equal(PodStatusType.OK, KubernetesHelper.getPodStatus(pod)); + result = result && KubernetesHelper.isPodReady(pod); if (!result) { PodStatus podStatus = pod.getStatus(); if (podStatus != null) { @@ -59,9 +59,11 @@ public Boolean call() throws Exception { ContainerState state = containerStatus.getState(); if (state != null) { ContainerStateWaiting waiting = state.getWaiting(); + String containerName = containerStatus.getName(); if (waiting != null) { - String containerName = containerStatus.getName(); session.getLogger().warn("Waiting for container:" + containerName + ". Reason:" + waiting.getReason()); + } else { + session.getLogger().warn("Waiting for container:" + containerName + "."); } } } diff --git a/components/kubernetes-api/src/main/java/io/fabric8/kubernetes/api/KubernetesHelper.java b/components/kubernetes-api/src/main/java/io/fabric8/kubernetes/api/KubernetesHelper.java index 2cdab3a8335..20954b8cce6 100644 --- a/components/kubernetes-api/src/main/java/io/fabric8/kubernetes/api/KubernetesHelper.java +++ b/components/kubernetes-api/src/main/java/io/fabric8/kubernetes/api/KubernetesHelper.java @@ -33,6 +33,7 @@ import io.fabric8.kubernetes.api.model.KubernetesResource; import io.fabric8.kubernetes.api.model.ObjectMeta; import io.fabric8.kubernetes.api.model.Pod; +import io.fabric8.kubernetes.api.model.PodCondition; import io.fabric8.kubernetes.api.model.PodList; import io.fabric8.kubernetes.api.model.PodSpec; import io.fabric8.kubernetes.api.model.PodStatus; @@ -1430,6 +1431,34 @@ public static boolean isPodRunning(Pod pod) { return Objects.equal(status, PodStatusType.OK); } + /** + * Returns true if the pod is running and ready + */ + public static boolean isPodReady(Pod pod) { + if (!isPodRunning(pod)) { + return false; + } + + PodStatus podStatus = pod.getStatus(); + if (podStatus == null) { + return true; + } + + List conditions = podStatus.getConditions(); + if (conditions == null || conditions.isEmpty()) { + return true; + } + + // Check "ready" condition + for (PodCondition condition : conditions) { + if ("ready".equalsIgnoreCase(condition.getType())) { + return Boolean.parseBoolean(condition.getStatus()); + } + } + + return true; + } + public static String getPodStatusText(Pod pod) { if (pod != null) { PodStatus podStatus = pod.getStatus();