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/apimachinery/pkg/runtime/schema:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/server/storage: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", "//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" "k8s.io/apimachinery/pkg/runtime/schema"
serverstore "k8s.io/apiserver/pkg/server/storage" serverstore "k8s.io/apiserver/pkg/server/storage"
utilflag "k8s.io/apiserver/pkg/util/flag" utilflag "k8s.io/apiserver/pkg/util/flag"
"k8s.io/klog"
) )
// GroupVersionRegistry provides access to registered group versions. // 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. // 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. // 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"}) { 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. // Exclude group not registered into the registry.

View File

@ -117,11 +117,6 @@ func TestParseRuntimeConfig(t *testing.T) {
expectedAPIConfig: func() *serverstore.ResourceConfig { expectedAPIConfig: func() *serverstore.ResourceConfig {
config := newFakeAPIResourceConfigSource() config := newFakeAPIResourceConfigSource()
config.EnableVersions(scheme.PrioritizedVersionsAllGroups()...) config.EnableVersions(scheme.PrioritizedVersionsAllGroups()...)
config.EnableResources(
extensionsapiv1beta1.SchemeGroupVersion.WithResource("deployments"),
extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicasets"),
extensionsapiv1beta1.SchemeGroupVersion.WithResource("daemonsets"),
)
return config return config
}, },
err: false, err: false,
@ -138,7 +133,6 @@ func TestParseRuntimeConfig(t *testing.T) {
expectedAPIConfig: func() *serverstore.ResourceConfig { expectedAPIConfig: func() *serverstore.ResourceConfig {
config := newFakeAPIResourceConfigSource() config := newFakeAPIResourceConfigSource()
config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion) config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion)
config.DisableResources(extensionsapiv1beta1.SchemeGroupVersion.WithResource("ingresses"))
return config return config
}, },
err: false, err: false,
@ -197,11 +191,9 @@ func TestParseRuntimeConfig(t *testing.T) {
return newFakeAPIResourceConfigSource() return newFakeAPIResourceConfigSource()
}, },
expectedAPIConfig: func() *serverstore.ResourceConfig { expectedAPIConfig: func() *serverstore.ResourceConfig {
config := newFakeAPIResourceConfigSource() return newFakeAPIResourceConfigSource()
config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion)
return config
}, },
err: true, err: false, // no error for backwards compatibility
}, },
} }
for index, test := range testCases { 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{}} 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() { func (o *ResourceConfig) DisableAll() {
for k := range o.GroupVersionConfigs { for k := range o.GroupVersionConfigs {
o.GroupVersionConfigs[k] = false 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() { func (o *ResourceConfig) EnableAll() {
for k := range o.GroupVersionConfigs { for k := range o.GroupVersionConfigs {
o.GroupVersionConfigs[k] = true o.GroupVersionConfigs[k] = true
} }
for k := range o.ResourceConfigs {
o.ResourceConfigs[k] = true
}
} }
// DisableVersions disables the versions entirely. // 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) 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() config.EnableAll()
// all resources under g1v1 are now enabled // all unspecified or enabled resources under all groups now enabled
if !config.ResourceEnabled(g1v1rUnspecified) { if !config.ResourceEnabled(g1v1rUnspecified) {
t.Errorf("expected enabled for %v, from %v", g1v1rUnspecified, config) t.Errorf("expected enabled for %v, from %v", g1v1rUnspecified, config)
} }
if !config.ResourceEnabled(g1v1rEnabled) { if !config.ResourceEnabled(g1v1rEnabled) {
t.Errorf("expected enabled for %v, from %v", g1v1rEnabled, config) t.Errorf("expected enabled for %v, from %v", g1v1rEnabled, config)
} }
if !config.ResourceEnabled(g1v1rDisabled) { if !config.ResourceEnabled(g1v2rUnspecified) {
t.Errorf("expected enabled for %v, from %v", g1v1rDisabled, config) 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 // previously disabled resources are still disabled
if !config.ResourceEnabled(g1v2rDisabled) { if config.ResourceEnabled(g1v1rDisabled) {
t.Errorf("expected enabled for %v, from %v", g1v2rDisabled, config) t.Errorf("expected disabled for %v, from %v", g1v1rDisabled, config)
} }
if !config.ResourceEnabled(g2v1rDisabled) { if config.ResourceEnabled(g1v2rDisabled) {
t.Errorf("expected enabled for %v, from %v", g2v1rDisabled, config) t.Errorf("expected disabled for %v, from %v", g1v2rDisabled, config)
}
if config.ResourceEnabled(g2v1rDisabled) {
t.Errorf("expected disabled for %v, from %v", g2v1rDisabled, config)
} }
} }