diff --git a/pkg/genericapiserver/default_storage_factory_builder.go b/pkg/genericapiserver/default_storage_factory_builder.go index 8219f1525e2..63a26ccf30c 100644 --- a/pkg/genericapiserver/default_storage_factory_builder.go +++ b/pkg/genericapiserver/default_storage_factory_builder.go @@ -70,12 +70,12 @@ func mergeAPIResourceConfigs(defaultAPIResourceConfig *ResourceConfig, resourceC // "api/all=false" allows users to selectively enable specific api versions. allAPIFlagValue, ok := overrides["api/all"] - if ok && allAPIFlagValue == "false" { - // Disable all group versions. - for _, groupVersion := range registered.RegisteredGroupVersions() { - if resourceConfig.AnyResourcesForVersionEnabled(groupVersion) { - resourceConfig.DisableVersions(groupVersion) - } + if ok { + if allAPIFlagValue == "false" { + // Disable all group versions. + resourceConfig.DisableVersions(registered.RegisteredGroupVersions()...) + } else if allAPIFlagValue == "true" { + resourceConfig.EnableVersions(registered.RegisteredGroupVersions()...) } } diff --git a/pkg/genericapiserver/default_storage_factory_builder_test.go b/pkg/genericapiserver/default_storage_factory_builder_test.go index 447778ebc3b..f17324bad37 100644 --- a/pkg/genericapiserver/default_storage_factory_builder_test.go +++ b/pkg/genericapiserver/default_storage_factory_builder_test.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" apiv1 "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/apimachinery/registered" extensionsapiv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" ) @@ -159,6 +160,36 @@ func TestParseRuntimeConfig(t *testing.T) { }, err: true, }, + { + // enable all + runtimeConfig: map[string]string{ + "api/all": "true", + }, + defaultResourceConfig: func() *ResourceConfig { + return NewResourceConfig() + }, + expectedAPIConfig: func() *ResourceConfig { + config := NewResourceConfig() + config.EnableVersions(registered.RegisteredGroupVersions()...) + return config + }, + err: false, + }, + { + // disable all + runtimeConfig: map[string]string{ + "api/all": "false", + }, + defaultResourceConfig: func() *ResourceConfig { + return NewResourceConfig() + }, + expectedAPIConfig: func() *ResourceConfig { + config := NewResourceConfig() + config.DisableVersions(registered.RegisteredGroupVersions()...) + return config + }, + err: false, + }, } for _, test := range testCases { actualDisablers, err := mergeAPIResourceConfigs(test.defaultResourceConfig(), test.runtimeConfig) @@ -173,5 +204,4 @@ func TestParseRuntimeConfig(t *testing.T) { t.Fatalf("%v: unexpected apiResourceDisablers. Actual: %v\n expected: %v", test.runtimeConfig, actualDisablers, expectedConfig) } } - }