aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Andras Spitzer <sendai@swordsaint.net> 2019-05-29 08:06:46 +0100
committerGravatar Miek Gieben <miek@miek.nl> 2019-05-29 08:06:45 +0100
commit7dde3f3958f84413da5d306850cc4aa880fac512 (patch)
tree471184369b8c04280e1ab18d67870338fede2950
parent4e6c2b41dbfee83d53a62c8c6b565dc901750a97 (diff)
downloadcoredns-7dde3f3958f84413da5d306850cc4aa880fac512.tar.gz
coredns-7dde3f3958f84413da5d306850cc4aa880fac512.tar.zst
coredns-7dde3f3958f84413da5d306850cc4aa880fac512.zip
Fix for #2842, instead of returning the first Pod, return the one whi… (#2846)
* Fix for #2842, instead of returning the first Pod, return the one which is Running * a more memory efficient version of the fix, string -> bool * fix with no extra fields in struct, return nil at Pod conversion if Pod is not Running * let Kuberneretes filter for Running Pods using FieldSelector * filter for Pods that are Running and Pending (implicit)
-rw-r--r--plugin/kubernetes/controller.go4
-rw-r--r--plugin/kubernetes/watch.go4
2 files changed, 8 insertions, 0 deletions
diff --git a/plugin/kubernetes/controller.go b/plugin/kubernetes/controller.go
index 6124a19cb..634735584 100644
--- a/plugin/kubernetes/controller.go
+++ b/plugin/kubernetes/controller.go
@@ -214,6 +214,10 @@ func podListFunc(c kubernetes.Interface, ns string, s labels.Selector) func(meta
if s != nil {
opts.LabelSelector = s.String()
}
+ if len(opts.FieldSelector) > 0 {
+ opts.FieldSelector = opts.FieldSelector + ","
+ }
+ opts.FieldSelector = opts.FieldSelector + "status.phase!=Succeeded,status.phase!=Failed,status.phase!=Unknown"
listV1, err := c.CoreV1().Pods(ns).List(opts)
return listV1, err
}
diff --git a/plugin/kubernetes/watch.go b/plugin/kubernetes/watch.go
index 52529a6b0..fd6e68c8c 100644
--- a/plugin/kubernetes/watch.go
+++ b/plugin/kubernetes/watch.go
@@ -22,6 +22,10 @@ func podWatchFunc(c kubernetes.Interface, ns string, s labels.Selector) func(opt
if s != nil {
options.LabelSelector = s.String()
}
+ if len(options.FieldSelector) > 0 {
+ options.FieldSelector = options.FieldSelector + ","
+ }
+ options.FieldSelector = options.FieldSelector + "status.phase!=Succeeded,status.phase!=Failed,status.phase!=Unknown"
w, err := c.CoreV1().Pods(ns).Watch(options)
return w, err
}