From 0f65ce7cbfaddc190258f6e50b2bcbfd04cf6747 Mon Sep 17 00:00:00 2001 From: Adam Dougal Date: Wed, 16 May 2018 11:25:39 +0100 Subject: [PATCH] Do not consider Succeeded slaves when checking container cap When checking we have not exceeded the container cap we should not consider Succeeded slaves as they do not take up resources. Not doing so means you hit the container cap even when there are no active slaves present stopping the plugin from creating new slaves. This replaces this PR https://github.com/jenkinsci/kubernetes-plugin/pull/170 --- .../jenkins/plugins/kubernetes/KubernetesCloud.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 270f9072d8..79490aa35f 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -19,6 +19,7 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Collectors; import javax.annotation.CheckForNull; import javax.annotation.Nonnull; @@ -425,12 +426,12 @@ private boolean addProvisionedSlave(@Nonnull PodTemplate template, @CheckForNull } PodList slaveList = client.pods().inNamespace(templateNamespace).withLabels(getLabels()).list(); - List slaveListItems = slaveList.getItems(); + List slaveListItems = removeSucceededPods(slaveList.getItems()); Map labelsMap = new HashMap<>(this.getLabels()); labelsMap.putAll(template.getLabelsMap()); PodList namedList = client.pods().inNamespace(templateNamespace).withLabels(labelsMap).list(); - List namedListItems = namedList.getItems(); + List namedListItems = removeSucceededPods(namedList.getItems()); if (slaveListItems != null && containerCap <= slaveListItems.size()) { LOGGER.log(Level.INFO, @@ -449,6 +450,12 @@ private boolean addProvisionedSlave(@Nonnull PodTemplate template, @CheckForNull return true; } + private List removeSucceededPods(List pods) { + return pods.stream() + .filter(pod -> !"Succeeded".equals(pod.getStatus().getPhase())) + .collect(Collectors.toList()); + } + @Override public boolean canProvision(@CheckForNull Label label) { return getTemplate(label) != null;