Skip to content

Commit 02ee242

Browse files
authored
Merge pull request kubernetes#84277 from liggitt/beta-aggregator-discovery
Do not list apiextensions.k8s.io/v1beta1 in discovery when disabled
2 parents 09a251c + 92a961f commit 02ee242

File tree

3 files changed

+62
-25
lines changed

3 files changed

+62
-25
lines changed

staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package apiserver
1818

1919
import (
20+
"fmt"
2021
"net/http"
2122
"time"
2223

@@ -190,9 +191,18 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
190191
return nil, err
191192
}
192193

194+
enabledVersions := sets.NewString()
195+
for v := range apiGroupInfo.VersionedResourcesStorageMap {
196+
enabledVersions.Insert(v)
197+
}
198+
if !enabledVersions.Has(v1.SchemeGroupVersion.Version) {
199+
return nil, fmt.Errorf("API group/version %s must be enabled", v1.SchemeGroupVersion.String())
200+
}
201+
193202
apisHandler := &apisHandler{
194-
codecs: aggregatorscheme.Codecs,
195-
lister: s.lister,
203+
codecs: aggregatorscheme.Codecs,
204+
lister: s.lister,
205+
discoveryGroup: discoveryGroup(enabledVersions),
196206
}
197207
s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", apisHandler)
198208
s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandle("/apis/", apisHandler)

staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_apis.go

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"k8s.io/apimachinery/pkg/labels"
2525
"k8s.io/apimachinery/pkg/runtime/schema"
2626
"k8s.io/apimachinery/pkg/runtime/serializer"
27+
"k8s.io/apimachinery/pkg/util/sets"
2728
"k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
2829
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
2930

