From e8cd28ae57f3abbe36064a3de17aa9ae359c1608 Mon Sep 17 00:00:00 2001 From: Shimin Guo Date: Tue, 17 Jul 2018 12:34:20 -0700 Subject: [PATCH] fix a panic due to assignment to nil map --- pkg/kubelet/kubelet_node_status.go | 3 +++ pkg/kubelet/kubelet_node_status_test.go | 27 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/pkg/kubelet/kubelet_node_status.go b/pkg/kubelet/kubelet_node_status.go index 17f85466961..21d6d82ee52 100644 --- a/pkg/kubelet/kubelet_node_status.go +++ b/pkg/kubelet/kubelet_node_status.go @@ -162,6 +162,9 @@ func (kl *Kubelet) updateDefaultLabels(initialNode, existingNode *v1.Node) bool } var needsUpdate bool = false + if existingNode.Labels == nil { + existingNode.Labels = make(map[string]string) + } //Set default labels but make sure to not set labels with empty values for _, label := range defaultLabels { if _, hasInitialValue := initialNode.Labels[label]; !hasInitialValue { diff --git a/pkg/kubelet/kubelet_node_status_test.go b/pkg/kubelet/kubelet_node_status_test.go index 6187c99e827..6cdc26e9e8f 100644 --- a/pkg/kubelet/kubelet_node_status_test.go +++ b/pkg/kubelet/kubelet_node_status_test.go @@ -1414,6 +1414,33 @@ func TestUpdateDefaultLabels(t *testing.T) { kubeletapis.LabelArch: "new-arch", }, }, + { + name: "not panic when existing node has nil labels", + initialNode: &v1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + kubeletapis.LabelHostname: "new-hostname", + kubeletapis.LabelZoneFailureDomain: "new-zone-failure-domain", + kubeletapis.LabelZoneRegion: "new-zone-region", + kubeletapis.LabelInstanceType: "new-instance-type", + kubeletapis.LabelOS: "new-os", + kubeletapis.LabelArch: "new-arch", + }, + }, + }, + existingNode: &v1.Node{ + ObjectMeta: metav1.ObjectMeta{}, + }, + needsUpdate: true, + finalLabels: map[string]string{ + kubeletapis.LabelHostname: "new-hostname", + kubeletapis.LabelZoneFailureDomain: "new-zone-failure-domain", + kubeletapis.LabelZoneRegion: "new-zone-region", + kubeletapis.LabelInstanceType: "new-instance-type", + kubeletapis.LabelOS: "new-os", + kubeletapis.LabelArch: "new-arch", + }, + }, } for _, tc := range cases {