Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
2b25ec79
Unverified
Commit
2b25ec79
authored
Apr 26, 2018
by
MaciekPytel
Committed by
GitHub
Apr 26, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "revert resource disablement, 1.10"
parent
77db0fb3
Hide whitespace changes
Inline
Side-by-side
Showing
49 changed files
with
775 additions
and
872 deletions
+775
-872
aggregator.go
cmd/kube-apiserver/app/aggregator.go
+8
-0
apiextensions.go
cmd/kube-apiserver/app/apiextensions.go
+8
-0
BUILD
cmd/kube-apiserver/app/options/BUILD
+3
-0
options.go
cmd/kube-apiserver/app/options/options.go
+2
-2
options_test.go
cmd/kube-apiserver/app/options/options_test.go
+3
-3
validation.go
cmd/kube-apiserver/app/options/validation.go
+7
-0
server.go
cmd/kube-apiserver/app/server.go
+8
-4
BUILD
pkg/kubeapiserver/BUILD
+1
-18
default_storage_factory_builder.go
pkg/kubeapiserver/default_storage_factory_builder.go
+13
-152
BUILD
pkg/kubeapiserver/options/BUILD
+0
-2
master.go
pkg/master/master.go
+2
-12
master_test.go
pkg/master/master_test.go
+2
-2
storage_apiserver.go
pkg/registry/admissionregistration/rest/storage_apiserver.go
+14
-16
storage_apps.go
pkg/registry/apps/rest/storage_apps.go
+77
-80
storage_authentication.go
pkg/registry/authentication/rest/storage_authentication.go
+8
-18
storage_authorization.go
pkg/registry/authorization/rest/storage_authorization.go
+18
-30
storage_autoscaling.go
pkg/registry/autoscaling/rest/storage_autoscaling.go
+12
-16
storage_batch.go
pkg/registry/batch/rest/storage_batch.go
+18
-24
storage_certificates.go
pkg/registry/certificates/rest/storage_certificates.go
+7
-9
storage_events.go
pkg/registry/events/rest/storage_events.go
+5
-7
storage_extensions.go
pkg/registry/extensions/rest/storage_extensions.go
+31
-36
storage_settings.go
pkg/registry/networking/rest/storage_settings.go
+5
-7
storage_policy.go
pkg/registry/policy/rest/storage_policy.go
+6
-11
storage_rbac.go
pkg/registry/rbac/rest/storage_rbac.go
+25
-43
storage_scheduling.go
pkg/registry/scheduling/rest/storage_scheduling.go
+5
-7
storage_settings.go
pkg/registry/settings/rest/storage_settings.go
+5
-7
storage_storage.go
pkg/registry/storage/rest/storage_storage.go
+12
-24
Godeps.json
...ing/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json
+8
-0
BUILD
...ng/src/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD
+1
-0
apiserver.go
...k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go
+25
-9
start.go
...rc/k8s.io/apiextensions-apiserver/pkg/cmd/server/start.go
+7
-1
start.go
...extensions-apiserver/test/integration/testserver/start.go
+3
-0
BUILD
staging/src/k8s.io/apiserver/pkg/server/BUILD
+1
-0
config.go
staging/src/k8s.io/apiserver/pkg/server/config.go
+6
-0
BUILD
staging/src/k8s.io/apiserver/pkg/server/options/BUILD
+2
-0
api_enablement.go
...src/k8s.io/apiserver/pkg/server/options/api_enablement.go
+69
-3
BUILD
staging/src/k8s.io/apiserver/pkg/server/resourceconfig/BUILD
+32
-0
doc.go
...ing/src/k8s.io/apiserver/pkg/server/resourceconfig/doc.go
+18
-0
helpers.go
...src/k8s.io/apiserver/pkg/server/resourceconfig/helpers.go
+164
-0
helpers_test.go
...8s.io/apiserver/pkg/server/resourceconfig/helpers_test.go
+69
-101
resource_config.go
...rc/k8s.io/apiserver/pkg/server/storage/resource_config.go
+15
-112
resource_config_test.go
...s.io/apiserver/pkg/server/storage/resource_config_test.go
+6
-64
storage_factory.go
...rc/k8s.io/apiserver/pkg/server/storage/storage_factory.go
+9
-2
Godeps.json
staging/src/k8s.io/kube-aggregator/Godeps/Godeps.json
+4
-0
BUILD
staging/src/k8s.io/kube-aggregator/pkg/apiserver/BUILD
+2
-5
apiserver.go
...ing/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go
+15
-39
start.go
staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go
+8
-1
Godeps.json
staging/src/k8s.io/sample-apiserver/Godeps/Godeps.json
+4
-0
etcd_storage_path_test.go
test/integration/etcd/etcd_storage_path_test.go
+2
-5
No files found.
cmd/kube-apiserver/app/aggregator.go
View file @
2b25ec79
...
...
@@ -80,6 +80,14 @@ func createAggregatorConfig(
etcdOptions
.
StorageConfig
.
Codec
=
aggregatorscheme
.
Codecs
.
LegacyCodec
(
v1beta1
.
SchemeGroupVersion
,
v1
.
SchemeGroupVersion
)
genericConfig
.
RESTOptionsGetter
=
&
genericoptions
.
SimpleRestOptionsFactory
{
Options
:
etcdOptions
}
// override MergedResourceConfig with aggregator defaults and registry
if
err
:=
commandOptions
.
APIEnablement
.
ApplyTo
(
&
genericConfig
,
aggregatorapiserver
.
DefaultAPIResourceConfigSource
(),
aggregatorscheme
.
Registry
);
err
!=
nil
{
return
nil
,
err
}
var
err
error
var
certBytes
,
keyBytes
[]
byte
if
len
(
commandOptions
.
ProxyClientCertFile
)
>
0
&&
len
(
commandOptions
.
ProxyClientKeyFile
)
>
0
{
...
...
cmd/kube-apiserver/app/apiextensions.go
View file @
2b25ec79
...
...
@@ -54,6 +54,14 @@ func createAPIExtensionsConfig(
etcdOptions
.
StorageConfig
.
Codec
=
apiextensionsapiserver
.
Codecs
.
LegacyCodec
(
v1beta1
.
SchemeGroupVersion
)
genericConfig
.
RESTOptionsGetter
=
&
genericoptions
.
SimpleRestOptionsFactory
{
Options
:
etcdOptions
}
// override MergedResourceConfig with apiextensions defaults and registry
if
err
:=
commandOptions
.
APIEnablement
.
ApplyTo
(
&
genericConfig
,
apiextensionsapiserver
.
DefaultAPIResourceConfigSource
(),
apiextensionsapiserver
.
Registry
);
err
!=
nil
{
return
nil
,
err
}
apiextensionsConfig
:=
&
apiextensionsapiserver
.
Config
{
GenericConfig
:
&
genericapiserver
.
RecommendedConfig
{
Config
:
genericConfig
,
...
...
cmd/kube-apiserver/app/options/BUILD
View file @
2b25ec79
...
...
@@ -14,6 +14,7 @@ go_library(
],
importpath = "k8s.io/kubernetes/cmd/kube-apiserver/app/options",
deps = [
"//pkg/api/legacyscheme:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/apis/core/validation:go_default_library",
"//pkg/features:go_default_library",
...
...
@@ -22,9 +23,11 @@ go_library(
"//pkg/master/ports:go_default_library",
"//pkg/master/reconcilers:go_default_library",
"//vendor/github.com/spf13/pflag:go_default_library",
"//vendor/k8s.io/apiextensions-apiserver/pkg/apiserver:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/options:go_default_library",
"//vendor/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library",
"//vendor/k8s.io/kube-aggregator/pkg/apiserver/scheme:go_default_library",
],
)
...
...
cmd/kube-apiserver/app/options/options.go
View file @
2b25ec79
...
...
@@ -51,7 +51,7 @@ type ServerRunOptions struct {
Authorization
*
kubeoptions
.
BuiltInAuthorizationOptions
CloudProvider
*
kubeoptions
.
CloudProviderOptions
StorageSerialization
*
kubeoptions
.
StorageSerializationOptions
APIEnablement
*
kube
options
.
APIEnablementOptions
APIEnablement
*
generic
options
.
APIEnablementOptions
AllowPrivileged
bool
EnableLogsHandler
bool
...
...
@@ -89,7 +89,7 @@ func NewServerRunOptions() *ServerRunOptions {
Authorization
:
kubeoptions
.
NewBuiltInAuthorizationOptions
(),
CloudProvider
:
kubeoptions
.
NewCloudProviderOptions
(),
StorageSerialization
:
kubeoptions
.
NewStorageSerializationOptions
(),
APIEnablement
:
kube
options
.
NewAPIEnablementOptions
(),
APIEnablement
:
generic
options
.
NewAPIEnablementOptions
(),
EnableLogsHandler
:
true
,
EventTTL
:
1
*
time
.
Hour
,
...
...
cmd/kube-apiserver/app/options/options_test.go
View file @
2b25ec79
...
...
@@ -28,7 +28,7 @@ import (
apiserveroptions
"k8s.io/apiserver/pkg/server/options"
genericoptions
"k8s.io/apiserver/pkg/server/options"
"k8s.io/apiserver/pkg/storage/storagebackend"
util
confi
g
"k8s.io/apiserver/pkg/util/flag"
util
fla
g
"k8s.io/apiserver/pkg/util/flag"
auditbuffered
"k8s.io/apiserver/plugin/pkg/audit/buffered"
restclient
"k8s.io/client-go/rest"
"k8s.io/kubernetes/pkg/api/legacyscheme"
...
...
@@ -262,8 +262,8 @@ func TestAddFlags(t *testing.T) {
StorageVersions
:
legacyscheme
.
Registry
.
AllPreferredGroupVersions
(),
DefaultStorageVersions
:
legacyscheme
.
Registry
.
AllPreferredGroupVersions
(),
},
APIEnablement
:
&
kube
options
.
APIEnablementOptions
{
RuntimeConfig
:
util
confi
g
.
ConfigurationMap
{},
APIEnablement
:
&
apiserver
options
.
APIEnablementOptions
{
RuntimeConfig
:
util
fla
g
.
ConfigurationMap
{},
},
EnableLogsHandler
:
false
,
EnableAggregatorRouting
:
true
,
...
...
cmd/kube-apiserver/app/options/validation.go
View file @
2b25ec79
...
...
@@ -18,6 +18,10 @@ package options
import
(
"fmt"
apiextensionsapiserver
"k8s.io/apiextensions-apiserver/pkg/apiserver"
aggregatorscheme
"k8s.io/kube-aggregator/pkg/apiserver/scheme"
"k8s.io/kubernetes/pkg/api/legacyscheme"
)
// TODO: Longer term we should read this from some config store, rather than a flag.
...
...
@@ -75,6 +79,9 @@ func (options *ServerRunOptions) Validate() []error {
if
options
.
MasterCount
<=
0
{
errors
=
append
(
errors
,
fmt
.
Errorf
(
"--apiserver-count should be a positive number, but value '%d' provided"
,
options
.
MasterCount
))
}
if
errs
:=
options
.
APIEnablement
.
Validate
(
legacyscheme
.
Registry
,
apiextensionsapiserver
.
Registry
,
aggregatorscheme
.
Registry
);
len
(
errs
)
>
0
{
errors
=
append
(
errors
,
errs
...
)
}
return
errors
}
cmd/kube-apiserver/app/server.go
View file @
2b25ec79
...
...
@@ -326,7 +326,7 @@ func CreateKubeAPIServerConfig(
return
}
storageFactory
,
lastErr
:=
BuildStorageFactory
(
s
)
storageFactory
,
lastErr
:=
BuildStorageFactory
(
s
,
genericConfig
.
MergedResourceConfig
)
if
lastErr
!=
nil
{
return
}
...
...
@@ -443,6 +443,9 @@ func BuildGenericConfig(
if
lastErr
=
s
.
Features
.
ApplyTo
(
genericConfig
);
lastErr
!=
nil
{
return
}
if
lastErr
=
s
.
APIEnablement
.
ApplyTo
(
genericConfig
,
master
.
DefaultAPIResourceConfigSource
(),
legacyscheme
.
Registry
);
lastErr
!=
nil
{
return
}
genericConfig
.
OpenAPIConfig
=
genericapiserver
.
DefaultOpenAPIConfig
(
generatedopenapi
.
GetOpenAPIDefinitions
,
legacyscheme
.
Scheme
)
genericConfig
.
OpenAPIConfig
.
PostProcessSpec
=
postProcessOpenAPISpecForBackwardCompatibility
...
...
@@ -457,7 +460,7 @@ func BuildGenericConfig(
kubeVersion
:=
version
.
Get
()
genericConfig
.
Version
=
&
kubeVersion
storageFactory
,
lastErr
:=
BuildStorageFactory
(
s
)
storageFactory
,
lastErr
:=
BuildStorageFactory
(
s
,
genericConfig
.
MergedResourceConfig
)
if
lastErr
!=
nil
{
return
}
...
...
@@ -630,7 +633,7 @@ func BuildAuthorizer(s *options.ServerRunOptions, sharedInformers informers.Shar
// BuildStorageFactory constructs the storage factory. If encryption at rest is used, it expects
// all supported KMS plugins to be registered in the KMS plugin registry before being called.
func
BuildStorageFactory
(
s
*
options
.
ServerRunOptions
)
(
*
serverstorage
.
DefaultStorageFactory
,
error
)
{
func
BuildStorageFactory
(
s
*
options
.
ServerRunOptions
,
apiResourceConfig
*
serverstorage
.
ResourceConfig
)
(
*
serverstorage
.
DefaultStorageFactory
,
error
)
{
storageGroupsToEncodingVersion
,
err
:=
s
.
StorageSerialization
.
StorageGroupsToEncodingVersion
()
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"error generating storage version map: %s"
,
err
)
...
...
@@ -646,7 +649,7 @@ func BuildStorageFactory(s *options.ServerRunOptions) (*serverstorage.DefaultSto
storage
.
Resource
(
"volumeattachments"
)
.
WithVersion
(
"v1beta1"
),
admissionregistration
.
Resource
(
"initializerconfigurations"
)
.
WithVersion
(
"v1alpha1"
),
},
master
.
DefaultAPIResourceConfigSource
(),
s
.
APIEnablement
.
Runtim
eConfig
)
apiResourc
eConfig
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"error in initializing storage factory: %s"
,
err
)
}
...
...
@@ -787,6 +790,7 @@ func defaultOptions(s *options.ServerRunOptions) error {
}
}
}
return
nil
}
...
...
pkg/kubeapiserver/BUILD
View file @
2b25ec79
...
...
@@ -3,7 +3,6 @@ package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
"go_test",
)
go_library(
...
...
@@ -14,12 +13,11 @@ go_library(
],
importpath = "k8s.io/kubernetes/pkg/kubeapiserver",
deps = [
"//pkg/api/legacyscheme:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/resourceconfig:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/storage:go_default_library",
"//vendor/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library",
],
)
...
...
@@ -42,18 +40,3 @@ filegroup(
],
tags = ["automanaged"],
)
go_test(
name = "go_default_test",
srcs = ["default_storage_factory_builder_test.go"],
embed = [":go_default_library"],
deps = [
"//pkg/api/legacyscheme:go_default_library",
"//pkg/apis/core/install:go_default_library",
"//pkg/apis/extensions/install:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/storage:go_default_library",
],
)
pkg/kubeapiserver/default_storage_factory_builder.go
View file @
2b25ec79
...
...
@@ -17,16 +17,11 @@ limitations under the License.
package
kubeapiserver
import
(
"fmt"
"strconv"
"strings"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/server/resourceconfig"
serverstorage
"k8s.io/apiserver/pkg/server/storage"
"k8s.io/apiserver/pkg/storage/storagebackend"
utilflag
"k8s.io/apiserver/pkg/util/flag"
"k8s.io/kubernetes/pkg/api/legacyscheme"
)
// SpecialDefaultResourcePrefixes are prefixes compiled into Kubernetes.
...
...
@@ -42,151 +37,17 @@ var SpecialDefaultResourcePrefixes = map[schema.GroupResource]string{
}
// NewStorageFactory builds the DefaultStorageFactory.
// Merges defaultResource
Config with the user specified overrides and merges
// defaultAPIResourceConfig with the corresponding user specified overrides as well.
func
NewStorageFactory
(
storageConfig
storagebackend
.
Config
,
defaultMediaType
string
,
serializer
runtime
.
StorageSerializer
,
default
ResourceEncoding
*
serverstorage
.
DefaultResourceEncodingConfig
,
storageEncodingOverrides
map
[
string
]
schema
.
GroupVersion
,
resourceEncodingOverrides
[]
schema
.
GroupVersionResource
,
defaultAPIResourceConfig
*
serverstorage
.
ResourceConfig
,
resourceConfigOverrides
utilflag
.
ConfigurationMap
)
(
*
serverstorage
.
DefaultStorageFactory
,
error
)
{
resourceEncodingConfig
:=
mergeGroupEncodingConfigs
(
defaultResourceEncoding
,
storageEncodingOverrides
)
resourceEncoding
Config
=
mergeResourceEncodingConfigs
(
resourceEncodingConfig
,
resourceEncodingOverrides
)
apiResourceConfig
,
err
:=
mergeAPIResourceConfigs
(
defaultAPIResourceConfig
,
resourceConfigOverrides
)
if
err
!=
nil
{
return
nil
,
err
}
// Merges defaultResource
Encoding with the user specified overrides.
func
NewStorageFactory
(
storageConfig
storagebackend
.
Config
,
default
MediaType
string
,
serializer
runtime
.
StorageSerializer
,
defaultResourceEncoding
*
serverstorage
.
DefaultResourceEncodingConfig
,
storageEncodingOverrides
map
[
string
]
schema
.
GroupVersion
,
resourceEncoding
Overrides
[]
schema
.
GroupVersionResource
,
apiResourceConfig
*
serverstorage
.
ResourceConfig
,
)
(
*
serverstorage
.
DefaultStorageFactory
,
error
)
{
resourceEncodingConfig
:=
resourceconfig
.
MergeGroupEncodingConfigs
(
defaultResourceEncoding
,
storageEncodingOverrides
)
resourceEncodingConfig
=
resourceconfig
.
MergeResourceEncodingConfigs
(
resourceEncodingConfig
,
resourceEncodingOverrides
)
return
serverstorage
.
NewDefaultStorageFactory
(
storageConfig
,
defaultMediaType
,
serializer
,
resourceEncodingConfig
,
apiResourceConfig
,
SpecialDefaultResourcePrefixes
),
nil
}
// Merges the given defaultResourceConfig with specific GroupVersionResource overrides.
func
mergeResourceEncodingConfigs
(
defaultResourceEncoding
*
serverstorage
.
DefaultResourceEncodingConfig
,
resourceEncodingOverrides
[]
schema
.
GroupVersionResource
)
*
serverstorage
.
DefaultResourceEncodingConfig
{
resourceEncodingConfig
:=
defaultResourceEncoding
for
_
,
gvr
:=
range
resourceEncodingOverrides
{
resourceEncodingConfig
.
SetResourceEncoding
(
gvr
.
GroupResource
(),
gvr
.
GroupVersion
(),
schema
.
GroupVersion
{
Group
:
gvr
.
Group
,
Version
:
runtime
.
APIVersionInternal
})
}
return
resourceEncodingConfig
}
// Merges the given defaultResourceConfig with specific GroupVersion overrides.
func
mergeGroupEncodingConfigs
(
defaultResourceEncoding
*
serverstorage
.
DefaultResourceEncodingConfig
,
storageEncodingOverrides
map
[
string
]
schema
.
GroupVersion
)
*
serverstorage
.
DefaultResourceEncodingConfig
{
resourceEncodingConfig
:=
defaultResourceEncoding
for
group
,
storageEncodingVersion
:=
range
storageEncodingOverrides
{
resourceEncodingConfig
.
SetVersionEncoding
(
group
,
storageEncodingVersion
,
schema
.
GroupVersion
{
Group
:
group
,
Version
:
runtime
.
APIVersionInternal
})
}
return
resourceEncodingConfig
}
// Merges the given defaultAPIResourceConfig with the given resourceConfigOverrides.
func
mergeAPIResourceConfigs
(
defaultAPIResourceConfig
*
serverstorage
.
ResourceConfig
,
resourceConfigOverrides
utilflag
.
ConfigurationMap
)
(
*
serverstorage
.
ResourceConfig
,
error
)
{
resourceConfig
:=
defaultAPIResourceConfig
overrides
:=
resourceConfigOverrides
// "api/all=false" allows users to selectively enable specific api versions.
allAPIFlagValue
,
ok
:=
overrides
[
"api/all"
]
if
ok
{
if
allAPIFlagValue
==
"false"
{
// Disable all group versions.
resourceConfig
.
DisableVersions
(
legacyscheme
.
Registry
.
RegisteredGroupVersions
()
...
)
}
else
if
allAPIFlagValue
==
"true"
{
resourceConfig
.
EnableVersions
(
legacyscheme
.
Registry
.
RegisteredGroupVersions
()
...
)
}
}
// "api/legacy=false" allows users to disable legacy api versions.
disableLegacyAPIs
:=
false
legacyAPIFlagValue
,
ok
:=
overrides
[
"api/legacy"
]
if
ok
&&
legacyAPIFlagValue
==
"false"
{
disableLegacyAPIs
=
true
}
_
=
disableLegacyAPIs
// hush the compiler while we don't have legacy APIs to disable.
// "<resourceSpecifier>={true|false} allows users to enable/disable API.
// This takes preference over api/all and api/legacy, if specified.
// Iterate through all group/version overrides specified in runtimeConfig.
for
key
:=
range
overrides
{
if
key
==
"api/all"
||
key
==
"api/legacy"
{
// Have already handled them above. Can skip them here.
continue
}
tokens
:=
strings
.
Split
(
key
,
"/"
)
if
len
(
tokens
)
!=
2
{
continue
}
groupVersionString
:=
tokens
[
0
]
+
"/"
+
tokens
[
1
]
// HACK: Hack for "v1" legacy group version.
// Remove when we stop supporting the legacy group version.
if
groupVersionString
==
"api/v1"
{
groupVersionString
=
"v1"
}
groupVersion
,
err
:=
schema
.
ParseGroupVersion
(
groupVersionString
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"invalid key %s"
,
key
)
}
// Verify that the groupVersion is legacyscheme.Registry.
if
!
legacyscheme
.
Registry
.
IsRegisteredVersion
(
groupVersion
)
{
return
nil
,
fmt
.
Errorf
(
"group version %s that has not been registered"
,
groupVersion
.
String
())
}
enabled
,
err
:=
getRuntimeConfigValue
(
overrides
,
key
,
false
)
if
err
!=
nil
{
return
nil
,
err
}
if
enabled
{
resourceConfig
.
EnableVersions
(
groupVersion
)
}
else
{
resourceConfig
.
DisableVersions
(
groupVersion
)
}
}
// Iterate through all group/version/resource overrides specified in runtimeConfig.
for
key
:=
range
overrides
{
tokens
:=
strings
.
Split
(
key
,
"/"
)
if
len
(
tokens
)
!=
3
{
continue
}
groupVersionString
:=
tokens
[
0
]
+
"/"
+
tokens
[
1
]
// HACK: Hack for "v1" legacy group version.
// Remove when we stop supporting the legacy group version.
if
groupVersionString
==
"api/v1"
{
groupVersionString
=
"v1"
}
groupVersion
,
err
:=
schema
.
ParseGroupVersion
(
groupVersionString
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"invalid key %s"
,
key
)
}
resource
:=
tokens
[
2
]
// Verify that the groupVersion is legacyscheme.Registry.
if
!
legacyscheme
.
Registry
.
IsRegisteredVersion
(
groupVersion
)
{
return
nil
,
fmt
.
Errorf
(
"group version %s that has not been registered"
,
groupVersion
.
String
())
}
if
!
resourceConfig
.
AnyResourcesForVersionEnabled
(
groupVersion
)
{
return
nil
,
fmt
.
Errorf
(
"%v is disabled, you cannot configure its resources individually"
,
groupVersion
)
}
enabled
,
err
:=
getRuntimeConfigValue
(
overrides
,
key
,
false
)
if
err
!=
nil
{
return
nil
,
err
}
if
enabled
{
resourceConfig
.
EnableResources
(
groupVersion
.
WithResource
(
resource
))
}
else
{
resourceConfig
.
DisableResources
(
groupVersion
.
WithResource
(
resource
))
}
}
return
resourceConfig
,
nil
}
func
getRuntimeConfigValue
(
overrides
utilflag
.
ConfigurationMap
,
apiKey
string
,
defaultValue
bool
)
(
bool
,
error
)
{
flagValue
,
ok
:=
overrides
[
apiKey
]
if
ok
{
if
flagValue
==
""
{
return
true
,
nil
}
boolValue
,
err
:=
strconv
.
ParseBool
(
flagValue
)
if
err
!=
nil
{
return
false
,
fmt
.
Errorf
(
"invalid value of %s: %s, err: %v"
,
apiKey
,
flagValue
,
err
)
}
return
boolValue
,
nil
}
return
defaultValue
,
nil
}
pkg/kubeapiserver/options/BUILD
View file @
2b25ec79
...
...
@@ -10,7 +10,6 @@ go_library(
name = "go_default_library",
srcs = [
"admission.go",
"api_enablement.go",
"authentication.go",
"authorization.go",
"cloudprovider.go",
...
...
@@ -69,7 +68,6 @@ go_library(
"//vendor/k8s.io/apiserver/pkg/admission/plugin/webhook/validating:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/options:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library",
"//vendor/k8s.io/client-go/informers:go_default_library",
"//vendor/k8s.io/client-go/rest:go_default_library",
],
...
...
pkg/master/master.go
View file @
2b25ec79
...
...
@@ -313,7 +313,7 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
}
// install legacy rest storage
if
c
.
ExtraConfig
.
APIResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
apiv1
.
SchemeGroupVersion
)
{
if
c
.
ExtraConfig
.
APIResourceConfigSource
.
VersionEnabled
(
apiv1
.
SchemeGroupVersion
)
{
legacyRESTStorageProvider
:=
corerest
.
LegacyRESTStorageProvider
{
StorageFactory
:
c
.
ExtraConfig
.
StorageFactory
,
ProxyTransport
:
c
.
ExtraConfig
.
ProxyTransport
,
...
...
@@ -405,7 +405,7 @@ func (m *Master) InstallAPIs(apiResourceConfigSource serverstorage.APIResourceCo
for
_
,
restStorageBuilder
:=
range
restStorageProviders
{
groupName
:=
restStorageBuilder
.
GroupName
()
if
!
apiResourceConfigSource
.
Any
Resources
ForGroupEnabled
(
groupName
)
{
if
!
apiResourceConfigSource
.
Any
Version
ForGroupEnabled
(
groupName
)
{
glog
.
V
(
1
)
.
Infof
(
"Skipping disabled API group %q."
,
groupName
)
continue
}
...
...
@@ -486,15 +486,5 @@ func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig {
admissionregistrationv1beta1
.
SchemeGroupVersion
,
)
// all extensions resources except these are disabled by default
ret
.
EnableResources
(
extensionsapiv1beta1
.
SchemeGroupVersion
.
WithResource
(
"daemonsets"
),
extensionsapiv1beta1
.
SchemeGroupVersion
.
WithResource
(
"deployments"
),
extensionsapiv1beta1
.
SchemeGroupVersion
.
WithResource
(
"ingresses"
),
extensionsapiv1beta1
.
SchemeGroupVersion
.
WithResource
(
"networkpolicies"
),
extensionsapiv1beta1
.
SchemeGroupVersion
.
WithResource
(
"replicasets"
),
extensionsapiv1beta1
.
SchemeGroupVersion
.
WithResource
(
"podsecuritypolicies"
),
)
return
ret
}
pkg/master/master_test.go
View file @
2b25ec79
...
...
@@ -352,8 +352,8 @@ func TestAPIVersionOfDiscoveryEndpoints(t *testing.T) {
func
TestNoAlphaVersionsEnabledByDefault
(
t
*
testing
.
T
)
{
config
:=
DefaultAPIResourceConfigSource
()
for
gv
,
gvConfig
:=
range
config
.
GroupVersionResource
Configs
{
if
gvConfig
.
E
nable
&&
strings
.
Contains
(
gv
.
Version
,
"alpha"
)
{
for
gv
,
enable
:=
range
config
.
GroupVersion
Configs
{
if
e
nable
&&
strings
.
Contains
(
gv
.
Version
,
"alpha"
)
{
t
.
Errorf
(
"Alpha API version %s enabled by default"
,
gv
.
String
())
}
}
...
...
pkg/registry/admissionregistration/rest/storage_apiserver.go
View file @
2b25ec79
...
...
@@ -37,11 +37,11 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
admissionregistrationv1alpha1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
admissionregistrationv1alpha1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
admissionregistrationv1alpha1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1alpha1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
admissionregistrationv1alpha1
.
SchemeGroupVersion
}
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
admissionregistrationv1beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
admissionregistrationv1beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
admissionregistrationv1beta1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1beta1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
admissionregistrationv1beta1
.
SchemeGroupVersion
}
...
...
@@ -49,26 +49,24 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1alpha1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
admissionregistrationv1alpha1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"initializerconfigurations"
))
{
s
:=
initializerconfigurationstorage
.
NewREST
(
restOptionsGetter
)
storage
[
"initializerconfigurations"
]
=
s
}
// initializerconfigurations
s
:=
initializerconfigurationstorage
.
NewREST
(
restOptionsGetter
)
storage
[
"initializerconfigurations"
]
=
s
return
storage
}
func
(
p
RESTStorageProvider
)
v1beta1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
admissionregistrationv1beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"validatingwebhookconfigurations"
))
{
s
:=
validatingwebhookconfigurationstorage
.
NewREST
(
restOptionsGetter
)
storage
[
"validatingwebhookconfigurations"
]
=
s
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"mutatingwebhookconfigurations"
))
{
s
:=
mutatingwebhookconfigurationstorage
.
NewREST
(
restOptionsGetter
)
storage
[
"mutatingwebhookconfigurations"
]
=
s
}
// validatingwebhookconfigurations
validatingStorage
:=
validatingwebhookconfigurationstorage
.
NewREST
(
restOptionsGetter
)
storage
[
"validatingwebhookconfigurations"
]
=
validatingStorage
// mutatingwebhookconfigurations
mutatingStorage
:=
mutatingwebhookconfigurationstorage
.
NewREST
(
restOptionsGetter
)
storage
[
"mutatingwebhookconfigurations"
]
=
mutatingStorage
return
storage
}
...
...
pkg/registry/apps/rest/storage_apps.go
View file @
2b25ec79
...
...
@@ -40,15 +40,15 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
appsapiv1beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
appsapiv1beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
appsapiv1beta1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1beta1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
appsapiv1beta1
.
SchemeGroupVersion
}
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
appsapiv1beta2
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
appsapiv1beta2
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
appsapiv1beta2
.
SchemeGroupVersion
.
Version
]
=
p
.
v1beta2Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
appsapiv1beta2
.
SchemeGroupVersion
}
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
appsapiv1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
appsapiv1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
appsapiv1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
appsapiv1
.
SchemeGroupVersion
}
...
...
@@ -57,94 +57,91 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1beta1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
appsapiv1beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"deployments"
))
{
deploymentStorage
:=
deploymentstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"deployments"
]
=
deploymentStorage
.
Deployment
storage
[
"deployments/status"
]
=
deploymentStorage
.
Status
storage
[
"deployments/rollback"
]
=
deploymentStorage
.
Rollback
storage
[
"deployments/scale"
]
=
deploymentStorage
.
Scale
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"statefulsets"
))
{
statefulSetStorage
:=
statefulsetstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"statefulsets"
]
=
statefulSetStorage
.
StatefulSet
storage
[
"statefulsets/status"
]
=
statefulSetStorage
.
Status
storage
[
"statefulsets/scale"
]
=
statefulSetStorage
.
Scale
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"controllerrevisions"
))
{
historyStorage
:=
controllerrevisionsstore
.
NewREST
(
restOptionsGetter
)
storage
[
"controllerrevisions"
]
=
historyStorage
}
// deployments
deploymentStorage
:=
deploymentstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"deployments"
]
=
deploymentStorage
.
Deployment
storage
[
"deployments/status"
]
=
deploymentStorage
.
Status
storage
[
"deployments/rollback"
]
=
deploymentStorage
.
Rollback
storage
[
"deployments/scale"
]
=
deploymentStorage
.
Scale
// statefulsets
statefulSetStorage
:=
statefulsetstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"statefulsets"
]
=
statefulSetStorage
.
StatefulSet
storage
[
"statefulsets/status"
]
=
statefulSetStorage
.
Status
storage
[
"statefulsets/scale"
]
=
statefulSetStorage
.
Scale
// controllerrevisions
historyStorage
:=
controllerrevisionsstore
.
NewREST
(
restOptionsGetter
)
storage
[
"controllerrevisions"
]
=
historyStorage
return
storage
}
func
(
p
RESTStorageProvider
)
v1beta2Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
appsapiv1beta2
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"deployments"
))
{
deploymentStorage
:=
deploymentstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"deployments"
]
=
deploymentStorage
.
Deployment
storage
[
"deployments/status"
]
=
deploymentStorage
.
Status
storage
[
"deployments/scale"
]
=
deploymentStorage
.
Scale
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"statefulsets"
))
{
statefulSetStorage
:=
statefulsetstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"statefulsets"
]
=
statefulSetStorage
.
StatefulSet
storage
[
"statefulsets/status"
]
=
statefulSetStorage
.
Status
storage
[
"statefulsets/scale"
]
=
statefulSetStorage
.
Scale
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"daemonsets"
))
{
daemonSetStorage
,
daemonSetStatusStorage
:=
daemonsetstore
.
NewREST
(
restOptionsGetter
)
storage
[
"daemonsets"
]
=
daemonSetStorage
storage
[
"daemonsets/status"
]
=
daemonSetStatusStorage
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"replicasets"
))
{
replicaSetStorage
:=
replicasetstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"replicasets"
]
=
replicaSetStorage
.
ReplicaSet
storage
[
"replicasets/status"
]
=
replicaSetStorage
.
Status
storage
[
"replicasets/scale"
]
=
replicaSetStorage
.
Scale
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"controllerrevisions"
))
{
historyStorage
:=
controllerrevisionsstore
.
NewREST
(
restOptionsGetter
)
storage
[
"controllerrevisions"
]
=
historyStorage
}
// deployments
deploymentStorage
:=
deploymentstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"deployments"
]
=
deploymentStorage
.
Deployment
storage
[
"deployments/status"
]
=
deploymentStorage
.
Status
storage
[
"deployments/scale"
]
=
deploymentStorage
.
Scale
// statefulsets
statefulSetStorage
:=
statefulsetstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"statefulsets"
]
=
statefulSetStorage
.
StatefulSet
storage
[
"statefulsets/status"
]
=
statefulSetStorage
.
Status
storage
[
"statefulsets/scale"
]
=
statefulSetStorage
.
Scale
// daemonsets
daemonSetStorage
,
daemonSetStatusStorage
:=
daemonsetstore
.
NewREST
(
restOptionsGetter
)
storage
[
"daemonsets"
]
=
daemonSetStorage
storage
[
"daemonsets/status"
]
=
daemonSetStatusStorage
// replicasets
replicaSetStorage
:=
replicasetstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"replicasets"
]
=
replicaSetStorage
.
ReplicaSet
storage
[
"replicasets/status"
]
=
replicaSetStorage
.
Status
storage
[
"replicasets/scale"
]
=
replicaSetStorage
.
Scale
// controllerrevisions
historyStorage
:=
controllerrevisionsstore
.
NewREST
(
restOptionsGetter
)
storage
[
"controllerrevisions"
]
=
historyStorage
return
storage
}
func
(
p
RESTStorageProvider
)
v1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
appsapiv1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"deployments"
))
{
deploymentStorage
:=
deploymentstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"deployments"
]
=
deploymentStorage
.
Deployment
storage
[
"deployments/status"
]
=
deploymentStorage
.
Status
storage
[
"deployments/scale"
]
=
deploymentStorage
.
Scale
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"statefulsets"
))
{
statefulSetStorage
:=
statefulsetstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"statefulsets"
]
=
statefulSetStorage
.
StatefulSet
storage
[
"statefulsets/status"
]
=
statefulSetStorage
.
Status
storage
[
"statefulsets/scale"
]
=
statefulSetStorage
.
Scale
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"daemonsets"
))
{
daemonSetStorage
,
daemonSetStatusStorage
:=
daemonsetstore
.
NewREST
(
restOptionsGetter
)
storage
[
"daemonsets"
]
=
daemonSetStorage
storage
[
"daemonsets/status"
]
=
daemonSetStatusStorage
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"replicasets"
))
{
replicaSetStorage
:=
replicasetstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"replicasets"
]
=
replicaSetStorage
.
ReplicaSet
storage
[
"replicasets/status"
]
=
replicaSetStorage
.
Status
storage
[
"replicasets/scale"
]
=
replicaSetStorage
.
Scale
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"controllerrevisions"
))
{
historyStorage
:=
controllerrevisionsstore
.
NewREST
(
restOptionsGetter
)
storage
[
"controllerrevisions"
]
=
historyStorage
}
// deployments
deploymentStorage
:=
deploymentstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"deployments"
]
=
deploymentStorage
.
Deployment
storage
[
"deployments/status"
]
=
deploymentStorage
.
Status
storage
[
"deployments/scale"
]
=
deploymentStorage
.
Scale
// statefulsets
statefulSetStorage
:=
statefulsetstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"statefulsets"
]
=
statefulSetStorage
.
StatefulSet
storage
[
"statefulsets/status"
]
=
statefulSetStorage
.
Status
storage
[
"statefulsets/scale"
]
=
statefulSetStorage
.
Scale
// daemonsets
daemonSetStorage
,
daemonSetStatusStorage
:=
daemonsetstore
.
NewREST
(
restOptionsGetter
)
storage
[
"daemonsets"
]
=
daemonSetStorage
storage
[
"daemonsets/status"
]
=
daemonSetStatusStorage
// replicasets
replicaSetStorage
:=
replicasetstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"replicasets"
]
=
replicaSetStorage
.
ReplicaSet
storage
[
"replicasets/status"
]
=
replicaSetStorage
.
Status
storage
[
"replicasets/scale"
]
=
replicaSetStorage
.
Scale
// controllerrevisions
historyStorage
:=
controllerrevisionsstore
.
NewREST
(
restOptionsGetter
)
storage
[
"controllerrevisions"
]
=
historyStorage
return
storage
}
...
...
pkg/registry/authentication/rest/storage_authentication.go
View file @
2b25ec79
...
...
@@ -43,11 +43,11 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
authenticationv1beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
authenticationv1beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
authenticationv1beta1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1beta1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
authenticationv1beta1
.
SchemeGroupVersion
}
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
authenticationv1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
authenticationv1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
authenticationv1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
authenticationv1
.
SchemeGroupVersion
}
...
...
@@ -56,29 +56,19 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1beta1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
authenticationv1beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
AnyResourcesForVersionEnabled
(
authenticationv1beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"tokenreviews"
))
{
tokenReviewStorage
:=
tokenreview
.
NewREST
(
p
.
Authenticator
)
storage
[
"tokenreviews"
]
=
tokenReviewStorage
}
}
// tokenreviews
tokenReviewStorage
:=
tokenreview
.
NewREST
(
p
.
Authenticator
)
storage
[
"tokenreviews"
]
=
tokenReviewStorage
return
storage
}
func
(
p
RESTStorageProvider
)
v1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
authenticationv1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
AnyResourcesForVersionEnabled
(
authenticationv1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"tokenreviews"
))
{
tokenReviewStorage
:=
tokenreview
.
NewREST
(
p
.
Authenticator
)
storage
[
"tokenreviews"
]
=
tokenReviewStorage
}
}
// tokenreviews
tokenReviewStorage
:=
tokenreview
.
NewREST
(
p
.
Authenticator
)
storage
[
"tokenreviews"
]
=
tokenReviewStorage
return
storage
}
...
...
pkg/registry/authorization/rest/storage_authorization.go
View file @
2b25ec79
...
...
@@ -46,12 +46,12 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
authorizationv1beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
authorizationv1beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
authorizationv1beta1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1beta1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
authorizationv1beta1
.
SchemeGroupVersion
}
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
authorizationv1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
authorizationv1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
authorizationv1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
authorizationv1
.
SchemeGroupVersion
}
...
...
@@ -60,41 +60,29 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1beta1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
authorizationv1beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"subjectaccessreviews"
))
{
storage
[
"subjectaccessreviews"
]
=
subjectaccessreview
.
NewREST
(
p
.
Authorizer
)
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"selfsubjectaccessreviews"
))
{
storage
[
"selfsubjectaccessreviews"
]
=
selfsubjectaccessreview
.
NewREST
(
p
.
Authorizer
)
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"localsubjectaccessreviews"
))
{
storage
[
"localsubjectaccessreviews"
]
=
localsubjectaccessreview
.
NewREST
(
p
.
Authorizer
)
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"selfsubjectrulesreviews"
))
{
storage
[
"selfsubjectrulesreviews"
]
=
selfsubjectrulesreview
.
NewREST
(
p
.
RuleResolver
)
}
// subjectaccessreviews
storage
[
"subjectaccessreviews"
]
=
subjectaccessreview
.
NewREST
(
p
.
Authorizer
)
// selfsubjectaccessreviews
storage
[
"selfsubjectaccessreviews"
]
=
selfsubjectaccessreview
.
NewREST
(
p
.
Authorizer
)
// localsubjectaccessreviews
storage
[
"localsubjectaccessreviews"
]
=
localsubjectaccessreview
.
NewREST
(
p
.
Authorizer
)
// selfsubjectrulesreviews
storage
[
"selfsubjectrulesreviews"
]
=
selfsubjectrulesreview
.
NewREST
(
p
.
RuleResolver
)
return
storage
}
func
(
p
RESTStorageProvider
)
v1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
authorizationv1beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"subjectaccessreviews"
))
{
storage
[
"subjectaccessreviews"
]
=
subjectaccessreview
.
NewREST
(
p
.
Authorizer
)
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"selfsubjectaccessreviews"
))
{
storage
[
"selfsubjectaccessreviews"
]
=
selfsubjectaccessreview
.
NewREST
(
p
.
Authorizer
)
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"localsubjectaccessreviews"
))
{
storage
[
"localsubjectaccessreviews"
]
=
localsubjectaccessreview
.
NewREST
(
p
.
Authorizer
)
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"selfsubjectrulesreviews"
))
{
storage
[
"selfsubjectrulesreviews"
]
=
selfsubjectrulesreview
.
NewREST
(
p
.
RuleResolver
)
}
// subjectaccessreviews
storage
[
"subjectaccessreviews"
]
=
subjectaccessreview
.
NewREST
(
p
.
Authorizer
)
// selfsubjectaccessreviews
storage
[
"selfsubjectaccessreviews"
]
=
selfsubjectaccessreview
.
NewREST
(
p
.
Authorizer
)
// localsubjectaccessreviews
storage
[
"localsubjectaccessreviews"
]
=
localsubjectaccessreview
.
NewREST
(
p
.
Authorizer
)
// selfsubjectrulesreviews
storage
[
"selfsubjectrulesreviews"
]
=
selfsubjectrulesreview
.
NewREST
(
p
.
RuleResolver
)
return
storage
}
...
...
pkg/registry/autoscaling/rest/storage_autoscaling.go
View file @
2b25ec79
...
...
@@ -35,11 +35,11 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
autoscalingapiv2beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
autoscalingapiv2beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
autoscalingapiv2beta1
.
SchemeGroupVersion
.
Version
]
=
p
.
v2beta1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
autoscalingapiv2beta1
.
SchemeGroupVersion
}
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
autoscalingapiv1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
autoscalingapiv1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
autoscalingapiv1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
autoscalingapiv1
.
SchemeGroupVersion
}
...
...
@@ -48,26 +48,22 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
autoscalingapiv1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"horizontalpodautoscalers"
))
{
hpaStorage
,
hpaStatusStorage
:=
horizontalpodautoscalerstore
.
NewREST
(
restOptionsGetter
)
storage
[
"horizontalpodautoscalers"
]
=
hpaStorage
storage
[
"horizontalpodautoscalers/status"
]
=
hpaStatusStorage
}
// horizontalpodautoscalers
hpaStorage
,
hpaStatusStorage
:=
horizontalpodautoscalerstore
.
NewREST
(
restOptionsGetter
)
storage
[
"horizontalpodautoscalers"
]
=
hpaStorage
storage
[
"horizontalpodautoscalers/status"
]
=
hpaStatusStorage
return
storage
}
func
(
p
RESTStorageProvider
)
v2beta1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
autoscalingapiv2beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"horizontalpodautoscalers"
))
{
hpaStorage
,
hpaStatusStorage
:=
horizontalpodautoscalerstore
.
NewREST
(
restOptionsGetter
)
storage
[
"horizontalpodautoscalers"
]
=
hpaStorage
storage
[
"horizontalpodautoscalers/status"
]
=
hpaStatusStorage
}
// horizontalpodautoscalers
hpaStorage
,
hpaStatusStorage
:=
horizontalpodautoscalerstore
.
NewREST
(
restOptionsGetter
)
storage
[
"horizontalpodautoscalers"
]
=
hpaStorage
storage
[
"horizontalpodautoscalers/status"
]
=
hpaStatusStorage
return
storage
}
...
...
pkg/registry/batch/rest/storage_batch.go
View file @
2b25ec79
...
...
@@ -37,15 +37,15 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
batchapiv1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
batchapiv1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
batchapiv1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
batchapiv1
.
SchemeGroupVersion
}
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
batchapiv1beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
batchapiv1beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
batchapiv1beta1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1beta1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
batchapiv1beta1
.
SchemeGroupVersion
}
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
batchapiv2alpha1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
batchapiv2alpha1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
batchapiv2alpha1
.
SchemeGroupVersion
.
Version
]
=
p
.
v2alpha1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
batchapiv2alpha1
.
SchemeGroupVersion
}
...
...
@@ -54,38 +54,32 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
batchapiv1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"jobs"
))
{
jobsStorage
,
jobsStatusStorage
:=
jobstore
.
NewREST
(
restOptionsGetter
)
storage
[
"jobs"
]
=
jobsStorage
storage
[
"jobs/status"
]
=
jobsStatusStorage
}
// jobs
jobsStorage
,
jobsStatusStorage
:=
jobstore
.
NewREST
(
restOptionsGetter
)
storage
[
"jobs"
]
=
jobsStorage
storage
[
"jobs/status"
]
=
jobsStatusStorage
return
storage
}
func
(
p
RESTStorageProvider
)
v1beta1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
batchapiv1beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"cronjobs"
))
{
cronJobsStorage
,
cronJobsStatusStorage
:=
cronjobstore
.
NewREST
(
restOptionsGetter
)
storage
[
"cronjobs"
]
=
cronJobsStorage
storage
[
"cronjobs/status"
]
=
cronJobsStatusStorage
}
// cronjobs
cronJobsStorage
,
cronJobsStatusStorage
:=
cronjobstore
.
NewREST
(
restOptionsGetter
)
storage
[
"cronjobs"
]
=
cronJobsStorage
storage
[
"cronjobs/status"
]
=
cronJobsStatusStorage
return
storage
}
func
(
p
RESTStorageProvider
)
v2alpha1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
batchapiv2alpha1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"cronjobs"
))
{
cronJobsStorage
,
cronJobsStatusStorage
:=
cronjobstore
.
NewREST
(
restOptionsGetter
)
storage
[
"cronjobs"
]
=
cronJobsStorage
storage
[
"cronjobs/status"
]
=
cronJobsStatusStorage
}
// cronjobs
cronJobsStorage
,
cronJobsStatusStorage
:=
cronjobstore
.
NewREST
(
restOptionsGetter
)
storage
[
"cronjobs"
]
=
cronJobsStorage
storage
[
"cronjobs/status"
]
=
cronJobsStatusStorage
return
storage
}
...
...
pkg/registry/certificates/rest/storage_certificates.go
View file @
2b25ec79
...
...
@@ -34,7 +34,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
certificatesapiv1beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
certificatesapiv1beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
certificatesapiv1beta1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1beta1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
certificatesapiv1beta1
.
SchemeGroupVersion
}
...
...
@@ -43,15 +43,13 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1beta1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
certificatesapiv1beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"certificatesigningrequests"
))
{
csrStorage
,
csrStatusStorage
,
csrApprovalStorage
:=
certificatestore
.
NewREST
(
restOptionsGetter
)
storage
[
"certificatesigningrequests"
]
=
csrStorage
storage
[
"certificatesigningrequests/status"
]
=
csrStatusStorage
storage
[
"certificatesigningrequests/approval"
]
=
csrApprovalStorage
}
// certificatesigningrequests
csrStorage
,
csrStatusStorage
,
csrApprovalStorage
:=
certificatestore
.
NewREST
(
restOptionsGetter
)
storage
[
"certificatesigningrequests"
]
=
csrStorage
storage
[
"certificatesigningrequests/status"
]
=
csrStatusStorage
storage
[
"certificatesigningrequests/approval"
]
=
csrApprovalStorage
return
storage
}
...
...
pkg/registry/events/rest/storage_events.go
View file @
2b25ec79
...
...
@@ -38,7 +38,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
eventsapiv1beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
eventsapiv1beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
eventsapiv1beta1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1beta1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
eventsapiv1beta1
.
SchemeGroupVersion
}
...
...
@@ -47,13 +47,11 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1beta1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
eventsapiv1beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"events"
))
{
eventsStorage
:=
eventstore
.
NewREST
(
restOptionsGetter
,
uint64
(
p
.
TTL
.
Seconds
()))
storage
[
"events"
]
=
eventsStorage
}
// events
eventsStorage
:=
eventstore
.
NewREST
(
restOptionsGetter
,
uint64
(
p
.
TTL
.
Seconds
()))
storage
[
"events"
]
=
eventsStorage
return
storage
}
...
...
pkg/registry/extensions/rest/storage_extensions.go
View file @
2b25ec79
...
...
@@ -33,15 +33,14 @@ import (
networkpolicystore
"k8s.io/kubernetes/pkg/registry/networking/networkpolicy/storage"
)
type
RESTStorageProvider
struct
{
}
type
RESTStorageProvider
struct
{}
func
(
p
RESTStorageProvider
)
NewRESTStorage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
(
genericapiserver
.
APIGroupInfo
,
bool
)
{
apiGroupInfo
:=
genericapiserver
.
NewDefaultAPIGroupInfo
(
extensions
.
GroupName
,
legacyscheme
.
Registry
,
legacyscheme
.
Scheme
,
legacyscheme
.
ParameterCodec
,
legacyscheme
.
Codecs
)
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
extensionsapiv1beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
extensionsapiv1beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
extensionsapiv1beta1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1beta1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
extensionsapiv1beta1
.
SchemeGroupVersion
}
...
...
@@ -50,8 +49,6 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1beta1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
extensionsapiv1beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
// This is a dummy replication controller for scale subresource purposes.
...
...
@@ -60,37 +57,35 @@ func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorag
storage
[
"replicationcontrollers"
]
=
controllerStorage
.
ReplicationController
storage
[
"replicationcontrollers/scale"
]
=
controllerStorage
.
Scale
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"daemonsets"
))
{
daemonSetStorage
,
daemonSetStatusStorage
:=
daemonstore
.
NewREST
(
restOptionsGetter
)
storage
[
"daemonsets"
]
=
daemonSetStorage
.
WithCategories
(
nil
)
storage
[
"daemonsets/status"
]
=
daemonSetStatusStorage
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"deployments"
))
{
deploymentStorage
:=
deploymentstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"deployments"
]
=
deploymentStorage
.
Deployment
.
WithCategories
(
nil
)
storage
[
"deployments/status"
]
=
deploymentStorage
.
Status
storage
[
"deployments/rollback"
]
=
deploymentStorage
.
Rollback
storage
[
"deployments/scale"
]
=
deploymentStorage
.
Scale
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"ingresses"
))
{
ingressStorage
,
ingressStatusStorage
:=
ingressstore
.
NewREST
(
restOptionsGetter
)
storage
[
"ingresses"
]
=
ingressStorage
storage
[
"ingresses/status"
]
=
ingressStatusStorage
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"podsecuritypolicy"
))
||
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"podsecuritypolicies"
))
{
podSecurityExtensionsStorage
:=
pspstore
.
NewREST
(
restOptionsGetter
)
storage
[
"podSecurityPolicies"
]
=
podSecurityExtensionsStorage
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"replicasets"
))
{
replicaSetStorage
:=
replicasetstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"replicasets"
]
=
replicaSetStorage
.
ReplicaSet
.
WithCategories
(
nil
)
storage
[
"replicasets/status"
]
=
replicaSetStorage
.
Status
storage
[
"replicasets/scale"
]
=
replicaSetStorage
.
Scale
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"networkpolicies"
))
{
networkExtensionsStorage
:=
networkpolicystore
.
NewREST
(
restOptionsGetter
)
storage
[
"networkpolicies"
]
=
networkExtensionsStorage
}
// daemonsets
daemonSetStorage
,
daemonSetStatusStorage
:=
daemonstore
.
NewREST
(
restOptionsGetter
)
storage
[
"daemonsets"
]
=
daemonSetStorage
.
WithCategories
(
nil
)
storage
[
"daemonsets/status"
]
=
daemonSetStatusStorage
//deployments
deploymentStorage
:=
deploymentstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"deployments"
]
=
deploymentStorage
.
Deployment
.
WithCategories
(
nil
)
storage
[
"deployments/status"
]
=
deploymentStorage
.
Status
storage
[
"deployments/rollback"
]
=
deploymentStorage
.
Rollback
storage
[
"deployments/scale"
]
=
deploymentStorage
.
Scale
// ingresses
ingressStorage
,
ingressStatusStorage
:=
ingressstore
.
NewREST
(
restOptionsGetter
)
storage
[
"ingresses"
]
=
ingressStorage
storage
[
"ingresses/status"
]
=
ingressStatusStorage
// podsecuritypolicy
podSecurityExtensionsStorage
:=
pspstore
.
NewREST
(
restOptionsGetter
)
storage
[
"podSecurityPolicies"
]
=
podSecurityExtensionsStorage
// replicasets
replicaSetStorage
:=
replicasetstore
.
NewStorage
(
restOptionsGetter
)
storage
[
"replicasets"
]
=
replicaSetStorage
.
ReplicaSet
.
WithCategories
(
nil
)
storage
[
"replicasets/status"
]
=
replicaSetStorage
.
Status
storage
[
"replicasets/scale"
]
=
replicaSetStorage
.
Scale
// networkpolicies
networkExtensionsStorage
:=
networkpolicystore
.
NewREST
(
restOptionsGetter
)
storage
[
"networkpolicies"
]
=
networkExtensionsStorage
return
storage
}
...
...
pkg/registry/networking/rest/storage_settings.go
View file @
2b25ec79
...
...
@@ -34,7 +34,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
networkingapiv1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
networkingapiv1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
networkingapiv1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1alpha1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
networkingapiv1
.
SchemeGroupVersion
}
...
...
@@ -43,13 +43,11 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1alpha1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
networkingapiv1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"networkpolicies"
))
{
networkPolicyStorage
:=
networkpolicystore
.
NewREST
(
restOptionsGetter
)
storage
[
"networkpolicies"
]
=
networkPolicyStorage
}
// networkpolicies
networkPolicyStorage
:=
networkpolicystore
.
NewREST
(
restOptionsGetter
)
storage
[
"networkpolicies"
]
=
networkPolicyStorage
return
storage
}
...
...
pkg/registry/policy/rest/storage_policy.go
View file @
2b25ec79
...
...
@@ -35,7 +35,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
policyapiv1beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
policyapiv1beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
policyapiv1beta1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1beta1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
policyapiv1beta1
.
SchemeGroupVersion
}
...
...
@@ -43,19 +43,14 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1beta1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
policyapiv1beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
// poddisruptionbudgets
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"poddisruptionbudgets"
))
{
poddisruptionbudgetStorage
,
poddisruptionbudgetStatusStorage
:=
poddisruptionbudgetstore
.
NewREST
(
restOptionsGetter
)
storage
[
"poddisruptionbudgets"
]
=
poddisruptionbudget
Storage
storage
[
"poddisruptionbudgets/status"
]
=
poddisruptionbudgetStatusStorage
}
poddisruptionbudgetStorage
,
poddisruptionbudgetStatusStorage
:=
poddisruptionbudgetstore
.
NewREST
(
restOptionsGetter
)
storage
[
"poddisruptionbudgets"
]
=
poddisruptionbudgetStorage
storage
[
"poddisruptionbudgets/status"
]
=
poddisruptionbudgetStatus
Storage
storage
[
"podsecuritypolicies"
]
=
pspstore
.
NewREST
(
restOptionsGetter
)
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"podsecuritypolicies"
))
{
storage
[
"podsecuritypolicies"
]
=
pspstore
.
NewREST
(
restOptionsGetter
)
}
return
storage
}
...
...
pkg/registry/rbac/rest/storage_rbac.go
View file @
2b25ec79
...
...
@@ -18,7 +18,6 @@ package rest
import
(
"fmt"
"sync"
"time"
"github.com/golang/glog"
...
...
@@ -71,15 +70,15 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
rbacapiv1alpha1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
rbacapiv1alpha1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
rbacapiv1alpha1
.
SchemeGroupVersion
.
Version
]
=
p
.
storage
(
rbacapiv1alpha1
.
SchemeGroupVersion
,
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
rbacapiv1alpha1
.
SchemeGroupVersion
}
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
rbacapiv1beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
rbacapiv1beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
rbacapiv1beta1
.
SchemeGroupVersion
.
Version
]
=
p
.
storage
(
rbacapiv1beta1
.
SchemeGroupVersion
,
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
rbacapiv1beta1
.
SchemeGroupVersion
}
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
rbacapiv1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
rbacapiv1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
rbacapiv1
.
SchemeGroupVersion
.
Version
]
=
p
.
storage
(
rbacapiv1
.
SchemeGroupVersion
,
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
rbacapiv1
.
SchemeGroupVersion
}
...
...
@@ -88,48 +87,31 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
storage
(
version
schema
.
GroupVersion
,
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
once
:=
new
(
sync
.
Once
)
var
(
authorizationRuleResolver
rbacregistryvalidation
.
AuthorizationRuleResolver
rolesStorage
rest
.
StandardStorage
roleBindingsStorage
rest
.
StandardStorage
clusterRolesStorage
rest
.
StandardStorage
clusterRoleBindingsStorage
rest
.
StandardStorage
storage
:=
map
[
string
]
rest
.
Storage
{}
rolesStorage
:=
rolestore
.
NewREST
(
restOptionsGetter
)
roleBindingsStorage
:=
rolebindingstore
.
NewREST
(
restOptionsGetter
)
clusterRolesStorage
:=
clusterrolestore
.
NewREST
(
restOptionsGetter
)
clusterRoleBindingsStorage
:=
clusterrolebindingstore
.
NewREST
(
restOptionsGetter
)
authorizationRuleResolver
:=
rbacregistryvalidation
.
NewDefaultRuleResolver
(
role
.
AuthorizerAdapter
{
Registry
:
role
.
NewRegistry
(
rolesStorage
)},
rolebinding
.
AuthorizerAdapter
{
Registry
:
rolebinding
.
NewRegistry
(
roleBindingsStorage
)},
clusterrole
.
AuthorizerAdapter
{
Registry
:
clusterrole
.
NewRegistry
(
clusterRolesStorage
)},
clusterrolebinding
.
AuthorizerAdapter
{
Registry
:
clusterrolebinding
.
NewRegistry
(
clusterRoleBindingsStorage
)},
)
initializeStorage
:=
func
()
{
once
.
Do
(
func
()
{
rolesStorage
=
rolestore
.
NewREST
(
restOptionsGetter
)
roleBindingsStorage
=
rolebindingstore
.
NewREST
(
restOptionsGetter
)
clusterRolesStorage
=
clusterrolestore
.
NewREST
(
restOptionsGetter
)
clusterRoleBindingsStorage
=
clusterrolebindingstore
.
NewREST
(
restOptionsGetter
)
authorizationRuleResolver
=
rbacregistryvalidation
.
NewDefaultRuleResolver
(
role
.
AuthorizerAdapter
{
Registry
:
role
.
NewRegistry
(
rolesStorage
)},
rolebinding
.
AuthorizerAdapter
{
Registry
:
rolebinding
.
NewRegistry
(
roleBindingsStorage
)},
clusterrole
.
AuthorizerAdapter
{
Registry
:
clusterrole
.
NewRegistry
(
clusterRolesStorage
)},
clusterrolebinding
.
AuthorizerAdapter
{
Registry
:
clusterrolebinding
.
NewRegistry
(
clusterRoleBindingsStorage
)},
)
})
}
// roles
storage
[
"roles"
]
=
rolepolicybased
.
NewStorage
(
rolesStorage
,
authorizationRuleResolver
)
// rolebindings
storage
[
"rolebindings"
]
=
rolebindingpolicybased
.
NewStorage
(
roleBindingsStorage
,
p
.
Authorizer
,
authorizationRuleResolver
)
// clusterroles
storage
[
"clusterroles"
]
=
clusterrolepolicybased
.
NewStorage
(
clusterRolesStorage
,
authorizationRuleResolver
)
// clusterrolebindings
storage
[
"clusterrolebindings"
]
=
clusterrolebindingpolicybased
.
NewStorage
(
clusterRoleBindingsStorage
,
p
.
Authorizer
,
authorizationRuleResolver
)
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"roles"
))
{
initializeStorage
()
storage
[
"roles"
]
=
rolepolicybased
.
NewStorage
(
rolesStorage
,
authorizationRuleResolver
)
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"rolebindings"
))
{
initializeStorage
()
storage
[
"rolebindings"
]
=
rolebindingpolicybased
.
NewStorage
(
roleBindingsStorage
,
p
.
Authorizer
,
authorizationRuleResolver
)
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"clusterroles"
))
{
initializeStorage
()
storage
[
"clusterroles"
]
=
clusterrolepolicybased
.
NewStorage
(
clusterRolesStorage
,
authorizationRuleResolver
)
}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"clusterrolebindings"
))
{
initializeStorage
()
storage
[
"clusterrolebindings"
]
=
clusterrolebindingpolicybased
.
NewStorage
(
clusterRoleBindingsStorage
,
p
.
Authorizer
,
authorizationRuleResolver
)
}
return
storage
}
...
...
pkg/registry/scheduling/rest/storage_scheduling.go
View file @
2b25ec79
...
...
@@ -32,7 +32,7 @@ type RESTStorageProvider struct{}
func
(
p
RESTStorageProvider
)
NewRESTStorage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
(
genericapiserver
.
APIGroupInfo
,
bool
)
{
apiGroupInfo
:=
genericapiserver
.
NewDefaultAPIGroupInfo
(
scheduling
.
GroupName
,
legacyscheme
.
Registry
,
legacyscheme
.
Scheme
,
legacyscheme
.
ParameterCodec
,
legacyscheme
.
Codecs
)
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
schedulingapiv1alpha1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
schedulingapiv1alpha1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
schedulingapiv1alpha1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1alpha1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
schedulingapiv1alpha1
.
SchemeGroupVersion
}
...
...
@@ -41,13 +41,11 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1alpha1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
schedulingapiv1alpha1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"priorityclasses"
))
{
priorityClassStorage
:=
priorityclassstore
.
NewREST
(
restOptionsGetter
)
storage
[
"priorityclasses"
]
=
priorityClassStorage
}
// priorityclasses
priorityClassStorage
:=
priorityclassstore
.
NewREST
(
restOptionsGetter
)
storage
[
"priorityclasses"
]
=
priorityClassStorage
return
storage
}
...
...
pkg/registry/settings/rest/storage_settings.go
View file @
2b25ec79
...
...
@@ -34,7 +34,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
settingsapiv1alpha1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
settingsapiv1alpha1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
settingsapiv1alpha1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1alpha1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
settingsapiv1alpha1
.
SchemeGroupVersion
}
...
...
@@ -43,13 +43,11 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1alpha1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
settingsapiv1alpha1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"podpresets"
))
{
podPresetStorage
:=
podpresetstore
.
NewREST
(
restOptionsGetter
)
storage
[
"podpresets"
]
=
podPresetStorage
}
// podpresets
podPresetStorage
:=
podpresetstore
.
NewREST
(
restOptionsGetter
)
storage
[
"podpresets"
]
=
podPresetStorage
return
storage
}
...
...
pkg/registry/storage/rest/storage_storage.go
View file @
2b25ec79
...
...
@@ -38,15 +38,15 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
// If you add a version here, be sure to add an entry in `k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go with specific priorities.
// TODO refactor the plumbing to provide the information in the APIGroupInfo
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
storageapiv1alpha1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
storageapiv1alpha1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
storageapiv1alpha1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1alpha1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
storageapiv1alpha1
.
SchemeGroupVersion
}
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
storageapiv1beta1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
storageapiv1beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
storageapiv1beta1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1beta1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
storageapiv1beta1
.
SchemeGroupVersion
}
if
apiResourceConfigSource
.
AnyResourcesFor
VersionEnabled
(
storageapiv1
.
SchemeGroupVersion
)
{
if
apiResourceConfigSource
.
VersionEnabled
(
storageapiv1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
VersionedResourcesStorageMap
[
storageapiv1
.
SchemeGroupVersion
.
Version
]
=
p
.
v1Storage
(
apiResourceConfigSource
,
restOptionsGetter
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
storageapiv1
.
SchemeGroupVersion
}
...
...
@@ -55,27 +55,19 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1alpha1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
storageapiv1alpha1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"volumeattachments"
))
{
volumeAttachmentStorage
:=
volumeattachmentstore
.
NewREST
(
restOptionsGetter
)
storage
[
"volumeattachments"
]
=
volumeAttachmentStorage
}
// volumeattachments
volumeAttachmentStorage
:=
volumeattachmentstore
.
NewREST
(
restOptionsGetter
)
storage
[
"volumeattachments"
]
=
volumeAttachmentStorage
return
storage
}
func
(
p
RESTStorageProvider
)
v1beta1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
storageapiv1beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"storageclasses"
))
{
storageClassStorage
:=
storageclassstore
.
NewREST
(
restOptionsGetter
)
storage
[
"storageclasses"
]
=
storageClassStorage
}
// storageclasses
storageClassStorage
:=
storageclassstore
.
NewREST
(
restOptionsGetter
)
storage
[
"storageclasses"
]
=
storageClassStorage
// volumeattachments
volumeAttachmentStorage
:=
volumeattachmentstore
.
NewREST
(
restOptionsGetter
)
...
...
@@ -85,14 +77,10 @@ func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorag
}
func
(
p
RESTStorageProvider
)
v1Storage
(
apiResourceConfigSource
serverstorage
.
APIResourceConfigSource
,
restOptionsGetter
generic
.
RESTOptionsGetter
)
map
[
string
]
rest
.
Storage
{
version
:=
storageapiv1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
if
apiResourceConfigSource
.
ResourceEnabled
(
version
.
WithResource
(
"storageclasses"
))
{
storageClassStorage
:=
storageclassstore
.
NewREST
(
restOptionsGetter
)
storage
[
"storageclasses"
]
=
storageClassStorage
}
// storageclasses
storageClassStorage
:=
storageclassstore
.
NewREST
(
restOptionsGetter
)
storage
[
"storageclasses"
]
=
storageClassStorage
return
storage
}
...
...
staging/src/k8s.io/apiextensions-apiserver/Godeps/Godeps.json
View file @
2b25ec79
...
...
@@ -1375,6 +1375,10 @@
"Rev"
:
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{
"ImportPath"
:
"k8s.io/apiserver/pkg/server/resourceconfig"
,
"Rev"
:
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{
"ImportPath"
:
"k8s.io/apiserver/pkg/server/routes"
,
"Rev"
:
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
...
...
@@ -2199,6 +2203,10 @@
"Rev"
:
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{
"ImportPath"
:
"k8s.io/apiserver/pkg/server/storage"
,
"Rev"
:
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{
"ImportPath"
:
"k8s.io/apiserver/pkg/storage"
,
"Rev"
:
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD
View file @
2b25ec79
...
...
@@ -64,6 +64,7 @@ go_library(
"//vendor/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library",
"//vendor/k8s.io/apiserver/pkg/registry/rest:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/storage:go_default_library",
"//vendor/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//vendor/k8s.io/client-go/discovery:go_default_library",
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go
View file @
2b25ec79
...
...
@@ -35,6 +35,7 @@ import (
genericregistry
"k8s.io/apiserver/pkg/registry/generic"
"k8s.io/apiserver/pkg/registry/rest"
genericapiserver
"k8s.io/apiserver/pkg/server"
serverstorage
"k8s.io/apiserver/pkg/server/storage"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install"
...
...
@@ -53,7 +54,7 @@ import (
var
(
groupFactoryRegistry
=
make
(
announced
.
APIGroupFactoryRegistry
)
r
egistry
=
registered
.
NewOrDie
(
""
)
R
egistry
=
registered
.
NewOrDie
(
""
)
Scheme
=
runtime
.
NewScheme
()
Codecs
=
serializer
.
NewCodecFactory
(
Scheme
)
...
...
@@ -70,7 +71,7 @@ var (
)
func
init
()
{
install
.
Install
(
groupFactoryRegistry
,
r
egistry
,
Scheme
)
install
.
Install
(
groupFactoryRegistry
,
R
egistry
,
Scheme
)
// we need to add the options to empty v1
metav1
.
AddToGroupVersion
(
Scheme
,
schema
.
GroupVersion
{
Group
:
""
,
Version
:
"v1"
})
...
...
@@ -131,13 +132,18 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
GenericAPIServer
:
genericServer
,
}
apiGroupInfo
:=
genericapiserver
.
NewDefaultAPIGroupInfo
(
apiextensions
.
GroupName
,
registry
,
Scheme
,
metav1
.
ParameterCodec
,
Codecs
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
v1beta1
.
SchemeGroupVersion
customResourceDefintionStorage
:=
customresourcedefinition
.
NewREST
(
Scheme
,
c
.
GenericConfig
.
RESTOptionsGetter
)
v1beta1storage
:=
map
[
string
]
rest
.
Storage
{}
v1beta1storage
[
"customresourcedefinitions"
]
=
customResourceDefintionStorage
v1beta1storage
[
"customresourcedefinitions/status"
]
=
customresourcedefinition
.
NewStatusREST
(
Scheme
,
customResourceDefintionStorage
)
apiGroupInfo
.
VersionedResourcesStorageMap
[
"v1beta1"
]
=
v1beta1storage
apiResourceConfig
:=
c
.
GenericConfig
.
MergedResourceConfig
apiGroupInfo
:=
genericapiserver
.
NewDefaultAPIGroupInfo
(
apiextensions
.
GroupName
,
Registry
,
Scheme
,
metav1
.
ParameterCodec
,
Codecs
)
if
apiResourceConfig
.
VersionEnabled
(
v1beta1
.
SchemeGroupVersion
)
{
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
v1beta1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
// customresourcedefinitions
customResourceDefintionStorage
:=
customresourcedefinition
.
NewREST
(
Scheme
,
c
.
GenericConfig
.
RESTOptionsGetter
)
storage
[
"customresourcedefinitions"
]
=
customResourceDefintionStorage
storage
[
"customresourcedefinitions/status"
]
=
customresourcedefinition
.
NewStatusREST
(
Scheme
,
customResourceDefintionStorage
)
apiGroupInfo
.
VersionedResourcesStorageMap
[
"v1beta1"
]
=
storage
}
if
err
:=
s
.
GenericAPIServer
.
InstallAPIGroup
(
&
apiGroupInfo
);
err
!=
nil
{
return
nil
,
err
...
...
@@ -211,3 +217,13 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget)
return
s
,
nil
}
func
DefaultAPIResourceConfigSource
()
*
serverstorage
.
ResourceConfig
{
ret
:=
serverstorage
.
NewResourceConfig
()
// NOTE: GroupVersions listed here will be enabled by default. Don't put alpha versions in the list.
ret
.
EnableVersions
(
v1beta1
.
SchemeGroupVersion
,
)
return
ret
}
staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/start.go
View file @
2b25ec79
...
...
@@ -36,6 +36,7 @@ const defaultEtcdPathPrefix = "/registry/apiextensions.kubernetes.io"
type
CustomResourceDefinitionsServerOptions
struct
{
RecommendedOptions
*
genericoptions
.
RecommendedOptions
APIEnablement
*
genericoptions
.
APIEnablementOptions
StdOut
io
.
Writer
StdErr
io
.
Writer
...
...
@@ -44,6 +45,7 @@ type CustomResourceDefinitionsServerOptions struct {
func
NewCustomResourceDefinitionsServerOptions
(
out
,
errOut
io
.
Writer
)
*
CustomResourceDefinitionsServerOptions
{
o
:=
&
CustomResourceDefinitionsServerOptions
{
RecommendedOptions
:
genericoptions
.
NewRecommendedOptions
(
defaultEtcdPathPrefix
,
apiserver
.
Codecs
.
LegacyCodec
(
v1beta1
.
SchemeGroupVersion
)),
APIEnablement
:
genericoptions
.
NewAPIEnablementOptions
(),
StdOut
:
out
,
StdErr
:
errOut
,
...
...
@@ -77,13 +79,14 @@ func NewCommandStartCustomResourceDefinitionsServer(out, errOut io.Writer, stopC
flags
:=
cmd
.
Flags
()
o
.
RecommendedOptions
.
AddFlags
(
flags
)
o
.
APIEnablement
.
AddFlags
(
flags
)
return
cmd
}
func
(
o
CustomResourceDefinitionsServerOptions
)
Validate
(
args
[]
string
)
error
{
errors
:=
[]
error
{}
errors
=
append
(
errors
,
o
.
RecommendedOptions
.
Validate
()
...
)
errors
=
append
(
errors
,
o
.
APIEnablement
.
Validate
(
apiserver
.
Registry
)
...
)
return
utilerrors
.
NewAggregate
(
errors
)
}
...
...
@@ -101,6 +104,9 @@ func (o CustomResourceDefinitionsServerOptions) Config() (*apiserver.Config, err
if
err
:=
o
.
RecommendedOptions
.
ApplyTo
(
serverConfig
,
apiserver
.
Scheme
);
err
!=
nil
{
return
nil
,
err
}
if
err
:=
o
.
APIEnablement
.
ApplyTo
(
&
serverConfig
.
Config
,
apiserver
.
DefaultAPIResourceConfigSource
(),
apiserver
.
Registry
);
err
!=
nil
{
return
nil
,
err
}
config
:=
&
apiserver
.
Config
{
GenericConfig
:
serverConfig
,
...
...
staging/src/k8s.io/apiextensions-apiserver/test/integration/testserver/start.go
View file @
2b25ec79
...
...
@@ -64,6 +64,9 @@ func DefaultServerConfig() (*extensionsapiserver.Config, error) {
if
err
:=
options
.
RecommendedOptions
.
ApplyTo
(
genericConfig
,
nil
);
err
!=
nil
{
return
nil
,
err
}
if
err
:=
options
.
APIEnablement
.
ApplyTo
(
&
genericConfig
.
Config
,
extensionsapiserver
.
DefaultAPIResourceConfigSource
(),
extensionsapiserver
.
Registry
);
err
!=
nil
{
return
nil
,
err
}
customResourceDefinitionRESTOptionsGetter
:=
extensionsapiserver
.
CRDRESTOptionsGetter
{
StorageConfig
:
options
.
RecommendedOptions
.
Etcd
.
StorageConfig
,
...
...
staging/src/k8s.io/apiserver/pkg/server/BUILD
View file @
2b25ec79
...
...
@@ -139,6 +139,7 @@ go_library(
"//vendor/k8s.io/apiserver/pkg/server/healthz:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/mux:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/routes:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/storage:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//vendor/k8s.io/client-go/informers:go_default_library",
"//vendor/k8s.io/client-go/rest:go_default_library",
...
...
staging/src/k8s.io/apiserver/pkg/server/config.go
View file @
2b25ec79
...
...
@@ -57,6 +57,7 @@ import (
genericfilters
"k8s.io/apiserver/pkg/server/filters"
"k8s.io/apiserver/pkg/server/healthz"
"k8s.io/apiserver/pkg/server/routes"
serverstore
"k8s.io/apiserver/pkg/server/storage"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/informers"
restclient
"k8s.io/client-go/rest"
...
...
@@ -173,6 +174,11 @@ type Config struct {
// if the client requests it via Accept-Encoding
EnableAPIResponseCompression
bool
// MergedResourceConfig indicates which groupVersion enabled and its resources enabled/disabled.
// This is composed of genericapiserver defaultAPIResourceConfig and those parsed from flags.
// If not specify any in flags, then genericapiserver will only enable defaultAPIResourceConfig.
MergedResourceConfig
*
serverstore
.
ResourceConfig
//===========================================================================
// values below here are targets for removal
//===========================================================================
...
...
staging/src/k8s.io/apiserver/pkg/server/options/BUILD
View file @
2b25ec79
...
...
@@ -4,6 +4,7 @@ go_library(
name = "go_default_library",
srcs = [
"admission.go",
"api_enablement.go",
"audit.go",
"authentication.go",
"authorization.go",
...
...
@@ -48,6 +49,7 @@ go_library(
"//vendor/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/healthz:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/resourceconfig:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/storage:go_default_library",
"//vendor/k8s.io/apiserver/pkg/storage/etcd3/preflight:go_default_library",
"//vendor/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library",
...
...
pkg/kubeapi
server/options/api_enablement.go
→
staging/src/k8s.io/apiserver/pkg/
server/options/api_enablement.go
View file @
2b25ec79
...
...
@@ -17,8 +17,14 @@ limitations under the License.
package
options
import
(
"fmt"
"strings"
"github.com/spf13/pflag"
"k8s.io/apiserver/pkg/server"
"k8s.io/apiserver/pkg/server/resourceconfig"
serverstore
"k8s.io/apiserver/pkg/server/storage"
utilflag
"k8s.io/apiserver/pkg/util/flag"
)
...
...
@@ -39,7 +45,67 @@ func (s *APIEnablementOptions) AddFlags(fs *pflag.FlagSet) {
fs
.
Var
(
&
s
.
RuntimeConfig
,
"runtime-config"
,
""
+
"A set of key=value pairs that describe runtime configuration that may be passed "
+
"to apiserver. <group>/<version> (or <version> for the core group) key can be used to "
+
"turn on/off specific api versions. <group>/<version>/<resource> (or <version>/<resource> "
+
"for the core group) can be used to turn on/off specific resources. api/all and "
+
"api/legacy are special keys to control all and legacy api versions respectively."
)
"turn on/off specific api versions. api/all is special key to control all api versions, "
+
"be careful setting it false, unless you know what you do. api/legacy is deprecated, "
+
"we will remove it in the future, so stop using it."
)
}
// Validate validates RuntimeConfig with a list of registries.
// Usually this list only has one element, the apiserver registry of the process.
// But in the advanced (and usually not recommended) case of delegated apiservers there can be more.
// Validate will filter out the known groups of each registry.
// If anything is left over after that, an error is returned.
func
(
s
*
APIEnablementOptions
)
Validate
(
registries
...
GroupRegisty
)
[]
error
{
if
s
==
nil
{
return
nil
}
errors
:=
[]
error
{}
if
s
.
RuntimeConfig
[
"api/all"
]
==
"false"
&&
len
(
s
.
RuntimeConfig
)
==
1
{
// Do not allow only set api/all=false, in such case apiserver startup has no meaning.
return
append
(
errors
,
fmt
.
Errorf
(
"invliad key with only api/all=false"
))
}
groups
,
err
:=
resourceconfig
.
ParseGroups
(
s
.
RuntimeConfig
)
if
err
!=
nil
{
return
append
(
errors
,
err
)
}
for
_
,
registry
:=
range
registries
{
// filter out known groups
groups
=
unknownGroups
(
groups
,
registry
)
}
if
len
(
groups
)
!=
0
{
errors
=
append
(
errors
,
fmt
.
Errorf
(
"unknown api groups %s"
,
strings
.
Join
(
groups
,
","
)))
}
return
errors
}
// ApplyTo override MergedResourceConfig with defaults and registry
func
(
s
*
APIEnablementOptions
)
ApplyTo
(
c
*
server
.
Config
,
defaultResourceConfig
*
serverstore
.
ResourceConfig
,
registry
resourceconfig
.
GroupVersionRegistry
)
error
{
if
s
==
nil
{
return
nil
}
mergedResourceConfig
,
err
:=
resourceconfig
.
MergeAPIResourceConfigs
(
defaultResourceConfig
,
s
.
RuntimeConfig
,
registry
)
c
.
MergedResourceConfig
=
mergedResourceConfig
return
err
}
func
unknownGroups
(
groups
[]
string
,
registry
GroupRegisty
)
[]
string
{
unknownGroups
:=
[]
string
{}
for
_
,
group
:=
range
groups
{
if
!
registry
.
IsRegistered
(
group
)
{
unknownGroups
=
append
(
unknownGroups
,
group
)
}
}
return
unknownGroups
}
// GroupRegisty provides a method to check whether given group is registered.
type
GroupRegisty
interface
{
// IsRegistered returns true if given group is registered.
IsRegistered
(
group
string
)
bool
}
staging/src/k8s.io/apiserver/pkg/server/resourceconfig/BUILD
View file @
2b25ec79
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
go_library(
name = "go_default_library",
srcs = [
"doc.go",
"helpers.go",
],
importpath = "k8s.io/apiserver/pkg/server/resourceconfig",
visibility = ["//visibility:public"],
deps = [
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/storage:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library",
],
)
go_test(
name = "go_default_test",
srcs = ["helpers_test.go"],
embed = [":go_default_library"],
deps = [
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apimachinery:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apimachinery/registered:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/storage:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
...
...
staging/src/k8s.io/apiserver/pkg/server/resourceconfig/doc.go
0 → 100644
View file @
2b25ec79
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// Package resourceconfig contains the resource config related helper functions.
package
resourceconfig
// import "k8s.io/apiserver/pkg/server/resourceconfig"
staging/src/k8s.io/apiserver/pkg/server/resourceconfig/helpers.go
0 → 100644
View file @
2b25ec79
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
resourceconfig
import
(
"fmt"
"strconv"
"strings"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
serverstore
"k8s.io/apiserver/pkg/server/storage"
utilflag
"k8s.io/apiserver/pkg/util/flag"
)
// GroupVersionRegistry provides access to registered group versions.
type
GroupVersionRegistry
interface
{
// IsRegistered returns true if given group is registered.
IsRegistered
(
group
string
)
bool
// IsRegisteredVersion returns true if given version is registered.
IsRegisteredVersion
(
v
schema
.
GroupVersion
)
bool
// RegisteredGroupVersions returns all registered group versions.
RegisteredGroupVersions
()
[]
schema
.
GroupVersion
}
// MergeResourceEncodingConfigs merges the given defaultResourceConfig with specific GroupVersionResource overrides.
func
MergeResourceEncodingConfigs
(
defaultResourceEncoding
*
serverstore
.
DefaultResourceEncodingConfig
,
resourceEncodingOverrides
[]
schema
.
GroupVersionResource
,
)
*
serverstore
.
DefaultResourceEncodingConfig
{
resourceEncodingConfig
:=
defaultResourceEncoding
for
_
,
gvr
:=
range
resourceEncodingOverrides
{
resourceEncodingConfig
.
SetResourceEncoding
(
gvr
.
GroupResource
(),
gvr
.
GroupVersion
(),
schema
.
GroupVersion
{
Group
:
gvr
.
Group
,
Version
:
runtime
.
APIVersionInternal
})
}
return
resourceEncodingConfig
}
// MergeGroupEncodingConfigs merges the given defaultResourceConfig with specific GroupVersion overrides.
func
MergeGroupEncodingConfigs
(
defaultResourceEncoding
*
serverstore
.
DefaultResourceEncodingConfig
,
storageEncodingOverrides
map
[
string
]
schema
.
GroupVersion
,
)
*
serverstore
.
DefaultResourceEncodingConfig
{
resourceEncodingConfig
:=
defaultResourceEncoding
for
group
,
storageEncodingVersion
:=
range
storageEncodingOverrides
{
resourceEncodingConfig
.
SetVersionEncoding
(
group
,
storageEncodingVersion
,
schema
.
GroupVersion
{
Group
:
group
,
Version
:
runtime
.
APIVersionInternal
})
}
return
resourceEncodingConfig
}
// MergeAPIResourceConfigs merges the given defaultAPIResourceConfig with the given resourceConfigOverrides.
// Exclude the groups not registered in registry, and check if version is
// not registered in group, then it will fail.
func
MergeAPIResourceConfigs
(
defaultAPIResourceConfig
*
serverstore
.
ResourceConfig
,
resourceConfigOverrides
utilflag
.
ConfigurationMap
,
registry
GroupVersionRegistry
,
)
(
*
serverstore
.
ResourceConfig
,
error
)
{
resourceConfig
:=
defaultAPIResourceConfig
overrides
:=
resourceConfigOverrides
// "api/all=false" allows users to selectively enable specific api versions.
allAPIFlagValue
,
ok
:=
overrides
[
"api/all"
]
if
ok
{
if
allAPIFlagValue
==
"false"
{
// Disable all group versions.
resourceConfig
.
DisableVersions
(
registry
.
RegisteredGroupVersions
()
...
)
}
else
if
allAPIFlagValue
==
"true"
{
resourceConfig
.
EnableVersions
(
registry
.
RegisteredGroupVersions
()
...
)
}
}
// "<resourceSpecifier>={true|false} allows users to enable/disable API.
// This takes preference over api/all, if specified.
// Iterate through all group/version overrides specified in runtimeConfig.
for
key
:=
range
overrides
{
// Have already handled them above. Can skip them here.
if
key
==
"api/all"
{
continue
}
tokens
:=
strings
.
Split
(
key
,
"/"
)
if
len
(
tokens
)
!=
2
{
continue
}
groupVersionString
:=
tokens
[
0
]
+
"/"
+
tokens
[
1
]
groupVersion
,
err
:=
schema
.
ParseGroupVersion
(
groupVersionString
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"invalid key %s"
,
key
)
}
// Exclude group not registered into the registry.
if
!
registry
.
IsRegistered
(
groupVersion
.
Group
)
{
continue
}
// Verify that the groupVersion is registered into registry.
if
!
registry
.
IsRegisteredVersion
(
groupVersion
)
{
return
nil
,
fmt
.
Errorf
(
"group version %s that has not been registered"
,
groupVersion
.
String
())
}
enabled
,
err
:=
getRuntimeConfigValue
(
overrides
,
key
,
false
)
if
err
!=
nil
{
return
nil
,
err
}
if
enabled
{
resourceConfig
.
EnableVersions
(
groupVersion
)
}
else
{
resourceConfig
.
DisableVersions
(
groupVersion
)
}
}
return
resourceConfig
,
nil
}
func
getRuntimeConfigValue
(
overrides
utilflag
.
ConfigurationMap
,
apiKey
string
,
defaultValue
bool
)
(
bool
,
error
)
{
flagValue
,
ok
:=
overrides
[
apiKey
]
if
ok
{
if
flagValue
==
""
{
return
true
,
nil
}
boolValue
,
err
:=
strconv
.
ParseBool
(
flagValue
)
if
err
!=
nil
{
return
false
,
fmt
.
Errorf
(
"invalid value of %s: %s, err: %v"
,
apiKey
,
flagValue
,
err
)
}
return
boolValue
,
nil
}
return
defaultValue
,
nil
}
// ParseGroups takes in resourceConfig and returns parsed groups.
func
ParseGroups
(
resourceConfig
utilflag
.
ConfigurationMap
)
([]
string
,
error
)
{
groups
:=
[]
string
{}
for
key
:=
range
resourceConfig
{
if
key
==
"api/all"
{
continue
}
tokens
:=
strings
.
Split
(
key
,
"/"
)
if
len
(
tokens
)
!=
2
&&
len
(
tokens
)
!=
3
{
return
groups
,
fmt
.
Errorf
(
"runtime-config invalid key %s"
,
key
)
}
groupVersionString
:=
tokens
[
0
]
+
"/"
+
tokens
[
1
]
groupVersion
,
err
:=
schema
.
ParseGroupVersion
(
groupVersionString
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"runtime-config invalid key %s"
,
key
)
}
groups
=
append
(
groups
,
groupVersion
.
Group
)
}
return
groups
,
nil
}
pkg/kubeapiserver/default_storage_factory_builder
_test.go
→
staging/src/k8s.io/apiserver/pkg/server/resourceconfig/helpers
_test.go
View file @
2b25ec79
/*
Copyright 201
6
The Kubernetes Authors.
Copyright 201
7
The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
...
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package
kubeapiserver
package
resourceconfig
import
(
"reflect"
...
...
@@ -22,43 +22,42 @@ import (
apiv1
"k8s.io/api/core/v1"
extensionsapiv1beta1
"k8s.io/api/extensions/v1beta1"
"k8s.io/apimachinery/pkg/apimachinery"
"k8s.io/apimachinery/pkg/apimachinery/registered"
"k8s.io/apimachinery/pkg/runtime/schema"
serverstorage
"k8s.io/apiserver/pkg/server/storage"
"k8s.io/kubernetes/pkg/api/legacyscheme"
_
"k8s.io/kubernetes/pkg/apis/core/install"
_
"k8s.io/kubernetes/pkg/apis/extensions/install"
serverstore
"k8s.io/apiserver/pkg/server/storage"
)
func
TestParseRuntimeConfig
(
t
*
testing
.
T
)
{
extensionsGroupVersion
:=
extensionsapiv1beta1
.
SchemeGroupVersion
registry
:=
newFakeRegistry
()
apiv1GroupVersion
:=
apiv1
.
SchemeGroupVersion
testCases
:=
[]
struct
{
runtimeConfig
map
[
string
]
string
defaultResourceConfig
func
()
*
serverstor
ag
e
.
ResourceConfig
expectedAPIConfig
func
()
*
serverstor
ag
e
.
ResourceConfig
defaultResourceConfig
func
()
*
serverstore
.
ResourceConfig
expectedAPIConfig
func
()
*
serverstore
.
ResourceConfig
err
bool
}{
{
// everything default value.
runtimeConfig
:
map
[
string
]
string
{},
defaultResourceConfig
:
func
()
*
serverstor
ag
e
.
ResourceConfig
{
return
serverstorage
.
NewResourceConfig
()
defaultResourceConfig
:
func
()
*
serverstore
.
ResourceConfig
{
return
newFakeAPIResourceConfigSource
()
},
expectedAPIConfig
:
func
()
*
serverstor
ag
e
.
ResourceConfig
{
return
serverstorage
.
NewResourceConfig
()
expectedAPIConfig
:
func
()
*
serverstore
.
ResourceConfig
{
return
newFakeAPIResourceConfigSource
()
},
err
:
false
,
},
{
// no runtimeConfig override.
runtimeConfig
:
map
[
string
]
string
{},
defaultResourceConfig
:
func
()
*
serverstor
ag
e
.
ResourceConfig
{
config
:=
serverstorage
.
NewResourceConfig
()
defaultResourceConfig
:
func
()
*
serverstore
.
ResourceConfig
{
config
:=
newFakeAPIResourceConfigSource
()
config
.
DisableVersions
(
extensionsapiv1beta1
.
SchemeGroupVersion
)
return
config
},
expectedAPIConfig
:
func
()
*
serverstor
ag
e
.
ResourceConfig
{
config
:=
serverstorage
.
NewResourceConfig
()
expectedAPIConfig
:
func
()
*
serverstore
.
ResourceConfig
{
config
:=
newFakeAPIResourceConfigSource
()
config
.
DisableVersions
(
extensionsapiv1beta1
.
SchemeGroupVersion
)
return
config
},
...
...
@@ -69,32 +68,12 @@ func TestParseRuntimeConfig(t *testing.T) {
runtimeConfig
:
map
[
string
]
string
{
"extensions/v1beta1"
:
""
,
},
defaultResourceConfig
:
func
()
*
serverstorage
.
ResourceConfig
{
config
:=
serverstorage
.
NewResourceConfig
()
config
.
DisableVersions
(
extensionsapiv1beta1
.
SchemeGroupVersion
)
return
config
},
expectedAPIConfig
:
func
()
*
serverstorage
.
ResourceConfig
{
config
:=
serverstorage
.
NewResourceConfig
()
config
.
EnableVersions
(
extensionsapiv1beta1
.
SchemeGroupVersion
)
return
config
},
err
:
false
,
},
{
// disable resource
runtimeConfig
:
map
[
string
]
string
{
"api/v1/pods"
:
"false"
,
},
defaultResourceConfig
:
func
()
*
serverstorage
.
ResourceConfig
{
config
:=
serverstorage
.
NewResourceConfig
()
config
.
EnableVersions
(
apiv1GroupVersion
)
defaultResourceConfig
:
func
()
*
serverstore
.
ResourceConfig
{
config
:=
newFakeAPIResourceConfigSource
()
return
config
},
expectedAPIConfig
:
func
()
*
serverstorage
.
ResourceConfig
{
config
:=
serverstorage
.
NewResourceConfig
()
config
.
EnableVersions
(
apiv1GroupVersion
)
config
.
DisableResources
(
apiv1GroupVersion
.
WithResource
(
"pods"
))
expectedAPIConfig
:
func
()
*
serverstore
.
ResourceConfig
{
config
:=
newFakeAPIResourceConfigSource
()
return
config
},
err
:
false
,
...
...
@@ -102,102 +81,67 @@ func TestParseRuntimeConfig(t *testing.T) {
{
// Disable v1.
runtimeConfig
:
map
[
string
]
string
{
"
api
/v1"
:
"false"
,
"/v1"
:
"false"
,
},
defaultResourceConfig
:
func
()
*
serverstor
ag
e
.
ResourceConfig
{
return
serverstorage
.
NewResourceConfig
()
defaultResourceConfig
:
func
()
*
serverstore
.
ResourceConfig
{
return
newFakeAPIResourceConfigSource
()
},
expectedAPIConfig
:
func
()
*
serverstor
ag
e
.
ResourceConfig
{
config
:=
serverstorage
.
NewResourceConfig
()
expectedAPIConfig
:
func
()
*
serverstore
.
ResourceConfig
{
config
:=
newFakeAPIResourceConfigSource
()
config
.
DisableVersions
(
apiv1GroupVersion
)
return
config
},
err
:
false
,
},
{
// Enable deployments and disable daemonsets.
runtimeConfig
:
map
[
string
]
string
{
"extensions/v1beta1/anything"
:
"true"
,
"extensions/v1beta1/daemonsets"
:
"false"
,
},
defaultResourceConfig
:
func
()
*
serverstorage
.
ResourceConfig
{
config
:=
serverstorage
.
NewResourceConfig
()
config
.
EnableVersions
(
extensionsGroupVersion
)
return
config
},
expectedAPIConfig
:
func
()
*
serverstorage
.
ResourceConfig
{
config
:=
serverstorage
.
NewResourceConfig
()
config
.
EnableVersions
(
extensionsGroupVersion
)
config
.
DisableResources
(
extensionsGroupVersion
.
WithResource
(
"daemonsets"
))
config
.
EnableResources
(
extensionsGroupVersion
.
WithResource
(
"anything"
))
return
config
},
err
:
false
,
},
{
// invalid runtime config
runtimeConfig
:
map
[
string
]
string
{
"invalidgroup/version"
:
"false"
,
},
defaultResourceConfig
:
func
()
*
serverstorage
.
ResourceConfig
{
return
serverstorage
.
NewResourceConfig
()
},
expectedAPIConfig
:
func
()
*
serverstorage
.
ResourceConfig
{
return
serverstorage
.
NewResourceConfig
()
defaultResourceConfig
:
func
()
*
serverstore
.
ResourceConfig
{
return
newFakeAPIResourceConfigSource
()
},
err
:
true
,
},
{
// cannot disable individual resource when version is not enabled.
runtimeConfig
:
map
[
string
]
string
{
"api/v1/pods"
:
"false"
,
},
defaultResourceConfig
:
func
()
*
serverstorage
.
ResourceConfig
{
return
serverstorage
.
NewResourceConfig
()
},
expectedAPIConfig
:
func
()
*
serverstorage
.
ResourceConfig
{
config
:=
serverstorage
.
NewResourceConfig
()
config
.
DisableResources
(
schema
.
GroupVersionResource
{
Group
:
""
,
Version
:
"v1"
,
Resource
:
"pods"
})
return
config
expectedAPIConfig
:
func
()
*
serverstore
.
ResourceConfig
{
return
newFakeAPIResourceConfigSource
()
},
err
:
tru
e
,
err
:
fals
e
,
},
{
// enable all
runtimeConfig
:
map
[
string
]
string
{
"api/all"
:
"true"
,
},
defaultResourceConfig
:
func
()
*
serverstor
ag
e
.
ResourceConfig
{
return
serverstorage
.
NewResourceConfig
()
defaultResourceConfig
:
func
()
*
serverstore
.
ResourceConfig
{
return
newFakeAPIResourceConfigSource
()
},
expectedAPIConfig
:
func
()
*
serverstor
ag
e
.
ResourceConfig
{
config
:=
serverstorage
.
NewResourceConfig
()
config
.
EnableVersions
(
legacyscheme
.
R
egistry
.
RegisteredGroupVersions
()
...
)
expectedAPIConfig
:
func
()
*
serverstore
.
ResourceConfig
{
config
:=
newFakeAPIResourceConfigSource
()
config
.
EnableVersions
(
r
egistry
.
RegisteredGroupVersions
()
...
)
return
config
},
err
:
false
,
},
{
//
disable all
//
only enable v1
runtimeConfig
:
map
[
string
]
string
{
"api/all"
:
"false"
,
"/v1"
:
"true"
,
},
defaultResourceConfig
:
func
()
*
serverstor
ag
e
.
ResourceConfig
{
return
serverstorage
.
NewResourceConfig
()
defaultResourceConfig
:
func
()
*
serverstore
.
ResourceConfig
{
return
newFakeAPIResourceConfigSource
()
},
expectedAPIConfig
:
func
()
*
serverstor
ag
e
.
ResourceConfig
{
config
:=
serverstorage
.
NewResourceConfig
()
config
.
DisableVersions
(
legacyscheme
.
Registry
.
RegisteredGroupVersions
()
...
)
expectedAPIConfig
:
func
()
*
serverstore
.
ResourceConfig
{
config
:=
newFakeAPIResourceConfigSource
()
config
.
DisableVersions
(
extensionsapiv1beta1
.
SchemeGroupVersion
)
return
config
},
err
:
false
,
},
}
for
_
,
test
:=
range
testCases
{
actualDisablers
,
err
:=
mergeAPIResourceConfigs
(
test
.
defaultResourceConfig
(),
test
.
runtimeConfig
)
for
index
,
test
:=
range
testCases
{
actualDisablers
,
err
:=
MergeAPIResourceConfigs
(
test
.
defaultResourceConfig
(),
test
.
runtimeConfig
,
registry
)
if
err
==
nil
&&
test
.
err
{
t
.
Fatalf
(
"expected error for test
: %v"
,
test
)
t
.
Fatalf
(
"expected error for test
case: %v"
,
index
)
}
else
if
err
!=
nil
&&
!
test
.
err
{
t
.
Fatalf
(
"unexpected error: %s, for test: %v"
,
err
,
test
)
}
...
...
@@ -208,3 +152,27 @@ func TestParseRuntimeConfig(t *testing.T) {
}
}
}
func
newFakeAPIResourceConfigSource
()
*
serverstore
.
ResourceConfig
{
ret
:=
serverstore
.
NewResourceConfig
()
// NOTE: GroupVersions listed here will be enabled by default. Don't put alpha versions in the list.
ret
.
EnableVersions
(
apiv1
.
SchemeGroupVersion
,
extensionsapiv1beta1
.
SchemeGroupVersion
,
)
return
ret
}
func
newFakeRegistry
()
*
registered
.
APIRegistrationManager
{
registry
:=
registered
.
NewOrDie
(
""
)
registry
.
RegisterGroup
(
apimachinery
.
GroupMeta
{
GroupVersion
:
apiv1
.
SchemeGroupVersion
,
})
registry
.
RegisterGroup
(
apimachinery
.
GroupMeta
{
GroupVersion
:
extensionsapiv1beta1
.
SchemeGroupVersion
,
})
registry
.
RegisterVersions
([]
schema
.
GroupVersion
{
apiv1
.
SchemeGroupVersion
,
extensionsapiv1beta1
.
SchemeGroupVersion
})
return
registry
}
staging/src/k8s.io/apiserver/pkg/server/storage/resource_config.go
View file @
2b25ec79
...
...
@@ -18,147 +18,50 @@ package storage
import
(
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/sets"
)
// APIResourceConfigSource is the interface to determine which
versions and resource
s are enabled
// APIResourceConfigSource is the interface to determine which
groups and version
s are enabled
type
APIResourceConfigSource
interface
{
AnyVersionOfResourceEnabled
(
resource
schema
.
GroupResource
)
bool
ResourceEnabled
(
resource
schema
.
GroupVersionResource
)
bool
AnyResourcesForVersionEnabled
(
version
schema
.
GroupVersion
)
bool
AnyResourcesForGroupEnabled
(
group
string
)
bool
}
// Specifies the overrides for various API group versions.
// This can be used to enable/disable entire group versions or specific resources.
type
GroupVersionResourceConfig
struct
{
// Whether to enable or disable this entire group version. This dominates any enablement check.
// Enable=true means the group version is enabled, and EnabledResources/DisabledResources are considered.
// Enable=false means the group version is disabled, and EnabledResources/DisabledResources are not considered.
Enable
bool
// DisabledResources lists the resources that are specifically disabled for a group/version
// DisabledResources trumps EnabledResources
DisabledResources
sets
.
String
// EnabledResources lists the resources that should be enabled by default. This is a little
// unusual, but we need it for compatibility with old code for now. An empty set means
// enable all, a non-empty set means that all other resources are disabled.
EnabledResources
sets
.
String
VersionEnabled
(
version
schema
.
GroupVersion
)
bool
AnyVersionForGroupEnabled
(
group
string
)
bool
}
var
_
APIResourceConfigSource
=
&
ResourceConfig
{}
type
ResourceConfig
struct
{
GroupVersion
ResourceConfigs
map
[
schema
.
GroupVersion
]
*
GroupVersionResourceConfig
GroupVersion
Configs
map
[
schema
.
GroupVersion
]
bool
}
func
NewResourceConfig
()
*
ResourceConfig
{
return
&
ResourceConfig
{
GroupVersion
ResourceConfigs
:
map
[
schema
.
GroupVersion
]
*
GroupVersionResourceConfig
{}}
return
&
ResourceConfig
{
GroupVersion
Configs
:
map
[
schema
.
GroupVersion
]
bool
{}}
}
func
NewGroupVersionResourceConfig
()
*
GroupVersionResourceConfig
{
return
&
GroupVersionResourceConfig
{
Enable
:
true
,
DisabledResources
:
sets
.
String
{},
EnabledResources
:
sets
.
String
{}}
}
// DisableVersions disables the versions entirely. No resources (even those whitelisted in EnabledResources) will be enabled
// DisableVersions disables the versions entirely.
func
(
o
*
ResourceConfig
)
DisableVersions
(
versions
...
schema
.
GroupVersion
)
{
for
_
,
version
:=
range
versions
{
_
,
versionExists
:=
o
.
GroupVersionResourceConfigs
[
version
]
if
!
versionExists
{
o
.
GroupVersionResourceConfigs
[
version
]
=
NewGroupVersionResourceConfig
()
}
o
.
GroupVersionResourceConfigs
[
version
]
.
Enable
=
false
o
.
GroupVersionConfigs
[
version
]
=
false
}
}
func
(
o
*
ResourceConfig
)
EnableVersions
(
versions
...
schema
.
GroupVersion
)
{
for
_
,
version
:=
range
versions
{
_
,
versionExists
:=
o
.
GroupVersionResourceConfigs
[
version
]
if
!
versionExists
{
o
.
GroupVersionResourceConfigs
[
version
]
=
NewGroupVersionResourceConfig
()
}
o
.
GroupVersionResourceConfigs
[
version
]
.
Enable
=
true
}
}
func
(
o
*
ResourceConfig
)
DisableResources
(
resources
...
schema
.
GroupVersionResource
)
{
for
_
,
resource
:=
range
resources
{
version
:=
resource
.
GroupVersion
()
_
,
versionExists
:=
o
.
GroupVersionResourceConfigs
[
version
]
if
!
versionExists
{
o
.
GroupVersionResourceConfigs
[
version
]
=
NewGroupVersionResourceConfig
()
}
o
.
GroupVersionResourceConfigs
[
version
]
.
DisabledResources
.
Insert
(
resource
.
Resource
)
}
}
func
(
o
*
ResourceConfig
)
EnableResources
(
resources
...
schema
.
GroupVersionResource
)
{
for
_
,
resource
:=
range
resources
{
version
:=
resource
.
GroupVersion
()
_
,
versionExists
:=
o
.
GroupVersionResourceConfigs
[
version
]
if
!
versionExists
{
o
.
GroupVersionResourceConfigs
[
version
]
=
NewGroupVersionResourceConfig
()
}
o
.
GroupVersionResourceConfigs
[
version
]
.
EnabledResources
.
Insert
(
resource
.
Resource
)
o
.
GroupVersionResourceConfigs
[
version
]
.
DisabledResources
.
Delete
(
resource
.
Resource
)
o
.
GroupVersionConfigs
[
version
]
=
true
}
}
// AnyResourcesForVersionEnabled only considers matches based on exactly group/resource lexical matching. This means that
// resource renames across versions are NOT considered to be the same resource by this method. You'll need to manually check
// using the ResourceEnabled function.
func
(
o
*
ResourceConfig
)
AnyVersionOfResourceEnabled
(
resource
schema
.
GroupResource
)
bool
{
for
version
:=
range
o
.
GroupVersionResourceConfigs
{
if
version
.
Group
!=
resource
.
Group
{
continue
}
if
o
.
ResourceEnabled
(
version
.
WithResource
(
resource
.
Resource
))
{
return
true
}
func
(
o
*
ResourceConfig
)
VersionEnabled
(
version
schema
.
GroupVersion
)
bool
{
enabled
,
_
:=
o
.
GroupVersionConfigs
[
version
]
if
enabled
{
return
true
}
return
false
}
func
(
o
*
ResourceConfig
)
ResourceEnabled
(
resource
schema
.
GroupVersionResource
)
bool
{
versionOverride
,
versionExists
:=
o
.
GroupVersionResourceConfigs
[
resource
.
GroupVersion
()]
if
!
versionExists
{
return
false
}
if
!
versionOverride
.
Enable
{
return
false
}
if
versionOverride
.
DisabledResources
.
Has
(
resource
.
Resource
)
{
return
false
}
if
len
(
versionOverride
.
EnabledResources
)
>
0
{
return
versionOverride
.
EnabledResources
.
Has
(
resource
.
Resource
)
}
return
true
}
func
(
o
*
ResourceConfig
)
AnyResourcesForVersionEnabled
(
version
schema
.
GroupVersion
)
bool
{
versionOverride
,
versionExists
:=
o
.
GroupVersionResourceConfigs
[
version
]
if
!
versionExists
{
return
false
}
return
versionOverride
.
Enable
}
func
(
o
*
ResourceConfig
)
AnyResourcesForGroupEnabled
(
group
string
)
bool
{
for
version
:=
range
o
.
GroupVersionResourceConfigs
{
func
(
o
*
ResourceConfig
)
AnyVersionForGroupEnabled
(
group
string
)
bool
{
for
version
:=
range
o
.
GroupVersionConfigs
{
if
version
.
Group
==
group
{
if
o
.
AnyResourcesFor
VersionEnabled
(
version
)
{
if
o
.
VersionEnabled
(
version
)
{
return
true
}
}
...
...
staging/src/k8s.io/apiserver/pkg/server/storage/resource_config_test.go
View file @
2b25ec79
...
...
@@ -26,70 +26,24 @@ func TestDisabledVersion(t *testing.T) {
g1v1
:=
schema
.
GroupVersion
{
Group
:
"group1"
,
Version
:
"version1"
}
g1v2
:=
schema
.
GroupVersion
{
Group
:
"group1"
,
Version
:
"version2"
}
g2v1
:=
schema
.
GroupVersion
{
Group
:
"group2"
,
Version
:
"version1"
}
g3v1
:=
schema
.
GroupVersion
{
Group
:
"group3"
,
Version
:
"version1"
}
resourceType
:=
"the-resource"
disabledResourceType
:=
"the-disabled-resource"
config
:=
NewResourceConfig
()
config
.
DisableVersions
(
g1v1
)
config
.
EnableVersions
(
g1v2
,
g3v1
)
config
.
EnableResources
(
g1v1
.
WithResource
(
resourceType
),
g2v1
.
WithResource
(
resourceType
))
config
.
DisableResources
(
g1v2
.
WithResource
(
disabledResourceType
))
expectedEnabledResources
:=
[]
schema
.
GroupVersionResource
{
g1v2
.
WithResource
(
resourceType
),
g2v1
.
WithResource
(
resourceType
),
}
expectedDisabledResources
:=
[]
schema
.
GroupVersionResource
{
g1v1
.
WithResource
(
resourceType
),
g1v1
.
WithResource
(
disabledResourceType
),
g1v2
.
WithResource
(
disabledResourceType
),
g2v1
.
WithResource
(
disabledResourceType
),
}
for
_
,
expectedResource
:=
range
expectedEnabledResources
{
if
!
config
.
ResourceEnabled
(
expectedResource
)
{
t
.
Errorf
(
"expected enabled for %v, from %v"
,
expectedResource
,
config
)
}
}
for
_
,
expectedResource
:=
range
expectedDisabledResources
{
if
config
.
ResourceEnabled
(
expectedResource
)
{
t
.
Errorf
(
"expected disabled for %v, from %v"
,
expectedResource
,
config
)
}
}
config
.
EnableVersions
(
g1v2
,
g2v1
)
if
config
.
AnyResourcesFor
VersionEnabled
(
g1v1
)
{
if
config
.
VersionEnabled
(
g1v1
)
{
t
.
Errorf
(
"expected disabled for %v, from %v"
,
g1v1
,
config
)
}
if
!
config
.
AnyResourcesFor
VersionEnabled
(
g1v2
)
{
if
!
config
.
VersionEnabled
(
g1v2
)
{
t
.
Errorf
(
"expected enabled for %v, from %v"
,
g1v1
,
config
)
}
if
!
config
.
AnyResourcesFor
VersionEnabled
(
g2v1
)
{
if
!
config
.
VersionEnabled
(
g2v1
)
{
t
.
Errorf
(
"expected enabled for %v, from %v"
,
g1v1
,
config
)
}
expectedEnabledAnyVersionResources
:=
[]
schema
.
GroupResource
{
{
Group
:
"group1"
,
Resource
:
resourceType
},
}
expectedDisabledAnyResources
:=
[]
schema
.
GroupResource
{
{
Group
:
"group1"
,
Resource
:
disabledResourceType
},
}
for
_
,
expectedResource
:=
range
expectedEnabledAnyVersionResources
{
if
!
config
.
AnyVersionOfResourceEnabled
(
expectedResource
)
{
t
.
Errorf
(
"expected enabled for %v, from %v"
,
expectedResource
,
config
)
}
}
for
_
,
expectedResource
:=
range
expectedDisabledAnyResources
{
if
config
.
AnyVersionOfResourceEnabled
(
expectedResource
)
{
t
.
Errorf
(
"expected disabled for %v, from %v"
,
expectedResource
,
config
)
}
}
}
func
TestAny
Resources
ForGroupEnabled
(
t
*
testing
.
T
)
{
func
TestAny
Version
ForGroupEnabled
(
t
*
testing
.
T
)
{
tests
:=
[]
struct
{
name
string
creator
func
()
APIResourceConfigSource
...
...
@@ -129,22 +83,10 @@ func TestAnyResourcesForGroupEnabled(t *testing.T) {
expectedResult
:
true
,
},
{
name
:
"present, and one resource"
,
creator
:
func
()
APIResourceConfigSource
{
ret
:=
NewResourceConfig
()
ret
.
DisableVersions
(
schema
.
GroupVersion
{
Group
:
"one"
,
Version
:
"version1"
})
ret
.
EnableResources
(
schema
.
GroupVersionResource
{
Group
:
"one"
,
Version
:
"version2"
,
Resource
:
"foo"
})
return
ret
},
testGroup
:
"one"
,
expectedResult
:
true
,
},
}
for
_
,
tc
:=
range
tests
{
if
e
,
a
:=
tc
.
expectedResult
,
tc
.
creator
()
.
Any
Resources
ForGroupEnabled
(
tc
.
testGroup
);
e
!=
a
{
if
e
,
a
:=
tc
.
expectedResult
,
tc
.
creator
()
.
Any
Version
ForGroupEnabled
(
tc
.
testGroup
);
e
!=
a
{
t
.
Errorf
(
"%s: expected %v, got %v"
,
tc
.
name
,
e
,
a
)
}
}
...
...
staging/src/k8s.io/apiserver/pkg/server/storage/storage_factory.go
View file @
2b25ec79
...
...
@@ -151,7 +151,14 @@ var _ StorageFactory = &DefaultStorageFactory{}
const
AllResources
=
"*"
func
NewDefaultStorageFactory
(
config
storagebackend
.
Config
,
defaultMediaType
string
,
defaultSerializer
runtime
.
StorageSerializer
,
resourceEncodingConfig
ResourceEncodingConfig
,
resourceConfig
APIResourceConfigSource
,
specialDefaultResourcePrefixes
map
[
schema
.
GroupResource
]
string
)
*
DefaultStorageFactory
{
func
NewDefaultStorageFactory
(
config
storagebackend
.
Config
,
defaultMediaType
string
,
defaultSerializer
runtime
.
StorageSerializer
,
resourceEncodingConfig
ResourceEncodingConfig
,
resourceConfig
APIResourceConfigSource
,
specialDefaultResourcePrefixes
map
[
schema
.
GroupResource
]
string
,
)
*
DefaultStorageFactory
{
config
.
Paging
=
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
APIListChunking
)
if
len
(
defaultMediaType
)
==
0
{
defaultMediaType
=
runtime
.
ContentTypeJSON
...
...
@@ -233,7 +240,7 @@ func getAllResourcesAlias(resource schema.GroupResource) schema.GroupResource {
func
(
s
*
DefaultStorageFactory
)
getStorageGroupResource
(
groupResource
schema
.
GroupResource
)
schema
.
GroupResource
{
for
_
,
potentialStorageResource
:=
range
s
.
Overrides
[
groupResource
]
.
cohabitatingResources
{
if
s
.
APIResourceConfigSource
.
AnyVersion
OfResourceEnabled
(
potentialStorageResource
)
{
if
s
.
APIResourceConfigSource
.
AnyVersion
ForGroupEnabled
(
potentialStorageResource
.
Group
)
{
return
potentialStorageResource
}
}
...
...
staging/src/k8s.io/kube-aggregator/Godeps/Godeps.json
View file @
2b25ec79
...
...
@@ -1051,6 +1051,10 @@
"Rev"
:
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{
"ImportPath"
:
"k8s.io/apiserver/pkg/server/resourceconfig"
,
"Rev"
:
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{
"ImportPath"
:
"k8s.io/apiserver/pkg/server/routes"
,
"Rev"
:
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
...
...
staging/src/k8s.io/kube-aggregator/pkg/apiserver/BUILD
View file @
2b25ec79
...
...
@@ -42,8 +42,6 @@ go_library(
deps = [
"//vendor/github.com/golang/glog:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apimachinery/announced:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apimachinery/registered:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
...
...
@@ -59,8 +57,8 @@ go_library(
"//vendor/k8s.io/apiserver/pkg/endpoints/handlers/responsewriters:go_default_library",
"//vendor/k8s.io/apiserver/pkg/endpoints/request:go_default_library",
"//vendor/k8s.io/apiserver/pkg/features:go_default_library",
"//vendor/k8s.io/apiserver/pkg/registry/rest:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server:go_default_library",
"//vendor/k8s.io/apiserver/pkg/server/storage:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//vendor/k8s.io/apiserver/pkg/util/proxy:go_default_library",
"//vendor/k8s.io/client-go/listers/core/v1:go_default_library",
...
...
@@ -70,7 +68,6 @@ go_library(
"//vendor/k8s.io/client-go/transport:go_default_library",
"//vendor/k8s.io/client-go/util/workqueue:go_default_library",
"//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration:go_default_library",
"//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/install:go_default_library",
"//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1:go_default_library",
"//vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1:go_default_library",
"//vendor/k8s.io/kube-aggregator/pkg/apiserver/scheme:go_default_library",
...
...
@@ -81,7 +78,7 @@ go_library(
"//vendor/k8s.io/kube-aggregator/pkg/controllers:go_default_library",
"//vendor/k8s.io/kube-aggregator/pkg/controllers/openapi:go_default_library",
"//vendor/k8s.io/kube-aggregator/pkg/controllers/status:go_default_library",
"//vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/
etcd
:go_default_library",
"//vendor/k8s.io/kube-aggregator/pkg/registry/apiservice/
rest
:go_default_library",
],
)
...
...
staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go
View file @
2b25ec79
...
...
@@ -20,19 +20,15 @@ import (
"net/http"
"time"
"k8s.io/apimachinery/pkg/apimachinery/announced"
"k8s.io/apimachinery/pkg/apimachinery/registered"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apimachinery/pkg/util/sets"
genericapirequest
"k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/registry/rest"
genericapiserver
"k8s.io/apiserver/pkg/server"
serverstorage
"k8s.io/apiserver/pkg/server/storage"
"k8s.io/client-go/pkg/version"
"k8s.io/kube-aggregator/pkg/apis/apiregistration"
"k8s.io/kube-aggregator/pkg/apis/apiregistration/install"
"k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
"k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1"
aggregatorscheme
"k8s.io/kube-aggregator/pkg/apiserver/scheme"
...
...
@@ -41,22 +37,12 @@ import (
listers
"k8s.io/kube-aggregator/pkg/client/listers/apiregistration/internalversion"
openapicontroller
"k8s.io/kube-aggregator/pkg/controllers/openapi"
statuscontrollers
"k8s.io/kube-aggregator/pkg/controllers/status"
apiservicestorage
"k8s.io/kube-aggregator/pkg/registry/apiservice/etcd"
)
var
(
groupFactoryRegistry
=
make
(
announced
.
APIGroupFactoryRegistry
)
registry
=
registered
.
NewOrDie
(
""
)
Scheme
=
runtime
.
NewScheme
()
Codecs
=
serializer
.
NewCodecFactory
(
Scheme
)
apiservicerest
"k8s.io/kube-aggregator/pkg/registry/apiservice/rest"
)
func
init
()
{
install
.
Install
(
groupFactoryRegistry
,
registry
,
Scheme
)
// we need to add the options (like ListOptions) to empty v1
metav1
.
AddToGroupVersion
(
aggregatorscheme
.
Scheme
,
schema
.
GroupVersion
{
Group
:
""
,
Version
:
"v1"
})
metav1
.
AddToGroupVersion
(
Scheme
,
schema
.
GroupVersion
{
Group
:
""
,
Version
:
"v1"
})
unversioned
:=
schema
.
GroupVersion
{
Group
:
""
,
Version
:
"v1"
}
aggregatorscheme
.
Scheme
.
AddUnversionedTypes
(
unversioned
,
...
...
@@ -66,13 +52,6 @@ func init() {
&
metav1
.
APIGroup
{},
&
metav1
.
APIResourceList
{},
)
Scheme
.
AddUnversionedTypes
(
unversioned
,
&
metav1
.
Status
{},
&
metav1
.
APIVersions
{},
&
metav1
.
APIGroupList
{},
&
metav1
.
APIGroup
{},
&
metav1
.
APIResourceList
{},
)
}
// legacyAPIServiceName is the fixed name of the only non-groupified API version
...
...
@@ -190,21 +169,7 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
serviceResolver
:
c
.
ExtraConfig
.
ServiceResolver
,
}
apiGroupInfo
:=
genericapiserver
.
NewDefaultAPIGroupInfo
(
apiregistration
.
GroupName
,
registry
,
Scheme
,
metav1
.
ParameterCodec
,
Codecs
)
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
v1beta1
.
SchemeGroupVersion
v1beta1storage
:=
map
[
string
]
rest
.
Storage
{}
apiServiceREST
:=
apiservicestorage
.
NewREST
(
Scheme
,
c
.
GenericConfig
.
RESTOptionsGetter
)
v1beta1storage
[
"apiservices"
]
=
apiServiceREST
v1beta1storage
[
"apiservices/status"
]
=
apiservicestorage
.
NewStatusREST
(
Scheme
,
apiServiceREST
)
apiGroupInfo
.
VersionedResourcesStorageMap
[
"v1beta1"
]
=
v1beta1storage
apiGroupInfo
.
GroupMeta
.
GroupVersion
=
v1
.
SchemeGroupVersion
storage
:=
map
[
string
]
rest
.
Storage
{}
v1apiServiceREST
:=
apiservicestorage
.
NewREST
(
Scheme
,
c
.
GenericConfig
.
RESTOptionsGetter
)
storage
[
"apiservices"
]
=
v1apiServiceREST
storage
[
"apiservices/status"
]
=
apiservicestorage
.
NewStatusREST
(
Scheme
,
v1apiServiceREST
)
apiGroupInfo
.
VersionedResourcesStorageMap
[
"v1"
]
=
storage
apiGroupInfo
:=
apiservicerest
.
NewRESTStorage
(
c
.
GenericConfig
.
MergedResourceConfig
,
c
.
GenericConfig
.
RESTOptionsGetter
)
if
err
:=
s
.
GenericAPIServer
.
InstallAPIGroup
(
&
apiGroupInfo
);
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -346,3 +311,14 @@ func (s *APIAggregator) RemoveAPIService(apiServiceName string) {
// TODO unregister group level discovery when there are no more versions for the group
// We don't need this right away because the handler properly delegates when no versions are present
}
func
DefaultAPIResourceConfigSource
()
*
serverstorage
.
ResourceConfig
{
ret
:=
serverstorage
.
NewResourceConfig
()
// NOTE: GroupVersions listed here will be enabled by default. Don't put alpha versions in the list.
ret
.
EnableVersions
(
v1
.
SchemeGroupVersion
,
v1beta1
.
SchemeGroupVersion
,
)
return
ret
}
staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go
View file @
2b25ec79
...
...
@@ -38,6 +38,7 @@ const defaultEtcdPathPrefix = "/registry/kube-aggregator.kubernetes.io/"
type
AggregatorOptions
struct
{
RecommendedOptions
*
genericoptions
.
RecommendedOptions
APIEnablement
*
genericoptions
.
APIEnablementOptions
// ProxyClientCert/Key are the client cert used to identify this proxy. Backing APIServices use
// this to confirm the proxy's identity
...
...
@@ -76,6 +77,7 @@ func NewCommandStartAggregator(defaults *AggregatorOptions, stopCh <-chan struct
// AddFlags is necessary because hyperkube doesn't work using cobra, so we have to have different registration and execution paths
func
(
o
*
AggregatorOptions
)
AddFlags
(
fs
*
pflag
.
FlagSet
)
{
o
.
RecommendedOptions
.
AddFlags
(
fs
)
o
.
APIEnablement
.
AddFlags
(
fs
)
fs
.
StringVar
(
&
o
.
ProxyClientCertFile
,
"proxy-client-cert-file"
,
o
.
ProxyClientCertFile
,
"client certificate used identify the proxy to the API server"
)
fs
.
StringVar
(
&
o
.
ProxyClientKeyFile
,
"proxy-client-key-file"
,
o
.
ProxyClientKeyFile
,
"client certificate key used identify the proxy to the API server"
)
}
...
...
@@ -83,7 +85,8 @@ func (o *AggregatorOptions) AddFlags(fs *pflag.FlagSet) {
// NewDefaultOptions builds a "normal" set of options. You wouldn't normally expose this, but hyperkube isn't cobra compatible
func
NewDefaultOptions
(
out
,
err
io
.
Writer
)
*
AggregatorOptions
{
o
:=
&
AggregatorOptions
{
RecommendedOptions
:
genericoptions
.
NewRecommendedOptions
(
defaultEtcdPathPrefix
,
apiserver
.
Codecs
.
LegacyCodec
(
v1beta1
.
SchemeGroupVersion
)),
RecommendedOptions
:
genericoptions
.
NewRecommendedOptions
(
defaultEtcdPathPrefix
,
aggregatorscheme
.
Codecs
.
LegacyCodec
(
v1beta1
.
SchemeGroupVersion
)),
APIEnablement
:
genericoptions
.
NewAPIEnablementOptions
(),
StdOut
:
out
,
StdErr
:
err
,
...
...
@@ -95,6 +98,7 @@ func NewDefaultOptions(out, err io.Writer) *AggregatorOptions {
func
(
o
AggregatorOptions
)
Validate
(
args
[]
string
)
error
{
errors
:=
[]
error
{}
errors
=
append
(
errors
,
o
.
RecommendedOptions
.
Validate
()
...
)
errors
=
append
(
errors
,
o
.
APIEnablement
.
Validate
(
aggregatorscheme
.
Registry
)
...
)
return
utilerrors
.
NewAggregate
(
errors
)
}
...
...
@@ -113,6 +117,9 @@ func (o AggregatorOptions) RunAggregator(stopCh <-chan struct{}) error {
if
err
:=
o
.
RecommendedOptions
.
ApplyTo
(
serverConfig
,
aggregatorscheme
.
Scheme
);
err
!=
nil
{
return
err
}
if
err
:=
o
.
APIEnablement
.
ApplyTo
(
&
serverConfig
.
Config
,
apiserver
.
DefaultAPIResourceConfigSource
(),
aggregatorscheme
.
Registry
);
err
!=
nil
{
return
err
}
serverConfig
.
LongRunningFunc
=
filters
.
BasicLongRunningRequestCheck
(
sets
.
NewString
(
"watch"
,
"proxy"
),
sets
.
NewString
(
"attach"
,
"exec"
,
"proxy"
,
"log"
,
"portforward"
),
...
...
staging/src/k8s.io/sample-apiserver/Godeps/Godeps.json
View file @
2b25ec79
...
...
@@ -1023,6 +1023,10 @@
"Rev"
:
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{
"ImportPath"
:
"k8s.io/apiserver/pkg/server/resourceconfig"
,
"Rev"
:
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{
"ImportPath"
:
"k8s.io/apiserver/pkg/server/routes"
,
"Rev"
:
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
...
...
test/integration/etcd/etcd_storage_path_test.go
View file @
2b25ec79
...
...
@@ -1123,8 +1123,5 @@ func diffMapKeys(a, b interface{}, stringer func(interface{}) string) []string {
type
allResourceSource
struct
{}
func
(
*
allResourceSource
)
AnyVersionOfResourceEnabled
(
resource
schema
.
GroupResource
)
bool
{
return
true
}
func
(
*
allResourceSource
)
AllResourcesForVersionEnabled
(
version
schema
.
GroupVersion
)
bool
{
return
true
}
func
(
*
allResourceSource
)
AnyResourcesForGroupEnabled
(
group
string
)
bool
{
return
true
}
func
(
*
allResourceSource
)
ResourceEnabled
(
resource
schema
.
GroupVersionResource
)
bool
{
return
true
}
func
(
*
allResourceSource
)
AnyResourcesForVersionEnabled
(
version
schema
.
GroupVersion
)
bool
{
return
true
}
func
(
*
allResourceSource
)
AnyVersionForGroupEnabled
(
group
string
)
bool
{
return
true
}
func
(
*
allResourceSource
)
VersionEnabled
(
version
schema
.
GroupVersion
)
bool
{
return
true
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment