diff --git a/pkg/printers/internalversion/printers.go b/pkg/printers/internalversion/printers.go index fa479169816..6b96b57d942 100644 --- a/pkg/printers/internalversion/printers.go +++ b/pkg/printers/internalversion/printers.go @@ -410,6 +410,9 @@ func AddHandlers(h printers.PrintHandler) { storageClassColumnDefinitions := []metav1beta1.TableColumnDefinition{ {Name: "Name", Type: "string", Format: "name", Description: metav1.ObjectMeta{}.SwaggerDoc()["name"]}, {Name: "Provisioner", Type: "string", Description: storagev1.StorageClass{}.SwaggerDoc()["provisioner"]}, + {Name: "ReclaimPolicy", Type: "string", Description: storagev1.StorageClass{}.SwaggerDoc()["reclaimPolicy"]}, + {Name: "VolumeBindingMode", Type: "string", Description: storagev1.StorageClass{}.SwaggerDoc()["volumeBindingMode"]}, + {Name: "AllowVolumeExpansion", Type: "string", Description: storagev1.StorageClass{}.SwaggerDoc()["allowVolumeExpansion"]}, {Name: "Age", Type: "string", Description: metav1.ObjectMeta{}.SwaggerDoc()["creationTimestamp"]}, } @@ -1857,7 +1860,23 @@ func printStorageClass(obj *storage.StorageClass, options printers.GenerateOptio name += " (default)" } provtype := obj.Provisioner - row.Cells = append(row.Cells, name, provtype, translateTimestampSince(obj.CreationTimestamp)) + reclaimPolicy := string(api.PersistentVolumeReclaimDelete) + if obj.ReclaimPolicy != nil { + reclaimPolicy = string(*obj.ReclaimPolicy) + } + + volumeBindingMode := string(storage.VolumeBindingImmediate) + if obj.VolumeBindingMode != nil { + volumeBindingMode = string(*obj.VolumeBindingMode) + } + + allowVolumeExpansion := false + if obj.AllowVolumeExpansion != nil { + allowVolumeExpansion = *obj.AllowVolumeExpansion + } + + row.Cells = append(row.Cells, name, provtype, reclaimPolicy, volumeBindingMode, allowVolumeExpansion, + translateTimestampSince(obj.CreationTimestamp)) return []metav1beta1.TableRow{row}, nil } diff --git a/pkg/printers/internalversion/printers_test.go b/pkg/printers/internalversion/printers_test.go index 3b08ce5b8ab..2cfeb33ca74 100644 --- a/pkg/printers/internalversion/printers_test.go +++ b/pkg/printers/internalversion/printers_test.go @@ -4366,6 +4366,10 @@ func TestPrintCronJobList(t *testing.T) { } func TestPrintStorageClass(t *testing.T) { + policyDelte := api.PersistentVolumeReclaimDelete + policyRetain := api.PersistentVolumeReclaimRetain + bindModeImmediate := storage.VolumeBindingImmediate + bindModeWait := storage.VolumeBindingWaitForFirstConsumer tests := []struct { sc storage.StorageClass expected []metav1beta1.TableRow @@ -4378,7 +4382,8 @@ func TestPrintStorageClass(t *testing.T) { }, Provisioner: "kubernetes.io/glusterfs", }, - expected: []metav1beta1.TableRow{{Cells: []interface{}{"sc1", "kubernetes.io/glusterfs", "0s"}}}, + expected: []metav1beta1.TableRow{{Cells: []interface{}{"sc1", "kubernetes.io/glusterfs", "Delete", + "Immediate", false, "0s"}}}, }, { sc: storage.StorageClass{ @@ -4388,7 +4393,60 @@ func TestPrintStorageClass(t *testing.T) { }, Provisioner: "kubernetes.io/nfs", }, - expected: []metav1beta1.TableRow{{Cells: []interface{}{"sc2", "kubernetes.io/nfs", "5m"}}}, + expected: []metav1beta1.TableRow{{Cells: []interface{}{"sc2", "kubernetes.io/nfs", "Delete", + "Immediate", false, "5m"}}}, + }, + { + sc: storage.StorageClass{ + ObjectMeta: metav1.ObjectMeta{ + Name: "sc3", + CreationTimestamp: metav1.Time{Time: time.Now().Add(-3e11)}, + }, + Provisioner: "kubernetes.io/nfs", + ReclaimPolicy: &policyDelte, + }, + expected: []metav1beta1.TableRow{{Cells: []interface{}{"sc3", "kubernetes.io/nfs", "Delete", + "Immediate", false, "5m"}}}, + }, + { + sc: storage.StorageClass{ + ObjectMeta: metav1.ObjectMeta{ + Name: "sc4", + CreationTimestamp: metav1.Time{Time: time.Now().Add(-3e11)}, + }, + Provisioner: "kubernetes.io/nfs", + ReclaimPolicy: &policyRetain, + VolumeBindingMode: &bindModeImmediate, + }, + expected: []metav1beta1.TableRow{{Cells: []interface{}{"sc4", "kubernetes.io/nfs", "Retain", + "Immediate", false, "5m"}}}, + }, + { + sc: storage.StorageClass{ + ObjectMeta: metav1.ObjectMeta{ + Name: "sc5", + CreationTimestamp: metav1.Time{Time: time.Now().Add(-3e11)}, + }, + Provisioner: "kubernetes.io/nfs", + ReclaimPolicy: &policyRetain, + VolumeBindingMode: &bindModeWait, + }, + expected: []metav1beta1.TableRow{{Cells: []interface{}{"sc5", "kubernetes.io/nfs", "Retain", + "WaitForFirstConsumer", false, "5m"}}}, + }, + { + sc: storage.StorageClass{ + ObjectMeta: metav1.ObjectMeta{ + Name: "sc6", + CreationTimestamp: metav1.Time{Time: time.Now().Add(-3e11)}, + }, + Provisioner: "kubernetes.io/nfs", + ReclaimPolicy: &policyRetain, + AllowVolumeExpansion: boolP(true), + VolumeBindingMode: &bindModeWait, + }, + expected: []metav1beta1.TableRow{{Cells: []interface{}{"sc6", "kubernetes.io/nfs", "Retain", + "WaitForFirstConsumer", true, "5m"}}}, }, }