Make API group enablement accurate for generic API server

This commit is contained in:
Jordan Liggitt
2026-02-18 14:45:22 -05:00
parent d56e985fa4
commit a64caab38f
3 changed files with 57 additions and 20 deletions

View File

@@ -80,7 +80,7 @@ func NewConfig(opts options.CompletedOptions) (*Config, error) {
genericConfig, versionedInformers, storageFactory, err := controlplaneapiserver.BuildGenericConfig(
opts,
[]*runtime.Scheme{legacyscheme.Scheme, apiextensionsapiserver.Scheme, aggregatorscheme.Scheme},
controlplane.DefaultAPIResourceConfigSource(),
controlplane.DefaultGenericAPIResourceConfigSource(),
generatedopenapi.GetOpenAPIDefinitions,
)
if err != nil {

View File

@@ -443,69 +443,88 @@ func (c CompletedConfig) StorageProviders(client *kubernetes.Clientset) ([]contr
}
var (
// stableAPIGroupVersionsEnabledByDefault is a list of our stable versions.
stableAPIGroupVersionsEnabledByDefault = []schema.GroupVersion{
// genericStableAPIGroupVersionsEnabledByDefault is a list of our stable versions for API groups provided by GenericStorageProviders.
genericStableAPIGroupVersionsEnabledByDefault = []schema.GroupVersion{
admissionregistrationv1.SchemeGroupVersion,
apiv1.SchemeGroupVersion,
appsv1.SchemeGroupVersion,
authenticationv1.SchemeGroupVersion,
authorizationapiv1.SchemeGroupVersion,
certificatesapiv1.SchemeGroupVersion,
coordinationapiv1.SchemeGroupVersion,
eventsv1.SchemeGroupVersion,
rbacv1.SchemeGroupVersion,
flowcontrolv1.SchemeGroupVersion,
}
// stableAPIGroupVersionsEnabledByDefault is a list of our stable versions for additional API groups only provided in kube-apiserver.
stableAPIGroupVersionsEnabledByDefault = []schema.GroupVersion{
appsv1.SchemeGroupVersion,
autoscalingapiv1.SchemeGroupVersion,
autoscalingapiv2.SchemeGroupVersion,
batchapiv1.SchemeGroupVersion,
certificatesapiv1.SchemeGroupVersion,
coordinationapiv1.SchemeGroupVersion,
discoveryv1.SchemeGroupVersion,
eventsv1.SchemeGroupVersion,
networkingapiv1.SchemeGroupVersion,
nodev1.SchemeGroupVersion,
policyapiv1.SchemeGroupVersion,
rbacv1.SchemeGroupVersion,
resourcev1.SchemeGroupVersion,
storageapiv1.SchemeGroupVersion,
schedulingapiv1.SchemeGroupVersion,
flowcontrolv1.SchemeGroupVersion,
}
// betaAPIGroupVersionsDisabledByDefault is for all future beta groupVersions.
betaAPIGroupVersionsDisabledByDefault = []schema.GroupVersion{
// genericBetaAPIGroupVersionsDisabledByDefault is for all future beta groupVersions for API groups provided by GenericStorageProviders.
genericBetaAPIGroupVersionsDisabledByDefault = []schema.GroupVersion{
admissionregistrationv1beta1.SchemeGroupVersion,
authenticationv1beta1.SchemeGroupVersion,
certificatesv1beta1.SchemeGroupVersion,
coordinationv1beta1.SchemeGroupVersion,
storageapiv1beta1.SchemeGroupVersion,
flowcontrolv1beta1.SchemeGroupVersion,
flowcontrolv1beta2.SchemeGroupVersion,
flowcontrolv1beta3.SchemeGroupVersion,
svmv1beta1.SchemeGroupVersion,
}
// betaAPIGroupVersionsDisabledByDefault is for all future beta groupVersions for additional API groups only provided in kube-apiserver.
betaAPIGroupVersionsDisabledByDefault = []schema.GroupVersion{
storageapiv1beta1.SchemeGroupVersion,
networkingapiv1beta1.SchemeGroupVersion,
resourcev1beta1.SchemeGroupVersion,
resourcev1beta2.SchemeGroupVersion,
svmv1beta1.SchemeGroupVersion,
}
// alphaAPIGroupVersionsDisabledByDefault holds the alpha APIs we have. They are always disabled by default.
alphaAPIGroupVersionsDisabledByDefault = []schema.GroupVersion{
// genericAlphaAPIGroupVersionsDisabledByDefault holds the alpha APIs we have for API groups provided by GenericStorageProviders. They are always disabled by default.
genericAlphaAPIGroupVersionsDisabledByDefault = []schema.GroupVersion{
admissionregistrationv1alpha1.SchemeGroupVersion,
apiserverinternalv1alpha1.SchemeGroupVersion,
authenticationv1alpha1.SchemeGroupVersion,
apiserverinternalv1alpha1.SchemeGroupVersion,
coordinationv1alpha2.SchemeGroupVersion,
resourcev1alpha3.SchemeGroupVersion,
certificatesv1alpha1.SchemeGroupVersion,
}
// alphaAPIGroupVersionsDisabledByDefault holds the alpha APIs we have for additional API groups only provided in kube-apiserver. They are always disabled by default.
alphaAPIGroupVersionsDisabledByDefault = []schema.GroupVersion{
resourcev1alpha3.SchemeGroupVersion,
schedulingapiv1alpha1.SchemeGroupVersion,
storageapiv1alpha1.SchemeGroupVersion,
}
)
// DefaultAPIResourceConfigSource returns default configuration for an APIResource.
func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig {
// DefaultGenericAPIResourceConfigSource returns default configuration for resources served by GenericStorageProviders.
func DefaultGenericAPIResourceConfigSource() *serverstorage.ResourceConfig {
ret := serverstorage.NewResourceConfig()
// NOTE: GroupVersions listed here will be enabled by default. Don't put alpha or beta versions in the list.
ret.EnableVersions(stableAPIGroupVersionsEnabledByDefault...)
ret.EnableVersions(genericStableAPIGroupVersionsEnabledByDefault...)
// disable alpha and beta versions explicitly so we have a full list of what's possible to serve
ret.DisableVersions(genericBetaAPIGroupVersionsDisabledByDefault...)
ret.DisableVersions(genericAlphaAPIGroupVersionsDisabledByDefault...)
return ret
}
// DefaultAPIResourceConfigSource returns default configuration for resources served by kube-apiserver.
func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig {
// start with generic configuration
ret := DefaultGenericAPIResourceConfigSource()
// NOTE: GroupVersions listed here will be enabled by default. Don't put alpha or beta versions in the list.
ret.EnableVersions(stableAPIGroupVersionsEnabledByDefault...)
// disable alpha and beta versions explicitly so we have a full list of what's possible to serve
ret.DisableVersions(betaAPIGroupVersionsDisabledByDefault...)
ret.DisableVersions(alphaAPIGroupVersionsDisabledByDefault...)
return ret
}

View File

@@ -30,6 +30,7 @@ import (
"testing"
"github.com/stretchr/testify/assert"
autoscalingrest "k8s.io/kubernetes/pkg/registry/autoscaling/rest"
resourcerest "k8s.io/kubernetes/pkg/registry/resource/rest"
@@ -512,6 +513,23 @@ func TestGenericStorageProviders(t *testing.T) {
t.Fatal(err)
}
genericStorageGroups := sets.New[string]()
for _, provider := range generic {
genericStorageGroups.Insert(provider.GroupName())
}
genericConfigGroups := sets.New[string]()
for gv := range DefaultGenericAPIResourceConfigSource().GroupVersionConfigs {
genericConfigGroups.Insert(gv.Group)
}
if extra := genericStorageGroups.Difference(genericConfigGroups); len(extra) > 0 {
t.Fatalf("GenericStorageProviders has providers for groups in DefaultGenericAPIResourceConfigSource: %v", sets.List(extra))
}
if extra := genericConfigGroups.Difference(genericStorageGroups); len(extra) > 0 {
t.Fatalf("DefaultGenericAPIResourceConfigSource has config for groups not in GenericStorageProviders: %v", sets.List(extra))
}
g := 0 // generic index
for k := range kube {
kt := reflect.TypeOf(kube[k])