From 0bd9a4c6c5ba4fbbc8439effddc99004ddd6b232 Mon Sep 17 00:00:00 2001 From: Jan Chaloupka Date: Tue, 12 May 2020 15:59:52 +0200 Subject: [PATCH] kubectl describe: print toleration tolerating everything An empty key with operator Exists matches all keys, values and effects which means this will tolerate everything: tolerations: - operator: "Exists" as stated in https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/. However, the current printTolerationsMultilineWithIndent implementation ignores this case. As the toleration is valid, there's no reason to skip it when writing the list of all pod's tolerations. --- staging/src/k8s.io/kubectl/pkg/describe/describe.go | 11 +++++++++++ .../src/k8s.io/kubectl/pkg/describe/describe_test.go | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/kubectl/pkg/describe/describe.go b/staging/src/k8s.io/kubectl/pkg/describe/describe.go index dd8a1946dfc..d568ae6575c 100644 --- a/staging/src/k8s.io/kubectl/pkg/describe/describe.go +++ b/staging/src/k8s.io/kubectl/pkg/describe/describe.go @@ -4606,6 +4606,17 @@ func printTolerationsMultilineWithIndent(w PrefixWriter, initialIndent, title, i if len(toleration.Effect) != 0 { w.Write(LEVEL_0, ":%s", toleration.Effect) } + // tolerations: + // - operator: "Exists" + // is a special case which tolerates everything + if toleration.Operator == corev1.TolerationOpExists && len(toleration.Value) == 0 { + if len(toleration.Key) != 0 { + w.Write(LEVEL_0, " op=Exists") + } else { + w.Write(LEVEL_0, "op=Exists") + } + } + if toleration.TolerationSeconds != nil { w.Write(LEVEL_0, " for %ds", *toleration.TolerationSeconds) } diff --git a/staging/src/k8s.io/kubectl/pkg/describe/describe_test.go b/staging/src/k8s.io/kubectl/pkg/describe/describe_test.go index d7aaedf5186..f5986b61478 100644 --- a/staging/src/k8s.io/kubectl/pkg/describe/describe_test.go +++ b/staging/src/k8s.io/kubectl/pkg/describe/describe_test.go @@ -179,6 +179,7 @@ func TestDescribePodTolerations(t *testing.T) { }, Spec: corev1.PodSpec{ Tolerations: []corev1.Toleration{ + {Operator: corev1.TolerationOpExists}, {Key: "key0", Operator: corev1.TolerationOpExists}, {Key: "key1", Value: "value1"}, {Key: "key2", Operator: corev1.TolerationOpEqual, Value: "value2", Effect: corev1.TaintEffectNoSchedule}, @@ -193,7 +194,8 @@ func TestDescribePodTolerations(t *testing.T) { if err != nil { t.Errorf("unexpected error: %v", err) } - if !strings.Contains(out, "key0\n") || + if !strings.Contains(out, " op=Exists\n") || + !strings.Contains(out, "key0 op=Exists\n") || !strings.Contains(out, "key1=value1\n") || !strings.Contains(out, "key2=value2:NoSchedule\n") || !strings.Contains(out, "key3=value3:NoExecute for 300s\n") ||