diff --git a/cluster-autoscaler/clusterstate/utils/status.go b/cluster-autoscaler/clusterstate/utils/status.go index 3636abf721..c1917b44b1 100644 --- a/cluster-autoscaler/clusterstate/utils/status.go +++ b/cluster-autoscaler/clusterstate/utils/status.go @@ -91,6 +91,9 @@ func WriteStatusConfigMap(kubeClient kube_client.Interface, namespace string, ms maps := kubeClient.CoreV1().ConfigMaps(namespace) configMap, getStatusError = maps.Get(context.TODO(), statusConfigMapName, metav1.GetOptions{}) if getStatusError == nil { + if configMap.Data == nil { + configMap.Data = make(map[string]string) + } configMap.Data["status"] = statusMsg if configMap.ObjectMeta.Annotations == nil { configMap.ObjectMeta.Annotations = make(map[string]string) diff --git a/cluster-autoscaler/clusterstate/utils/status_test.go b/cluster-autoscaler/clusterstate/utils/status_test.go index a0dc5dab82..ff96a2f0f0 100644 --- a/cluster-autoscaler/clusterstate/utils/status_test.go +++ b/cluster-autoscaler/clusterstate/utils/status_test.go @@ -95,6 +95,17 @@ func TestWriteStatusConfigMapExisting(t *testing.T) { assert.True(t, ti.getCalled) assert.True(t, ti.updateCalled) assert.False(t, ti.createCalled) + + // to test the case where configmap is empty + ti.configMap.Data = nil + result, err = WriteStatusConfigMap(ti.client, ti.namespace, "TEST_MSG", nil, "my-cool-configmap") + assert.Equal(t, ti.configMap, result) + assert.Contains(t, result.Data["status"], "TEST_MSG") + assert.Contains(t, result.ObjectMeta.Annotations, ConfigMapLastUpdatedKey) + assert.Nil(t, err) + assert.True(t, ti.getCalled) + assert.True(t, ti.updateCalled) + assert.False(t, ti.createCalled) } func TestWriteStatusConfigMapCreate(t *testing.T) {