Merge pull request #72581 from liggitt/runtime-config-warning

preserve prior behavior of ignoring invalid --runtime-config keys
pull/564/head
Kubernetes Prow Robot 2019-01-04 20:11:53 -08:00 committed by GitHub
commit 988c9d619e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 26 deletions

View File

@ -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",
],
)

View File

@ -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.

View File

@ -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 {

View File

@ -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.

View File

@ -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)
}
}