diff --git a/staging/src/k8s.io/apiserver/pkg/server/resourceconfig/BUILD b/staging/src/k8s.io/apiserver/pkg/server/resourceconfig/BUILD index bc889d28c7..c971b6f07a 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/resourceconfig/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/server/resourceconfig/BUILD @@ -14,6 +14,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library", + "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/staging/src/k8s.io/apiserver/pkg/server/resourceconfig/helpers.go b/staging/src/k8s.io/apiserver/pkg/server/resourceconfig/helpers.go index 1c3c6eee20..ad0d5f5784 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/resourceconfig/helpers.go +++ b/staging/src/k8s.io/apiserver/pkg/server/resourceconfig/helpers.go @@ -25,6 +25,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" serverstore "k8s.io/apiserver/pkg/server/storage" utilflag "k8s.io/apiserver/pkg/util/flag" + "k8s.io/klog" ) // GroupVersionRegistry provides access to registered group versions. @@ -106,7 +107,8 @@ func MergeAPIResourceConfigs( // individual resource enablement/disablement is only supported in the extensions/v1beta1 API group for legacy reasons. // all other API groups are expected to contain coherent sets of resources that are enabled/disabled together. if len(tokens) > 2 && (groupVersion != schema.GroupVersion{Group: "extensions", Version: "v1beta1"}) { - return nil, fmt.Errorf("invalid key %s, individual resource enablement/disablement is not supported in %s", key, groupVersion.String()) + klog.Warningf("ignoring invalid key %s, individual resource enablement/disablement is not supported in %s, and will prevent starting in future releases", key, groupVersion.String()) + continue } // Exclude group not registered into the registry. diff --git a/staging/src/k8s.io/apiserver/pkg/server/resourceconfig/helpers_test.go b/staging/src/k8s.io/apiserver/pkg/server/resourceconfig/helpers_test.go index 5caa706525..9f905941bf 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/resourceconfig/helpers_test.go +++ b/staging/src/k8s.io/apiserver/pkg/server/resourceconfig/helpers_test.go @@ -117,11 +117,6 @@ func TestParseRuntimeConfig(t *testing.T) { expectedAPIConfig: func() *serverstore.ResourceConfig { config := newFakeAPIResourceConfigSource() config.EnableVersions(scheme.PrioritizedVersionsAllGroups()...) - config.EnableResources( - extensionsapiv1beta1.SchemeGroupVersion.WithResource("deployments"), - extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicasets"), - extensionsapiv1beta1.SchemeGroupVersion.WithResource("daemonsets"), - ) return config }, err: false, @@ -138,7 +133,6 @@ func TestParseRuntimeConfig(t *testing.T) { expectedAPIConfig: func() *serverstore.ResourceConfig { config := newFakeAPIResourceConfigSource() config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion) - config.DisableResources(extensionsapiv1beta1.SchemeGroupVersion.WithResource("ingresses")) return config }, err: false, @@ -197,11 +191,9 @@ func TestParseRuntimeConfig(t *testing.T) { return newFakeAPIResourceConfigSource() }, expectedAPIConfig: func() *serverstore.ResourceConfig { - config := newFakeAPIResourceConfigSource() - config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion) - return config + return newFakeAPIResourceConfigSource() }, - err: true, + err: false, // no error for backwards compatibility }, } for index, test := range testCases { diff --git a/staging/src/k8s.io/apiserver/pkg/server/storage/resource_config.go b/staging/src/k8s.io/apiserver/pkg/server/storage/resource_config.go index d613403fba..eb892b5a5c 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/storage/resource_config.go +++ b/staging/src/k8s.io/apiserver/pkg/server/storage/resource_config.go @@ -38,22 +38,18 @@ func NewResourceConfig() *ResourceConfig { return &ResourceConfig{GroupVersionConfigs: map[schema.GroupVersion]bool{}, ResourceConfigs: map[schema.GroupVersionResource]bool{}} } +// DisableAll disables all group/versions. It does not modify individual resource enablement/disablement. func (o *ResourceConfig) DisableAll() { for k := range o.GroupVersionConfigs { o.GroupVersionConfigs[k] = false } - for k := range o.ResourceConfigs { - o.ResourceConfigs[k] = false - } } +// EnableAll enables all group/versions. It does not modify individual resource enablement/disablement. func (o *ResourceConfig) EnableAll() { for k := range o.GroupVersionConfigs { o.GroupVersionConfigs[k] = true } - for k := range o.ResourceConfigs { - o.ResourceConfigs[k] = true - } } // DisableVersions disables the versions entirely. diff --git a/staging/src/k8s.io/apiserver/pkg/server/storage/resource_config_test.go b/staging/src/k8s.io/apiserver/pkg/server/storage/resource_config_test.go index 71983f6c51..25a6fb0dc5 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/storage/resource_config_test.go +++ b/staging/src/k8s.io/apiserver/pkg/server/storage/resource_config_test.go @@ -98,26 +98,59 @@ func TestDisabledResource(t *testing.T) { t.Errorf("expected enabled for %v, from %v", g2v1rEnabled, config) } - // Enable all enables specific resources + // DisableAll() only disables to the group/version level for compatibility + // corresponds to --runtime-config=api/all=false + config.DisableAll() + if config.ResourceEnabled(g1v1rEnabled) { + t.Errorf("expected disabled for %v, from %v", g1v1rEnabled, config) + } + if config.ResourceEnabled(g1v2rEnabled) { + t.Errorf("expected disabled for %v, from %v", g1v2rEnabled, config) + } + if config.ResourceEnabled(g2v1rEnabled) { + t.Errorf("expected disabled for %v, from %v", g2v1rEnabled, config) + } + + // DisableAll() only disables to the group/version level for compatibility + // corresponds to --runtime-config=api/all=false,g1/v1=true + config.DisableAll() + config.EnableVersions(g1v1) + if !config.ResourceEnabled(g1v1rEnabled) { + t.Errorf("expected enabled for %v, from %v", g1v1rEnabled, config) + } + + // EnableAll() only enables to the group/version level for compatibility config.EnableAll() - // all resources under g1v1 are now enabled + // all unspecified or enabled resources under all groups now enabled if !config.ResourceEnabled(g1v1rUnspecified) { t.Errorf("expected enabled for %v, from %v", g1v1rUnspecified, config) } if !config.ResourceEnabled(g1v1rEnabled) { t.Errorf("expected enabled for %v, from %v", g1v1rEnabled, config) } - if !config.ResourceEnabled(g1v1rDisabled) { - t.Errorf("expected enabled for %v, from %v", g1v1rDisabled, config) + if !config.ResourceEnabled(g1v2rUnspecified) { + t.Errorf("expected enabled for %v, from %v", g1v2rUnspecified, config) + } + if !config.ResourceEnabled(g1v2rEnabled) { + t.Errorf("expected enabled for %v, from %v", g1v2rEnabled, config) + } + if !config.ResourceEnabled(g2v1rUnspecified) { + t.Errorf("expected enabled for %v, from %v", g2v1rUnspecified, config) + } + if !config.ResourceEnabled(g2v1rEnabled) { + t.Errorf("expected enabled for %v, from %v", g2v1rEnabled, config) } - // previously disabled resources are now enabled - if !config.ResourceEnabled(g1v2rDisabled) { - t.Errorf("expected enabled for %v, from %v", g1v2rDisabled, config) + // previously disabled resources are still disabled + if config.ResourceEnabled(g1v1rDisabled) { + t.Errorf("expected disabled for %v, from %v", g1v1rDisabled, config) } - if !config.ResourceEnabled(g2v1rDisabled) { - t.Errorf("expected enabled for %v, from %v", g2v1rDisabled, config) + if config.ResourceEnabled(g1v2rDisabled) { + t.Errorf("expected disabled for %v, from %v", g1v2rDisabled, config) + } + if config.ResourceEnabled(g2v1rDisabled) { + t.Errorf("expected disabled for %v, from %v", g2v1rDisabled, config) } }