kubernetes / client-go

Go client for Kubernetes.
Apache License 2.0
8.99k stars 2.93k forks source link

TypeMeta is empty on .List() resources #1328

Open gprossliner opened 8 months ago

gprossliner commented 8 months ago

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.

dprotaso commented 8 months ago

Does the API server return the type meta for list entries?

gprossliner commented 7 months ago

Yes. It is returned, but reset by client-go. After fetching from the server all information is present, but the func (d WithoutVersionDecoder) Decode func (see posting) clear that information.

k8s-triage-robot commented 4 months ago

The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle stale

k8s-triage-robot commented 3 months ago

The Kubernetes project currently lacks enough active contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle rotten

petr-muller commented 3 months ago

/remove-lifecycle rotten

k8s-triage-robot commented 3 weeks ago

The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle stale