mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 12:18:16 +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:
		@@ -17,6 +17,7 @@ limitations under the License.
 | 
				
			|||||||
package apiserver
 | 
					package apiserver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -190,9 +191,18 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
 | 
				
			|||||||
		return nil, err
 | 
							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{
 | 
						apisHandler := &apisHandler{
 | 
				
			||||||
		codecs:         aggregatorscheme.Codecs,
 | 
							codecs:         aggregatorscheme.Codecs,
 | 
				
			||||||
		lister:         s.lister,
 | 
							lister:         s.lister,
 | 
				
			||||||
 | 
							discoveryGroup: discoveryGroup(enabledVersions),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", apisHandler)
 | 
						s.GenericAPIServer.Handler.NonGoRestfulMux.Handle("/apis", apisHandler)
 | 
				
			||||||
	s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandle("/apis/", apisHandler)
 | 
						s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandle("/apis/", apisHandler)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@ import (
 | 
				
			|||||||
	"k8s.io/apimachinery/pkg/labels"
 | 
						"k8s.io/apimachinery/pkg/labels"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
						"k8s.io/apimachinery/pkg/runtime/schema"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/serializer"
 | 
						"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/negotiation"
 | 
				
			||||||
	"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
 | 
						"k8s.io/apiserver/pkg/endpoints/handlers/responsewriters"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -38,19 +39,17 @@ import (
 | 
				
			|||||||
type apisHandler struct {
 | 
					type apisHandler struct {
 | 
				
			||||||
	codecs         serializer.CodecFactory
 | 
						codecs         serializer.CodecFactory
 | 
				
			||||||
	lister         listers.APIServiceLister
 | 
						lister         listers.APIServiceLister
 | 
				
			||||||
 | 
						discoveryGroup metav1.APIGroup
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var discoveryGroup = metav1.APIGroup{
 | 
					func discoveryGroup(enabledVersions sets.String) metav1.APIGroup {
 | 
				
			||||||
 | 
						retval := metav1.APIGroup{
 | 
				
			||||||
		Name: apiregistrationv1api.GroupName,
 | 
							Name: apiregistrationv1api.GroupName,
 | 
				
			||||||
		Versions: []metav1.GroupVersionForDiscovery{
 | 
							Versions: []metav1.GroupVersionForDiscovery{
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				GroupVersion: apiregistrationv1api.SchemeGroupVersion.String(),
 | 
									GroupVersion: apiregistrationv1api.SchemeGroupVersion.String(),
 | 
				
			||||||
				Version:      apiregistrationv1api.SchemeGroupVersion.Version,
 | 
									Version:      apiregistrationv1api.SchemeGroupVersion.Version,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			GroupVersion: apiregistrationv1beta1api.SchemeGroupVersion.String(),
 | 
					 | 
				
			||||||
			Version:      apiregistrationv1beta1api.SchemeGroupVersion.Version,
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		PreferredVersion: metav1.GroupVersionForDiscovery{
 | 
							PreferredVersion: metav1.GroupVersionForDiscovery{
 | 
				
			||||||
			GroupVersion: apiregistrationv1api.SchemeGroupVersion.String(),
 | 
								GroupVersion: apiregistrationv1api.SchemeGroupVersion.String(),
 | 
				
			||||||
@@ -58,11 +57,21 @@ var discoveryGroup = metav1.APIGroup{
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if enabledVersions.Has(apiregistrationv1beta1api.SchemeGroupVersion.Version) {
 | 
				
			||||||
 | 
							retval.Versions = append(retval.Versions, metav1.GroupVersionForDiscovery{
 | 
				
			||||||
 | 
								GroupVersion: apiregistrationv1beta1api.SchemeGroupVersion.String(),
 | 
				
			||||||
 | 
								Version:      apiregistrationv1beta1api.SchemeGroupVersion.Version,
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return retval
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (r *apisHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
 | 
					func (r *apisHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
 | 
				
			||||||
	discoveryGroupList := &metav1.APIGroupList{
 | 
						discoveryGroupList := &metav1.APIGroupList{
 | 
				
			||||||
		// always add OUR api group to the list first.  Since we'll never have a registered APIService for it
 | 
							// 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.
 | 
							// 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())
 | 
						apiServices, err := r.lister.List(labels.Everything())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,7 @@ import (
 | 
				
			|||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/diff"
 | 
						"k8s.io/apimachinery/pkg/util/diff"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/util/sets"
 | 
				
			||||||
	"k8s.io/client-go/tools/cache"
 | 
						"k8s.io/client-go/tools/cache"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiregistration "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
 | 
						apiregistration "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
 | 
				
			||||||
@@ -37,21 +38,35 @@ import (
 | 
				
			|||||||
func TestAPIs(t *testing.T) {
 | 
					func TestAPIs(t *testing.T) {
 | 
				
			||||||
	tests := []struct {
 | 
						tests := []struct {
 | 
				
			||||||
		name        string
 | 
							name        string
 | 
				
			||||||
 | 
							enabled     sets.String
 | 
				
			||||||
		apiservices []*apiregistration.APIService
 | 
							apiservices []*apiregistration.APIService
 | 
				
			||||||
		expected    *metav1.APIGroupList
 | 
							expected    *metav1.APIGroupList
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:        "empty",
 | 
								name:        "empty",
 | 
				
			||||||
 | 
								enabled:     sets.NewString("v1", "v1beta1"),
 | 
				
			||||||
			apiservices: []*apiregistration.APIService{},
 | 
								apiservices: []*apiregistration.APIService{},
 | 
				
			||||||
			expected: &metav1.APIGroupList{
 | 
								expected: &metav1.APIGroupList{
 | 
				
			||||||
				TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
 | 
									TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
 | 
				
			||||||
				Groups: []metav1.APIGroup{
 | 
									Groups: []metav1.APIGroup{
 | 
				
			||||||
					discoveryGroup,
 | 
										discoveryGroup(sets.NewString("v1", "v1beta1")),
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								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",
 | 
								name:    "simple add",
 | 
				
			||||||
 | 
								enabled: sets.NewString("v1", "v1beta1"),
 | 
				
			||||||
			apiservices: []*apiregistration.APIService{
 | 
								apiservices: []*apiregistration.APIService{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					ObjectMeta: metav1.ObjectMeta{Name: "v1.foo"},
 | 
										ObjectMeta: metav1.ObjectMeta{Name: "v1.foo"},
 | 
				
			||||||
@@ -91,7 +106,7 @@ func TestAPIs(t *testing.T) {
 | 
				
			|||||||
			expected: &metav1.APIGroupList{
 | 
								expected: &metav1.APIGroupList{
 | 
				
			||||||
				TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
 | 
									TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
 | 
				
			||||||
				Groups: []metav1.APIGroup{
 | 
									Groups: []metav1.APIGroup{
 | 
				
			||||||
					discoveryGroup,
 | 
										discoveryGroup(sets.NewString("v1", "v1beta1")),
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						Name: "foo",
 | 
											Name: "foo",
 | 
				
			||||||
						Versions: []metav1.GroupVersionForDiscovery{
 | 
											Versions: []metav1.GroupVersionForDiscovery{
 | 
				
			||||||
@@ -123,6 +138,7 @@ func TestAPIs(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:    "sorting",
 | 
								name:    "sorting",
 | 
				
			||||||
 | 
								enabled: sets.NewString("v1", "v1beta1"),
 | 
				
			||||||
			apiservices: []*apiregistration.APIService{
 | 
								apiservices: []*apiregistration.APIService{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					ObjectMeta: metav1.ObjectMeta{Name: "v1.foo"},
 | 
										ObjectMeta: metav1.ObjectMeta{Name: "v1.foo"},
 | 
				
			||||||
@@ -198,7 +214,7 @@ func TestAPIs(t *testing.T) {
 | 
				
			|||||||
			expected: &metav1.APIGroupList{
 | 
								expected: &metav1.APIGroupList{
 | 
				
			||||||
				TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
 | 
									TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
 | 
				
			||||||
				Groups: []metav1.APIGroup{
 | 
									Groups: []metav1.APIGroup{
 | 
				
			||||||
					discoveryGroup,
 | 
										discoveryGroup(sets.NewString("v1", "v1beta1")),
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						Name: "foo",
 | 
											Name: "foo",
 | 
				
			||||||
						Versions: []metav1.GroupVersionForDiscovery{
 | 
											Versions: []metav1.GroupVersionForDiscovery{
 | 
				
			||||||
@@ -238,6 +254,7 @@ func TestAPIs(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:    "unavailable service",
 | 
								name:    "unavailable service",
 | 
				
			||||||
 | 
								enabled: sets.NewString("v1", "v1beta1"),
 | 
				
			||||||
			apiservices: []*apiregistration.APIService{
 | 
								apiservices: []*apiregistration.APIService{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					ObjectMeta: metav1.ObjectMeta{Name: "v1.foo"},
 | 
										ObjectMeta: metav1.ObjectMeta{Name: "v1.foo"},
 | 
				
			||||||
@@ -260,7 +277,7 @@ func TestAPIs(t *testing.T) {
 | 
				
			|||||||
			expected: &metav1.APIGroupList{
 | 
								expected: &metav1.APIGroupList{
 | 
				
			||||||
				TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
 | 
									TypeMeta: metav1.TypeMeta{Kind: "APIGroupList", APIVersion: "v1"},
 | 
				
			||||||
				Groups: []metav1.APIGroup{
 | 
									Groups: []metav1.APIGroup{
 | 
				
			||||||
					discoveryGroup,
 | 
										discoveryGroup(sets.NewString("v1", "v1beta1")),
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						Name: "foo",
 | 
											Name: "foo",
 | 
				
			||||||
						Versions: []metav1.GroupVersionForDiscovery{
 | 
											Versions: []metav1.GroupVersionForDiscovery{
 | 
				
			||||||
@@ -284,6 +301,7 @@ func TestAPIs(t *testing.T) {
 | 
				
			|||||||
		handler := &apisHandler{
 | 
							handler := &apisHandler{
 | 
				
			||||||
			codecs:         aggregatorscheme.Codecs,
 | 
								codecs:         aggregatorscheme.Codecs,
 | 
				
			||||||
			lister:         listers.NewAPIServiceLister(indexer),
 | 
								lister:         listers.NewAPIServiceLister(indexer),
 | 
				
			||||||
 | 
								discoveryGroup: discoveryGroup(tc.enabled),
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		for _, o := range tc.apiservices {
 | 
							for _, o := range tc.apiservices {
 | 
				
			||||||
			indexer.Add(o)
 | 
								indexer.Add(o)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user