@@ -36,33 +37,41 @@ import (
3637
// apisHandler serves the `/apis` endpoint.
3738
// This is registered as a filter so that it never collides with any explicitly registered endpoints
3839
type apisHandler struct {
39-
codecs serializer.CodecFactory
40-
lister listers.APIServiceLister
40+
codecs serializer.CodecFactory
41+
lister listers.APIServiceLister
42+
discoveryGroup metav1.APIGroup
4143
}
4244

43-
var discoveryGroup = metav1.APIGroup{
44-
Name: apiregistrationv1api.GroupName,
45-
Versions: []metav1.GroupVersionForDiscovery{
46-
{
45+
func discoveryGroup(enabledVersions sets.String) metav1.APIGroup {
46+
retval := metav1.APIGroup{
47+
Name: apiregistrationv1api.GroupName,
48+
Versions: []metav1.GroupVersionForDiscovery{
49+
{
50+
GroupVersion: apiregistrationv1api.SchemeGroupVersion.String(),
51+
Version: apiregistrationv1api.SchemeGroupVersion.Version,
52+
},
53+
},
54+
PreferredVersion: metav1.GroupVersionForDiscovery{
4755
GroupVersion: apiregistrationv1api.SchemeGroupVersion.String(),
4856
Version: apiregistrationv1api.SchemeGroupVersion.Version,
4957
},
50-
{
58+
}
59+
60+
if enabledVersions.Has(apiregistrationv1beta1api.SchemeGroupVersion.Version) {
61+
retval.Versions = append(retval.Versions, metav1.GroupVersionForDiscovery{
5162
GroupVersion: apiregistrationv1beta1api.SchemeGroupVersion.String(),
5263
Version: apiregistrationv1beta1api.SchemeGroupVersion.Version,
53-
},
54-
},
55-
PreferredVersion: metav1.GroupVersionForDiscovery{
56-
GroupVersion: apiregistrationv1api.SchemeGroupVersion.String(),
57-
Version: apiregistrationv1api.SchemeGroupVersion.Version,
58-
},
64+
})
65+
}
66+
67+
return retval
5968
}
6069

6170
func (r *apisHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
6271
discoveryGroupList := &metav1.APIGroupList{
6372
// always add OUR api group to the list first. Since we'll never have a registered APIService for it
6473
// and since this is the crux of the API, having this first will give our names priority. It's good to be king.
65-
Groups: []metav1.APIGroup{discoveryGroup},
74+
Groups: []metav1.APIGroup{r.discoveryGroup},
6675
}
6776

6877
apiServices, err := r.lister.List(labels.Everything())

staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_apis_test.go

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2828
"k8s.io/apimachinery/pkg/runtime"
2929
"k8s.io/apimachinery/pkg/util/diff"
30+
"k8s.io/apimachinery/pkg/util/sets"
3031
"k8s.io/client-go/tools/cache"
3132

3233
apiregistration "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
@@ -37,21 +38,35 @@ import (
3738
func TestAPIs(t *testing.T) {
3839
tests := []struct {
3940
name string
41+
enabled sets.String
4042
apiservices []*apiregistration.APIService
4143
expected *metav1.APIGroupList
4244
}{
4345
{
4446
name: "empty",
47+
enabled: sets.NewString("v1", "v1beta1"),
4548
apiservices: []*apiregistration.APIService{},
4649
expected: &metav1.APIGroupList{
4750
TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
4851
Groups: []metav1.APIGroup{
49-
discoveryGroup,
52+
discoveryGroup(sets.NewString("v1", "v1beta1")),
5053
},
5154
},
5255
},
5356
{
54-
name: "simple add",
57+
name: "v1 only",
58+
enabled: sets.NewString("v1"),
59+
apiservices: []*apiregistration.APIService{},
60+
expected: &metav1.APIGroupList{
61+
TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
62+
Groups: []metav1.APIGroup{
63+
discoveryGroup(sets.NewString("v1")),
64+
},
65+
},
66+
},
67+
{
68+
name: "simple add",
69+
enabled: sets.NewString("v1", "v1beta1"),
5570
apiservices: []*apiregistration.APIService{
5671
{
5772
ObjectMeta: metav1.ObjectMeta{Name: "v1.foo"},
@@ -91,7 +106,7 @@ func TestAPIs(t *testing.T) {
91106
expected: &metav1.APIGroupList{
92107
TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
93108
Groups: []metav1.APIGroup{
94-
discoveryGroup,
109+
discoveryGroup(sets.NewString("v1", "v1beta1")),
95110
{
96111
Name: "foo",
97112
Versions: []metav1.GroupVersionForDiscovery{
@@ -122,7 +137,8 @@ func TestAPIs(t *testing.T) {
122137
},
123138
},
124139
{
125-
name: "sorting",
140+
name: "sorting",
141+
enabled: sets.NewString("v1", "v1beta1"),
126142
apiservices: []*apiregistration.APIService{
127143
{
128144
ObjectMeta: metav1.ObjectMeta{Name: "v1.foo"},
@@ -198,7 +214,7 @@ func TestAPIs(t *testing.T) {
198214
expected: &metav1.APIGroupList{
199215
TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
200216
Groups: []metav1.APIGroup{
201-
discoveryGroup,
217+
discoveryGroup(sets.NewString("v1", "v1beta1")),
202218
{
203219
Name: "foo",
204220
Versions: []metav1.GroupVersionForDiscovery{
@@ -237,7 +253,8 @@ func TestAPIs(t *testing.T) {
237253
},
238254
},
239255
{
240-
name: "unavailable service",
256+
name: "unavailable service",
257+
enabled: sets.NewString("v1", "v1beta1"),
241258
apiservices: []*apiregistration.APIService{
242259
{
243260
ObjectMeta: metav1.ObjectMeta{Name: "v1.foo"},
@@ -260,7 +277,7 @@ func TestAPIs(t *testing.T) {
260277
expected: &metav1.APIGroupList{
261278
TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
262279
Groups: []metav1.APIGroup{
263-
discoveryGroup,
280+
discoveryGroup(sets.NewString("v1", "v1beta1")),
264281
{
265282
Name: "foo",
266283
Versions: []metav1.GroupVersionForDiscovery{
@@ -282,8 +299,9 @@ func TestAPIs(t *testing.T) {
282299
for _, tc := range tests {
283300
indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
284301
handler := &apisHandler{
285-
codecs: aggregatorscheme.Codecs,
286-
lister: listers.NewAPIServiceLister(indexer),
302+
codecs: aggregatorscheme.Codecs,
303+
lister: listers.NewAPIServiceLister(indexer),
304+
discoveryGroup: discoveryGroup(tc.enabled),
287305
}
288306
for _, o := range tc.apiservices {
289307
indexer.Add(o)

0 commit comments

Comments
 (0)