client-go icon indicating copy to clipboard operation
client-go copied to clipboard

TypeMeta is empty on .List() resources

Open gprossliner opened this issue 1 year ago • 5 comments

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.

gprossliner avatar Jan 15 '24 13:01 gprossliner