mirror of
https://github.com/kubernetes/client-go.git
synced 2025-08-27 19:28:58 +00:00
Avoid returning nil responseKind in v1beta1 aggregated discovery
Kubernetes-commit: 1876ddf71497bad349f7c4df24c2e22356d3bad9
This commit is contained in:
parent
49410bfbbc
commit
bf44ac9180
@ -111,6 +111,8 @@ func convertAPIGroup(g apidiscovery.APIGroupDiscovery) (
|
|||||||
return group, gvResources, failedGVs
|
return group, gvResources, failedGVs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var emptyKind = metav1.GroupVersionKind{}
|
||||||
|
|
||||||
// convertAPIResource tranforms a APIResourceDiscovery to an APIResource. We are
|
// convertAPIResource tranforms a APIResourceDiscovery to an APIResource. We are
|
||||||
// resilient to missing GVK, since this resource might be the parent resource
|
// resilient to missing GVK, since this resource might be the parent resource
|
||||||
// for a subresource. If the parent is missing a GVK, it is not returned in
|
// for a subresource. If the parent is missing a GVK, it is not returned in
|
||||||
@ -125,7 +127,7 @@ func convertAPIResource(in apidiscovery.APIResourceDiscovery) (metav1.APIResourc
|
|||||||
Categories: in.Categories,
|
Categories: in.Categories,
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
if in.ResponseKind != nil {
|
if in.ResponseKind != nil && (*in.ResponseKind) != emptyKind {
|
||||||
result.Group = in.ResponseKind.Group
|
result.Group = in.ResponseKind.Group
|
||||||
result.Version = in.ResponseKind.Version
|
result.Version = in.ResponseKind.Version
|
||||||
result.Kind = in.ResponseKind.Kind
|
result.Kind = in.ResponseKind.Kind
|
||||||
@ -140,7 +142,7 @@ func convertAPIResource(in apidiscovery.APIResourceDiscovery) (metav1.APIResourc
|
|||||||
// convertAPISubresource tranforms a APISubresourceDiscovery to an APIResource.
|
// convertAPISubresource tranforms a APISubresourceDiscovery to an APIResource.
|
||||||
func convertAPISubresource(parent metav1.APIResource, in apidiscovery.APISubresourceDiscovery) (metav1.APIResource, error) {
|
func convertAPISubresource(parent metav1.APIResource, in apidiscovery.APISubresourceDiscovery) (metav1.APIResource, error) {
|
||||||
result := metav1.APIResource{}
|
result := metav1.APIResource{}
|
||||||
if in.ResponseKind == nil {
|
if in.ResponseKind == nil || (*in.ResponseKind) == emptyKind {
|
||||||
return result, fmt.Errorf("subresource %s/%s missing GVK", parent.Name, in.Subresource)
|
return result, fmt.Errorf("subresource %s/%s missing GVK", parent.Name, in.Subresource)
|
||||||
}
|
}
|
||||||
result.Name = fmt.Sprintf("%s/%s", parent.Name, in.Subresource)
|
result.Name = fmt.Sprintf("%s/%s", parent.Name, in.Subresource)
|
||||||
|
@ -610,6 +610,76 @@ func TestSplitGroupsAndResources(t *testing.T) {
|
|||||||
},
|
},
|
||||||
expectedFailedGVs: map[schema.GroupVersion]error{},
|
expectedFailedGVs: map[schema.GroupVersion]error{},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Aggregated discovery with single subresource and parent empty GVK",
|
||||||
|
agg: apidiscovery.APIGroupDiscoveryList{
|
||||||
|
Items: []apidiscovery.APIGroupDiscovery{
|
||||||
|
{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: "external.metrics.k8s.io",
|
||||||
|
},
|
||||||
|
Versions: []apidiscovery.APIVersionDiscovery{
|
||||||
|
{
|
||||||
|
Version: "v1beta1",
|
||||||
|
Resources: []apidiscovery.APIResourceDiscovery{
|
||||||
|
{
|
||||||
|
// resilient to empty GVK for parent
|
||||||
|
Resource: "*",
|
||||||
|
Scope: apidiscovery.ScopeNamespace,
|
||||||
|
SingularResource: "",
|
||||||
|
ResponseKind: &metav1.GroupVersionKind{},
|
||||||
|
Subresources: []apidiscovery.APISubresourceDiscovery{
|
||||||
|
{
|
||||||
|
Subresource: "other-external-metric",
|
||||||
|
ResponseKind: &metav1.GroupVersionKind{
|
||||||
|
Kind: "MetricValueList",
|
||||||
|
},
|
||||||
|
Verbs: []string{"get"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedGroups: metav1.APIGroupList{
|
||||||
|
Groups: []metav1.APIGroup{
|
||||||
|
{
|
||||||
|
Name: "external.metrics.k8s.io",
|
||||||
|
Versions: []metav1.GroupVersionForDiscovery{
|
||||||
|
{
|
||||||
|
GroupVersion: "external.metrics.k8s.io/v1beta1",
|
||||||
|
Version: "v1beta1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
PreferredVersion: metav1.GroupVersionForDiscovery{
|
||||||
|
GroupVersion: "external.metrics.k8s.io/v1beta1",
|
||||||
|
Version: "v1beta1",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedGVResources: map[schema.GroupVersion]*metav1.APIResourceList{
|
||||||
|
{Group: "external.metrics.k8s.io", Version: "v1beta1"}: {
|
||||||
|
GroupVersion: "external.metrics.k8s.io/v1beta1",
|
||||||
|
APIResources: []metav1.APIResource{
|
||||||
|
// Since parent GVK was nil, it is NOT returned--only the subresource.
|
||||||
|
{
|
||||||
|
Name: "*/other-external-metric",
|
||||||
|
SingularName: "",
|
||||||
|
Namespaced: true,
|
||||||
|
Group: "",
|
||||||
|
Version: "",
|
||||||
|
Kind: "MetricValueList",
|
||||||
|
Verbs: []string{"get"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expectedFailedGVs: map[schema.GroupVersion]error{},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "Aggregated discovery with multiple subresources",
|
name: "Aggregated discovery with multiple subresources",
|
||||||
agg: apidiscovery.APIGroupDiscoveryList{
|
agg: apidiscovery.APIGroupDiscoveryList{
|
||||||
|
Loading…
Reference in New Issue
Block a user