From 07198b90bef9612a4448d0fe94f7a78acf8d92f6 Mon Sep 17 00:00:00 2001 From: xuzhenglun Date: Wed, 10 Jul 2024 12:09:35 +0800 Subject: [PATCH] fix panic when watching ReplicationController with AllowWatchBookmarks enabled --- pkg/printers/internalversion/printers.go | 6 +++++- pkg/printers/internalversion/printers_test.go | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pkg/printers/internalversion/printers.go b/pkg/printers/internalversion/printers.go index 0a4ddc4572a..e52a427cb14 100644 --- a/pkg/printers/internalversion/printers.go +++ b/pkg/printers/internalversion/printers.go @@ -1126,7 +1126,11 @@ func printReplicationController(obj *api.ReplicationController, options printers row.Cells = append(row.Cells, obj.Name, int64(desiredReplicas), int64(currentReplicas), int64(readyReplicas), translateTimestampSince(obj.CreationTimestamp)) if options.Wide { - names, images := layoutContainerCells(obj.Spec.Template.Spec.Containers) + var containers []api.Container + if obj.Spec.Template != nil { + containers = obj.Spec.Template.Spec.Containers + } + names, images := layoutContainerCells(containers) row.Cells = append(row.Cells, names, images, labels.FormatLabels(obj.Spec.Selector)) } return []metav1.TableRow{row}, nil diff --git a/pkg/printers/internalversion/printers_test.go b/pkg/printers/internalversion/printers_test.go index d7755cdb49e..e465b5999c1 100644 --- a/pkg/printers/internalversion/printers_test.go +++ b/pkg/printers/internalversion/printers_test.go @@ -4666,6 +4666,19 @@ func TestPrintReplicationController(t *testing.T) { // Columns: Name, Desired, Current, Ready, Age, Containers, Images, Selector expected: []metav1.TableRow{{Cells: []interface{}{"rc1", int64(5), int64(3), int64(1), "", "test", "test_image", "a=b"}}}, }, + { + // make sure Bookmark event will not lead a panic + rc: api.ReplicationController{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + metav1.InitialEventsAnnotationKey: "true", + }, + }, + }, + options: printers.GenerateOptions{Wide: true}, + // Columns: Name, Desired, Current, Ready, Age, Containers, Images, Selector + expected: []metav1.TableRow{{Cells: []interface{}{"", int64(0), int64(0), int64(0), "", "", "", ""}}}, + }, } for i, test := range tests {