client-go
client-go copied to clipboard
TypeMeta is empty on .List() resources
This is basically a reopen from #541 because I did not see why @shsjshentao closed this in the first place.
After listing / getting resources with client-go (tested with Deployments, StatefulSets and DaemonSets), obj.TypeMeta
is empty. The fields Kind
and ApiVersion
are empty strings.
After the REST call and JSON deserialisation the data is still available, but is is explicitly cleared:
https://github.com/kubernetes/apimachinery/blob/02a41040d88da08de6765573ae2b1a51f424e1ca/pkg/runtime/helper.go#L255C8-L263
// Decode does not do conversion. It removes the gvk during deserialization.
func (d WithoutVersionDecoder) Decode(data []byte, defaults *schema.GroupVersionKind, into Object) (Object, *schema.GroupVersionKind, error) {
obj, gvk, err := d.Decoder.Decode(data, defaults, into)
if obj != nil {
kind := obj.GetObjectKind()
// clearing the gvk is just a convention of a codec
kind.SetGroupVersionKind(schema.GroupVersionKind{})
}
return obj, gvk, err
}
Is there any specific reason while this is necessary? This is valuable information that I need later to set OwnerReferences
and for logging. I tried with git blame to check for the commit / PR this was introduced, but there was no information.