From 9cee1456a671a048a149a442f93cd2d7df27baf5 Mon Sep 17 00:00:00 2001 From: Marcin Date: Wed, 9 Nov 2016 13:39:16 +0100 Subject: [PATCH] Describe and get support for the updated api + tests --- pkg/kubectl/describe.go | 1 + pkg/kubectl/describe_test.go | 26 ++++++++++++++++++++++ pkg/kubectl/resource_printer.go | 17 ++++---------- pkg/kubectl/resource_printer_test.go | 33 ++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 13 deletions(-) diff --git a/pkg/kubectl/describe.go b/pkg/kubectl/describe.go index 1187d7b31f0..5223e565bd2 100644 --- a/pkg/kubectl/describe.go +++ b/pkg/kubectl/describe.go @@ -2415,6 +2415,7 @@ func (p *PodDisruptionBudgetDescriber) Describe(namespace, name string, describe fmt.Fprintf(out, "Selector:\t\n") } fmt.Fprintf(out, "Status:\n") + fmt.Fprintf(out, " Allowed disruptions:\t%d\n", pdb.Status.PodDisruptionsAllowed) fmt.Fprintf(out, " Current:\t%d\n", pdb.Status.CurrentHealthy) fmt.Fprintf(out, " Desired:\t%d\n", pdb.Status.DesiredHealthy) fmt.Fprintf(out, " Total:\t%d\n", pdb.Status.ExpectedPods) diff --git a/pkg/kubectl/describe_test.go b/pkg/kubectl/describe_test.go index b798cffaffb..9d7cca87d3b 100644 --- a/pkg/kubectl/describe_test.go +++ b/pkg/kubectl/describe_test.go @@ -31,9 +31,11 @@ import ( "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/apis/policy" "k8s.io/kubernetes/pkg/apis/storage" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" + "k8s.io/kubernetes/pkg/util/intstr" ) type describeClient struct { @@ -694,6 +696,30 @@ func TestDescribeStorageClass(t *testing.T) { } } +func TestDescribePodDisruptionBudget(t *testing.T) { + f := fake.NewSimpleClientset(&policy.PodDisruptionBudget{ + ObjectMeta: api.ObjectMeta{ + Namespace: "ns1", + Name: "pdb1", + CreationTimestamp: unversioned.Time{Time: time.Now().Add(1.9e9)}, + }, + Spec: policy.PodDisruptionBudgetSpec{ + MinAvailable: intstr.FromInt(22), + }, + Status: policy.PodDisruptionBudgetStatus{ + PodDisruptionsAllowed: 5, + }, + }) + s := PodDisruptionBudgetDescriber{f} + out, err := s.Describe("ns1", "pdb1", DescriberSettings{ShowEvents: true}) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if !strings.Contains(out, "pdb1") { + t.Errorf("unexpected out: %s", out) + } +} + func TestDescribeEvents(t *testing.T) { events := &api.EventList{ diff --git a/pkg/kubectl/resource_printer.go b/pkg/kubectl/resource_printer.go index 2eebb6f1cd5..c294361b273 100644 --- a/pkg/kubectl/resource_printer.go +++ b/pkg/kubectl/resource_printer.go @@ -475,7 +475,7 @@ func (h *HumanReadablePrinter) AfterPrint(output io.Writer, res string) error { var ( podColumns = []string{"NAME", "READY", "STATUS", "RESTARTS", "AGE"} podTemplateColumns = []string{"TEMPLATE", "CONTAINER(S)", "IMAGE(S)", "PODLABELS"} - podDisruptionBudgetColumns = []string{"NAME", "MIN-AVAILABLE", "SELECTOR", "DISRUPTIONS"} + podDisruptionBudgetColumns = []string{"NAME", "MIN-AVAILABLE", "ALLOWED-DISRUPTIONS", "AGE"} replicationControllerColumns = []string{"NAME", "DESIRED", "CURRENT", "READY", "AGE"} replicaSetColumns = []string{"NAME", "DESIRED", "CURRENT", "READY", "AGE"} jobColumns = []string{"NAME", "DESIRED", "SUCCESSFUL", "AGE"} @@ -842,20 +842,11 @@ func printPodDisruptionBudget(pdb *policy.PodDisruptionBudget, w io.Writer, opti return err } } - - selector := "" - if pdb.Spec.Selector != nil { - selector = unversioned.FormatLabelSelector(pdb.Spec.Selector) - } - disruptions := "Disallowed" - if pdb.Status.PodDisruptionAllowed { - disruptions = "Allowed" - } - if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", + if _, err := fmt.Fprintf(w, "%s\t%s\t%d\t%s\n", name, pdb.Spec.MinAvailable.String(), - selector, - disruptions, + pdb.Status.PodDisruptionsAllowed, + translateTimestamp(pdb.CreationTimestamp), ); err != nil { return err } diff --git a/pkg/kubectl/resource_printer_test.go b/pkg/kubectl/resource_printer_test.go index c18ead9e242..a368e965e06 100644 --- a/pkg/kubectl/resource_printer_test.go +++ b/pkg/kubectl/resource_printer_test.go @@ -33,6 +33,7 @@ import ( "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/apis/policy" kubectltesting "k8s.io/kubernetes/pkg/kubectl/testing" "k8s.io/kubernetes/pkg/runtime" yamlserializer "k8s.io/kubernetes/pkg/runtime/serializer/yaml" @@ -1622,3 +1623,35 @@ func TestPrintService(t *testing.T) { buf.Reset() } } + +func TestPrintPodDisruptionBudget(t *testing.T) { + tests := []struct { + pdb policy.PodDisruptionBudget + expect string + }{ + { + policy.PodDisruptionBudget{ + ObjectMeta: api.ObjectMeta{ + Namespace: "ns1", + Name: "pdb1", + CreationTimestamp: unversioned.Time{Time: time.Now().Add(1.9e9)}, + }, + Spec: policy.PodDisruptionBudgetSpec{ + MinAvailable: intstr.FromInt(22), + }, + Status: policy.PodDisruptionBudgetStatus{ + PodDisruptionsAllowed: 5, + }, + }, + "pdb1\t22\t5\t0s\n", + }} + + buf := bytes.NewBuffer([]byte{}) + for _, test := range tests { + printPodDisruptionBudget(&test.pdb, buf, PrintOptions{false, false, false, false, true, false, false, "", []string{}}) + if buf.String() != test.expect { + t.Fatalf("Expected: %s, got: %s", test.expect, buf.String()) + } + buf.Reset() + } +}