Skip to content

Commit 8d766e7

Browse files
liggittk8s-publishing-bot
authored andcommitted
Avoid returning nil responseKind in v1beta1 aggregated discovery
Kubernetes-commit: 1876ddf71497bad349f7c4df24c2e22356d3bad9
1 parent dcfe307 commit 8d766e7

File tree

2 files changed

+74
-2
lines changed

2 files changed

+74
-2
lines changed

discovery/aggregated_discovery.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ func convertAPIGroup(g apidiscovery.APIGroupDiscovery) (
111111
return group, gvResources, failedGVs
112112
}
113113

114+
var emptyKind = metav1.GroupVersionKind{}
115+
114116
// convertAPIResource tranforms a APIResourceDiscovery to an APIResource. We are
115117
// resilient to missing GVK, since this resource might be the parent resource
116118
// 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
125127
Categories: in.Categories,
126128
}
127129
var err error
128-
if in.ResponseKind != nil {
130+
if in.ResponseKind != nil && (*in.ResponseKind) != emptyKind {
129131
result.Group = in.ResponseKind.Group
130132
result.Version = in.ResponseKind.Version
131133
result.Kind = in.ResponseKind.Kind
@@ -140,7 +142,7 @@ func convertAPIResource(in apidiscovery.APIResourceDiscovery) (metav1.APIResourc
140142
// convertAPISubresource tranforms a APISubresourceDiscovery to an APIResource.
141143
func convertAPISubresource(parent metav1.APIResource, in apidiscovery.APISubresourceDiscovery) (metav1.APIResource, error) {
142144
result := metav1.APIResource{}
143-
if in.ResponseKind == nil {
145+
if in.ResponseKind == nil || (*in.ResponseKind) == emptyKind {
144146
return result, fmt.Errorf("subresource %s/%s missing GVK", parent.Name, in.Subresource)
145147
}
146148
result.Name = fmt.Sprintf("%s/%s", parent.Name, in.Subresource)

discovery/aggregated_discovery_test.go

+70
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,76 @@ func TestSplitGroupsAndResources(t *testing.T) {
610610
},
611611
expectedFailedGVs: map[schema.GroupVersion]error{},
612612
},
613+
{
614+
name: "Aggregated discovery with single subresource and parent empty GVK",
615+
agg: apidiscovery.APIGroupDiscoveryList{
616+
Items: []apidiscovery.APIGroupDiscovery{
617+
{
618+
ObjectMeta: metav1.ObjectMeta{
619+
Name: "external.metrics.k8s.io",
620+
},
621+
Versions: []apidiscovery.APIVersionDiscovery{
622+
{
623+
Version: "v1beta1",
624+
Resources: []apidiscovery.APIResourceDiscovery{
625+
{
626+
// resilient to empty GVK for parent
627+
Resource: "*",
628+
Scope: apidiscovery.ScopeNamespace,
629+
SingularResource: "",
630+
ResponseKind: &metav1.GroupVersionKind{},
631+
Subresources: []apidiscovery.APISubresourceDiscovery{
632+
{
633+
Subresource: "other-external-metric",
634+
ResponseKind: &metav1.GroupVersionKind{
635+
Kind: "MetricValueList",
636+
},
637+
Verbs: []string{"get"},
638+
},
639+
},
640+
},
641+
},
642+
},
643+
},
644+
},
645+
},
646+
},
647+
expectedGroups: metav1.APIGroupList{
648+
Groups: []metav1.APIGroup{
649+
{
650+
Name: "external.metrics.k8s.io",
651+
Versions: []metav1.GroupVersionForDiscovery{
652+
{
653+
GroupVersion: "external.metrics.k8s.io/v1beta1",
654+
Version: "v1beta1",
655+
},
656+
},
657+
PreferredVersion: metav1.GroupVersionForDiscovery{
658+
GroupVersion: "external.metrics.k8s.io/v1beta1",
659+
Version: "v1beta1",
660+
},
661+
},
662+
},
663+
},
664+
expectedGVResources: map[schema.GroupVersion]*metav1.APIResourceList{
665+
{Group: "external.metrics.k8s.io", Version: "v1beta1"}: {
666+
GroupVersion: "external.metrics.k8s.io/v1beta1",
667+
APIResources: []metav1.APIResource{
668+
// Since parent GVK was nil, it is NOT returned--only the subresource.
669+
{
670+
Name: "*/other-external-metric",
671+
SingularName: "",
672+
Namespaced: true,
673+
Group: "",
674+
Version: "",
675+
Kind: "MetricValueList",
676+
Verbs: []string{"get"},
677+
},
678+
},
679+
},
680+
},
681+
expectedFailedGVs: map[schema.GroupVersion]error{},
682+
},
613683
{
614684
name: "Aggregated discovery with multiple subresources",
615685
agg: apidiscovery.APIGroupDiscoveryList{

0 commit comments

Comments
 (0)