From 2fd73130db205d299433463b7b949d51c3a4d611 Mon Sep 17 00:00:00 2001 From: He Xiaoxi Date: Tue, 15 May 2018 12:42:13 +0800 Subject: [PATCH] Add strategy description for 'kubectl describe sts' command --- pkg/printers/internalversion/describe.go | 8 ++++ pkg/printers/internalversion/describe_test.go | 41 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/pkg/printers/internalversion/describe.go b/pkg/printers/internalversion/describe.go index 89bd48a606c..edc5edebe50 100644 --- a/pkg/printers/internalversion/describe.go +++ b/pkg/printers/internalversion/describe.go @@ -2764,6 +2764,14 @@ func describeStatefulSet(ps *apps.StatefulSet, selector labels.Selector, events printLabelsMultiline(w, "Labels", ps.Labels) printAnnotationsMultiline(w, "Annotations", ps.Annotations) w.Write(LEVEL_0, "Replicas:\t%d desired | %d total\n", ps.Spec.Replicas, ps.Status.Replicas) + w.Write(LEVEL_0, "Update Strategy:\t%s\n", ps.Spec.UpdateStrategy.Type) + if ps.Spec.UpdateStrategy.RollingUpdate != nil { + ru := ps.Spec.UpdateStrategy.RollingUpdate + if ru.Partition != 0 { + w.Write(LEVEL_1, "Partition:\t%d\n", ru.Partition) + } + } + w.Write(LEVEL_0, "Pods Status:\t%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed) DescribePodTemplate(&ps.Spec.Template, w) describeVolumeClaimTemplates(ps.Spec.VolumeClaimTemplates, w) diff --git a/pkg/printers/internalversion/describe_test.go b/pkg/printers/internalversion/describe_test.go index d7c8ca79c8d..bed4646dc49 100644 --- a/pkg/printers/internalversion/describe_test.go +++ b/pkg/printers/internalversion/describe_test.go @@ -33,6 +33,7 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/util/intstr" versionedfake "k8s.io/client-go/kubernetes/fake" + "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/autoscaling" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/extensions" @@ -2526,6 +2527,46 @@ func TestDescribeNode(t *testing.T) { } +func TestDescribeStatefulSet(t *testing.T) { + fake := fake.NewSimpleClientset(&apps.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + Namespace: "foo", + }, + Spec: apps.StatefulSetSpec{ + Replicas: 1, + Selector: &metav1.LabelSelector{}, + Template: api.PodTemplateSpec{ + Spec: api.PodSpec{ + Containers: []api.Container{ + {Image: "mytest-image:latest"}, + }, + }, + }, + UpdateStrategy: apps.StatefulSetUpdateStrategy{ + Type: apps.RollingUpdateStatefulSetStrategyType, + RollingUpdate: &apps.RollingUpdateStatefulSetStrategy{ + Partition: 2, + }, + }, + }, + }) + d := StatefulSetDescriber{fake} + out, err := d.Describe("foo", "bar", printers.DescriberSettings{ShowEvents: true}) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + expectedOutputs := []string{ + "bar", "foo", "Containers:", "mytest-image:latest", "Update Strategy", "RollingUpdate", "Partition", + } + for _, o := range expectedOutputs { + if !strings.Contains(out, o) { + t.Errorf("unexpected out: %s", out) + break + } + } +} + // boolPtr returns a pointer to a bool func boolPtr(b bool) *bool { o := b