From 4438208511eb989027454216bc5739adc8ee9bf2 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Wed, 12 Apr 2023 12:35:57 +0200 Subject: [PATCH] api: encode NamespacedName with lower case in JSON That is how a workaround in controller-runtime has encoded NamespacedName (https://github.com/kubernetes-sigs/controller-runtime/blob/a33d038b84d0e7f615b8d803bdc47f0d1f8484b7/pkg/log/zap/kube_helpers.go#L49-L57) and it is also more consistent with Kubernetes API standards. The namespace can be left out. Returning an anonymous struct in MarshalLog makes it impossible for controller-runtime to adapt the type and thus blocks updating controller-runtime to Kubernetes 1.27 because log content would change. --- .../src/k8s.io/apimachinery/pkg/types/namespacedname.go | 3 ++- staging/src/k8s.io/component-base/logs/json/json_test.go | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/staging/src/k8s.io/apimachinery/pkg/types/namespacedname.go b/staging/src/k8s.io/apimachinery/pkg/types/namespacedname.go index 29fb4f950a4..db18ce1ce21 100644 --- a/staging/src/k8s.io/apimachinery/pkg/types/namespacedname.go +++ b/staging/src/k8s.io/apimachinery/pkg/types/namespacedname.go @@ -41,7 +41,8 @@ func (n NamespacedName) String() string { // MarshalLog emits a struct containing required key/value pair func (n NamespacedName) MarshalLog() interface{} { return struct { - Name, Namespace string + Name string `json:"name"` + Namespace string `json:"namespace,omitempty"` }{ Name: n.Name, Namespace: n.Namespace, diff --git a/staging/src/k8s.io/component-base/logs/json/json_test.go b/staging/src/k8s.io/component-base/logs/json/json_test.go index 3de190e3cdf..2c21b4af9ab 100644 --- a/staging/src/k8s.io/component-base/logs/json/json_test.go +++ b/staging/src/k8s.io/component-base/logs/json/json_test.go @@ -74,9 +74,14 @@ func TestZapLoggerInfo(t *testing.T) { }, { msg: "test for NamespacedName argument", - format: "{\"ts\":%f,\"caller\":\"json/json_test.go:%d\",\"msg\":\"test for NamespacedName argument\",\"v\":0,\"obj\":{\"Name\":\"kube-proxy\",\"Namespace\":\"kube-system\"}}\n", + format: "{\"ts\":%f,\"caller\":\"json/json_test.go:%d\",\"msg\":\"test for NamespacedName argument\",\"v\":0,\"obj\":{\"name\":\"kube-proxy\",\"namespace\":\"kube-system\"}}\n", keysValues: []interface{}{"obj", types.NamespacedName{Name: "kube-proxy", Namespace: "kube-system"}}, }, + { + msg: "test for NamespacedName argument with no namespace", + format: "{\"ts\":%f,\"caller\":\"json/json_test.go:%d\",\"msg\":\"test for NamespacedName argument with no namespace\",\"v\":0,\"obj\":{\"name\":\"kube-proxy\"}}\n", + keysValues: []interface{}{"obj", types.NamespacedName{Name: "kube-proxy"}}, + }, } for _, data := range testDataInfo {