mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Merge pull request #84277 from liggitt/beta-aggregator-discovery
Do not list apiextensions.k8s.io/v1beta1 in discovery when disabled
This commit is contained in:
commit
02ee2421f5
@ -17,6 +17,7 @@ limitations under the License.
|
||||
package apiserver
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
@ -190,9 +191,18 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
|
||||
return nil, err
|
||||
}
|
||||
|
||||
enabledVersions := sets.NewString()
|
||||
for v := range apiGroupInfo.VersionedResourcesStorageMap {
|
||||
enabledVersions.Insert(v)
|
||||
}
|
||||
if !enabledVersions.Has(v1.SchemeGroupVersion.Version) {
|
||||
return nil, fmt.Errorf("API group/version %s must be enabled", v1.SchemeGroupVersion.String())
|
||||
}
|
||||
|
||||
apisHandler := &apisHandler{
|
||||
codecs: aggregatorscheme.Codecs,
|
||||
lister: s.lister,
|
||||
codecs: aggregatorscheme.Codecs,
|
||||
lister: s.lister,
|
||||
discoveryGroup: discoveryGroup(enabledVersions),
|
||||
}
|
||||
s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", apisHandler)
|
||||
s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandle("/apis/", apisHandler)
|
||||
|
@ -24,6 +24,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/apiserver/pkg/endpoints/handlers/negotiation"
|
||||
"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
|
||||
|
||||
@ -36,33 +37,41 @@ import (
|
||||
// apisHandler serves the `/apis` endpoint.
|
||||
// This is registered as a filter so that it never collides with any explicitly registered endpoints
|
||||
type apisHandler struct {
|
||||
codecs serializer.CodecFactory
|
||||
lister listers.APIServiceLister
|
||||
codecs serializer.CodecFactory
|
||||
lister listers.APIServiceLister
|
||||
discoveryGroup metav1.APIGroup
|
||||
}
|
||||
|
||||
var discoveryGroup = metav1.APIGroup{
|
||||
Name: apiregistrationv1api.GroupName,
|
||||
Versions: []metav1.GroupVersionForDiscovery{
|
||||
{
|
||||
func discoveryGroup(enabledVersions sets.String) metav1.APIGroup {
|
||||
retval := metav1.APIGroup{
|
||||
Name: apiregistrationv1api.GroupName,
|
||||
Versions: []metav1.GroupVersionForDiscovery{
|
||||
{
|
||||
GroupVersion: apiregistrationv1api.SchemeGroupVersion.String(),
|
||||
Version: apiregistrationv1api.SchemeGroupVersion.Version,
|
||||
},
|
||||
},
|
||||
PreferredVersion: metav1.GroupVersionForDiscovery{
|
||||
GroupVersion: apiregistrationv1api.SchemeGroupVersion.String(),
|
||||
Version: apiregistrationv1api.SchemeGroupVersion.Version,
|
||||
},
|
||||
{
|
||||
}
|
||||
|
||||
if enabledVersions.Has(apiregistrationv1beta1api.SchemeGroupVersion.Version) {
|
||||
retval.Versions = append(retval.Versions, metav1.GroupVersionForDiscovery{
|
||||
GroupVersion: apiregistrationv1beta1api.SchemeGroupVersion.String(),
|
||||
Version: apiregistrationv1beta1api.SchemeGroupVersion.Version,
|
||||
},
|
||||
},
|
||||
PreferredVersion: metav1.GroupVersionForDiscovery{
|
||||
GroupVersion: apiregistrationv1api.SchemeGroupVersion.String(),
|
||||
Version: apiregistrationv1api.SchemeGroupVersion.Version,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
return retval
|
||||
}
|
||||
|
||||
func (r *apisHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||
discoveryGroupList := &metav1.APIGroupList{
|
||||
// always add OUR api group to the list first. Since we'll never have a registered APIService for it
|
||||
// and since this is the crux of the API, having this first will give our names priority. It's good to be king.
|
||||
Groups: []metav1.APIGroup{discoveryGroup},
|
||||
Groups: []metav1.APIGroup{r.discoveryGroup},
|
||||
}
|
||||
|
||||
apiServices, err := r.lister.List(labels.Everything())
|
||||
|
@ -27,6 +27,7 @@ import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/util/diff"
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/client-go/tools/cache"
|
||||
|
||||
apiregistration "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
|
||||
@ -37,21 +38,35 @@ import (
|
||||
func TestAPIs(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
enabled sets.String
|
||||
apiservices []*apiregistration.APIService
|
||||
expected *metav1.APIGroupList
|
||||
}{
|
||||
{
|
||||
name: "empty",
|
||||
enabled: sets.NewString("v1", "v1beta1"),
|
||||
apiservices: []*apiregistration.APIService{},
|
||||
expected: &metav1.APIGroupList{
|
||||
TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
|
||||
Groups: []metav1.APIGroup{
|
||||
discoveryGroup,
|
||||
discoveryGroup(sets.NewString("v1", "v1beta1")),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "simple add",
|
||||
name: "v1 only",
|
||||
enabled: sets.NewString("v1"),
|
||||
apiservices: []*apiregistration.APIService{},
|
||||
expected: &metav1.APIGroupList{
|
||||
TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
|
||||
Groups: []metav1.APIGroup{
|
||||
discoveryGroup(sets.NewString("v1")),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "simple add",
|
||||
enabled: sets.NewString("v1", "v1beta1"),
|
||||
apiservices: []*apiregistration.APIService{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "v1.foo"},
|
||||
@ -91,7 +106,7 @@ func TestAPIs(t *testing.T) {
|
||||
expected: &metav1.APIGroupList{
|
||||
TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
|
||||
Groups: []metav1.APIGroup{
|
||||
discoveryGroup,
|
||||
discoveryGroup(sets.NewString("v1", "v1beta1")),
|
||||
{
|
||||
Name: "foo",
|
||||
Versions: []metav1.GroupVersionForDiscovery{
|
||||
@ -122,7 +137,8 @@ func TestAPIs(t *testing.T) {
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "sorting",
|
||||
name: "sorting",
|
||||
enabled: sets.NewString("v1", "v1beta1"),
|
||||
apiservices: []*apiregistration.APIService{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "v1.foo"},
|
||||
@ -198,7 +214,7 @@ func TestAPIs(t *testing.T) {
|
||||
expected: &metav1.APIGroupList{
|
||||
TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
|
||||
Groups: []metav1.APIGroup{
|
||||
discoveryGroup,
|
||||
discoveryGroup(sets.NewString("v1", "v1beta1")),
|
||||
{
|
||||
Name: "foo",
|
||||
Versions: []metav1.GroupVersionForDiscovery{
|
||||
@ -237,7 +253,8 @@ func TestAPIs(t *testing.T) {
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "unavailable service",
|
||||
name: "unavailable service",
|
||||
enabled: sets.NewString("v1", "v1beta1"),
|
||||
apiservices: []*apiregistration.APIService{
|
||||
{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "v1.foo"},
|
||||
@ -260,7 +277,7 @@ func TestAPIs(t *testing.T) {
|
||||
expected: &metav1.APIGroupList{
|
||||
TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
|
||||
Groups: []metav1.APIGroup{
|
||||
discoveryGroup,
|
||||
discoveryGroup(sets.NewString("v1", "v1beta1")),
|
||||
{
|
||||
Name: "foo",
|
||||
Versions: []metav1.GroupVersionForDiscovery{
|
||||
@ -282,8 +299,9 @@ func TestAPIs(t *testing.T) {
|
||||
for _, tc := range tests {
|
||||
indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc})
|
||||
handler := &apisHandler{
|
||||
codecs: aggregatorscheme.Codecs,
|
||||
lister: listers.NewAPIServiceLister(indexer),
|
||||
codecs: aggregatorscheme.Codecs,
|
||||
lister: listers.NewAPIServiceLister(indexer),
|
||||
discoveryGroup: discoveryGroup(tc.enabled),
|
||||
}
|
||||
for _, o := range tc.apiservices {
|
||||
indexer.Add(o)
|
||||
|
Loading…
Reference in New Issue
Block a user