Merge pull request #41313 from sttts/sttts-apiserver-server-storage
Automatic merge from submit-queue (batch tested with PRs 41134, 41410, 40177, 41049, 41313) apiserver: further cleanup of apiserver storage plumbing - move kubeapiserver`s `RESTOptionsFactory` back to EtcdOptions by adding a `AddWithStorageFactoryTo` - factor out storage backend `Config` construction from EtcdOptions - move all `StorageFactory` related code into server/storage subpackage. In short: remove my stomach ache about `kubeapiserver.RESTOptionsFactory`. approved based on #40363
This commit is contained in:
@@ -64,6 +64,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/admission",
|
"//vendor:k8s.io/apiserver/pkg/admission",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server/filters",
|
"//vendor:k8s.io/apiserver/pkg/server/filters",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -25,6 +25,7 @@ go_library(
|
|||||||
"//vendor:github.com/spf13/pflag",
|
"//vendor:github.com/spf13/pflag",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/util/net",
|
"//vendor:k8s.io/apimachinery/pkg/util/net",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server/options",
|
"//vendor:k8s.io/apiserver/pkg/server/options",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -23,6 +23,7 @@ import (
|
|||||||
|
|
||||||
utilnet "k8s.io/apimachinery/pkg/util/net"
|
utilnet "k8s.io/apimachinery/pkg/util/net"
|
||||||
genericoptions "k8s.io/apiserver/pkg/server/options"
|
genericoptions "k8s.io/apiserver/pkg/server/options"
|
||||||
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/validation"
|
"k8s.io/kubernetes/pkg/api/validation"
|
||||||
kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options"
|
kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options"
|
||||||
@@ -68,7 +69,7 @@ type ServerRunOptions struct {
|
|||||||
func NewServerRunOptions() *ServerRunOptions {
|
func NewServerRunOptions() *ServerRunOptions {
|
||||||
s := ServerRunOptions{
|
s := ServerRunOptions{
|
||||||
GenericServerRunOptions: genericoptions.NewServerRunOptions(),
|
GenericServerRunOptions: genericoptions.NewServerRunOptions(),
|
||||||
Etcd: genericoptions.NewEtcdOptions(kubeoptions.DefaultEtcdPathPrefix, api.Scheme, nil),
|
Etcd: genericoptions.NewEtcdOptions(storagebackend.NewDefaultConfig(kubeoptions.DefaultEtcdPathPrefix, api.Scheme, nil)),
|
||||||
SecureServing: genericoptions.NewSecureServingOptions(),
|
SecureServing: genericoptions.NewSecureServingOptions(),
|
||||||
InsecureServing: genericoptions.NewInsecureServingOptions(),
|
InsecureServing: genericoptions.NewInsecureServingOptions(),
|
||||||
Audit: genericoptions.NewAuditLogOptions(),
|
Audit: genericoptions.NewAuditLogOptions(),
|
||||||
|
@@ -44,6 +44,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
"k8s.io/apiserver/pkg/server/filters"
|
"k8s.io/apiserver/pkg/server/filters"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/batch"
|
"k8s.io/kubernetes/pkg/apis/batch"
|
||||||
@@ -203,9 +204,9 @@ func Run(s *options.ServerRunOptions) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error generating storage version map: %s", err)
|
return fmt.Errorf("error generating storage version map: %s", err)
|
||||||
}
|
}
|
||||||
storageFactory, err := kubeapiserver.BuildDefaultStorageFactory(
|
storageFactory, err := kubeapiserver.NewStorageFactory(
|
||||||
s.Etcd.StorageConfig, s.Etcd.DefaultStorageMediaType, api.Codecs,
|
s.Etcd.StorageConfig, s.Etcd.DefaultStorageMediaType, api.Codecs,
|
||||||
genericapiserver.NewDefaultResourceEncodingConfig(api.Registry), storageGroupsToEncodingVersion,
|
serverstorage.NewDefaultResourceEncodingConfig(api.Registry), storageGroupsToEncodingVersion,
|
||||||
// FIXME: this GroupVersionResource override should be configurable
|
// FIXME: this GroupVersionResource override should be configurable
|
||||||
[]schema.GroupVersionResource{batch.Resource("cronjobs").WithVersion("v2alpha1")},
|
[]schema.GroupVersionResource{batch.Resource("cronjobs").WithVersion("v2alpha1")},
|
||||||
master.DefaultAPIResourceConfigSource(), s.APIEnablement.RuntimeConfig)
|
master.DefaultAPIResourceConfigSource(), s.APIEnablement.RuntimeConfig)
|
||||||
@@ -308,11 +309,9 @@ func Run(s *options.ServerRunOptions) error {
|
|||||||
sets.NewString("watch", "proxy"),
|
sets.NewString("watch", "proxy"),
|
||||||
sets.NewString("attach", "exec", "proxy", "log", "portforward"),
|
sets.NewString("attach", "exec", "proxy", "log", "portforward"),
|
||||||
)
|
)
|
||||||
genericConfig.RESTOptionsGetter = &kubeapiserver.RESTOptionsFactory{
|
|
||||||
StorageFactory: storageFactory,
|
if err := s.Etcd.ApplyWithStorageFactoryTo(storageFactory, genericConfig); err != nil {
|
||||||
EnableWatchCache: s.Etcd.EnableWatchCache,
|
return err
|
||||||
EnableGarbageCollection: s.Etcd.EnableGarbageCollection,
|
|
||||||
DeleteCollectionWorkers: s.Etcd.DeleteCollectionWorkers,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
config := &master.Config{
|
config := &master.Config{
|
||||||
|
@@ -25,6 +25,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server/options",
|
"//vendor:k8s.io/apiserver/pkg/server/options",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@@ -19,6 +19,8 @@ package apiserver
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||||
"k8s.io/apiserver/pkg/authorization/authorizerfactory"
|
"k8s.io/apiserver/pkg/authorization/authorizerfactory"
|
||||||
@@ -26,6 +28,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
genericoptions "k8s.io/apiserver/pkg/server/options"
|
genericoptions "k8s.io/apiserver/pkg/server/options"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/test_apis/testgroup/v1"
|
"k8s.io/kubernetes/cmd/libs/go2idl/client-gen/test_apis/testgroup/v1"
|
||||||
testgroupetcd "k8s.io/kubernetes/examples/apiserver/rest"
|
testgroupetcd "k8s.io/kubernetes/examples/apiserver/rest"
|
||||||
@@ -34,8 +37,6 @@ import (
|
|||||||
|
|
||||||
// Install the testgroup API
|
// Install the testgroup API
|
||||||
_ "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/test_apis/testgroup/install"
|
_ "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/test_apis/testgroup/install"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -45,17 +46,6 @@ const (
|
|||||||
SecurePort = 6444
|
SecurePort = 6444
|
||||||
)
|
)
|
||||||
|
|
||||||
func newStorageFactory() genericapiserver.StorageFactory {
|
|
||||||
config := storagebackend.Config{
|
|
||||||
Prefix: kubeoptions.DefaultEtcdPathPrefix,
|
|
||||||
ServerList: []string{"http://127.0.0.1:2379"},
|
|
||||||
Copier: api.Scheme,
|
|
||||||
}
|
|
||||||
storageFactory := genericapiserver.NewDefaultStorageFactory(config, "application/json", api.Codecs, genericapiserver.NewDefaultResourceEncodingConfig(api.Registry), genericapiserver.NewResourceConfig())
|
|
||||||
|
|
||||||
return storageFactory
|
|
||||||
}
|
|
||||||
|
|
||||||
type ServerRunOptions struct {
|
type ServerRunOptions struct {
|
||||||
GenericServerRunOptions *genericoptions.ServerRunOptions
|
GenericServerRunOptions *genericoptions.ServerRunOptions
|
||||||
Etcd *genericoptions.EtcdOptions
|
Etcd *genericoptions.EtcdOptions
|
||||||
@@ -68,7 +58,7 @@ type ServerRunOptions struct {
|
|||||||
func NewServerRunOptions() *ServerRunOptions {
|
func NewServerRunOptions() *ServerRunOptions {
|
||||||
s := ServerRunOptions{
|
s := ServerRunOptions{
|
||||||
GenericServerRunOptions: genericoptions.NewServerRunOptions(),
|
GenericServerRunOptions: genericoptions.NewServerRunOptions(),
|
||||||
Etcd: genericoptions.NewEtcdOptions(kubeoptions.DefaultEtcdPathPrefix, api.Scheme, nil),
|
Etcd: genericoptions.NewEtcdOptions(storagebackend.NewDefaultConfig(kubeoptions.DefaultEtcdPathPrefix, api.Scheme, nil)),
|
||||||
SecureServing: genericoptions.NewSecureServingOptions(),
|
SecureServing: genericoptions.NewSecureServingOptions(),
|
||||||
InsecureServing: genericoptions.NewInsecureServingOptions(),
|
InsecureServing: genericoptions.NewInsecureServingOptions(),
|
||||||
Authentication: kubeoptions.NewBuiltInAuthenticationOptions().WithAll(),
|
Authentication: kubeoptions.NewBuiltInAuthenticationOptions().WithAll(),
|
||||||
@@ -76,6 +66,7 @@ func NewServerRunOptions() *ServerRunOptions {
|
|||||||
}
|
}
|
||||||
s.InsecureServing.BindPort = InsecurePort
|
s.InsecureServing.BindPort = InsecurePort
|
||||||
s.SecureServing.ServingOptions.BindPort = SecurePort
|
s.SecureServing.ServingOptions.BindPort = SecurePort
|
||||||
|
s.Etcd.StorageConfig.ServerList = []string{"http://127.0.0.1:2379"}
|
||||||
|
|
||||||
return &s
|
return &s
|
||||||
}
|
}
|
||||||
@@ -122,22 +113,25 @@ func (serverOptions *ServerRunOptions) Run(stopCh <-chan struct{}) error {
|
|||||||
config.Authorizer = authorizerfactory.NewAlwaysAllowAuthorizer()
|
config.Authorizer = authorizerfactory.NewAlwaysAllowAuthorizer()
|
||||||
config.SwaggerConfig = genericapiserver.DefaultSwaggerConfig()
|
config.SwaggerConfig = genericapiserver.DefaultSwaggerConfig()
|
||||||
|
|
||||||
s, err := config.Complete().New()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Error in bringing up the server: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
groupVersion := v1.SchemeGroupVersion
|
groupVersion := v1.SchemeGroupVersion
|
||||||
groupName := groupVersion.Group
|
groupName := groupVersion.Group
|
||||||
groupMeta, err := api.Registry.Group(groupName)
|
groupMeta, err := api.Registry.Group(groupName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("%v", err)
|
return fmt.Errorf("%v", err)
|
||||||
}
|
}
|
||||||
storageFactory := newStorageFactory()
|
storageFactory := serverstorage.NewDefaultStorageFactory(serverOptions.Etcd.StorageConfig, "application/json", api.Codecs, serverstorage.NewDefaultResourceEncodingConfig(api.Registry), serverstorage.NewResourceConfig())
|
||||||
storageConfig, err := storageFactory.NewConfig(schema.GroupResource{Group: groupName, Resource: "testtype"})
|
storageConfig, err := storageFactory.NewConfig(schema.GroupResource{Group: groupName, Resource: "testtype"})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Unable to get storage config: %v", err)
|
return fmt.Errorf("Unable to get storage config: %v", err)
|
||||||
}
|
}
|
||||||
|
if err := serverOptions.Etcd.ApplyWithStorageFactoryTo(storageFactory, config); err != nil {
|
||||||
|
return fmt.Errorf("failed to configure authentication: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
s, err := config.Complete().New()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error in bringing up the server: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
testTypeOpts := generic.RESTOptions{
|
testTypeOpts := generic.RESTOptions{
|
||||||
StorageConfig: storageConfig,
|
StorageConfig: storageConfig,
|
||||||
|
@@ -73,6 +73,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server/filters",
|
"//vendor:k8s.io/apiserver/pkg/server/filters",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -20,6 +20,7 @@ go_library(
|
|||||||
"//pkg/kubeapiserver/options:go_default_library",
|
"//pkg/kubeapiserver/options:go_default_library",
|
||||||
"//vendor:github.com/spf13/pflag",
|
"//vendor:github.com/spf13/pflag",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server/options",
|
"//vendor:k8s.io/apiserver/pkg/server/options",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -21,6 +21,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
genericoptions "k8s.io/apiserver/pkg/server/options"
|
genericoptions "k8s.io/apiserver/pkg/server/options"
|
||||||
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options"
|
kubeoptions "k8s.io/kubernetes/pkg/kubeapiserver/options"
|
||||||
|
|
||||||
@@ -51,7 +52,7 @@ type ServerRunOptions struct {
|
|||||||
func NewServerRunOptions() *ServerRunOptions {
|
func NewServerRunOptions() *ServerRunOptions {
|
||||||
s := ServerRunOptions{
|
s := ServerRunOptions{
|
||||||
GenericServerRunOptions: genericoptions.NewServerRunOptions(),
|
GenericServerRunOptions: genericoptions.NewServerRunOptions(),
|
||||||
Etcd: genericoptions.NewEtcdOptions(kubeoptions.DefaultEtcdPathPrefix, api.Scheme, nil),
|
Etcd: genericoptions.NewEtcdOptions(storagebackend.NewDefaultConfig(kubeoptions.DefaultEtcdPathPrefix, api.Scheme, nil)),
|
||||||
SecureServing: genericoptions.NewSecureServingOptions(),
|
SecureServing: genericoptions.NewSecureServingOptions(),
|
||||||
InsecureServing: genericoptions.NewInsecureServingOptions(),
|
InsecureServing: genericoptions.NewInsecureServingOptions(),
|
||||||
Audit: genericoptions.NewAuditLogOptions(),
|
Audit: genericoptions.NewAuditLogOptions(),
|
||||||
|
@@ -37,6 +37,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
"k8s.io/apiserver/pkg/server/filters"
|
"k8s.io/apiserver/pkg/server/filters"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
|
"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
@@ -108,7 +109,7 @@ func Run(s *options.ServerRunOptions) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: register cluster federation resources here.
|
// TODO: register cluster federation resources here.
|
||||||
resourceConfig := genericapiserver.NewResourceConfig()
|
resourceConfig := serverstorage.NewResourceConfig()
|
||||||
|
|
||||||
if s.Etcd.StorageConfig.DeserializationCacheSize == 0 {
|
if s.Etcd.StorageConfig.DeserializationCacheSize == 0 {
|
||||||
// When size of cache is not explicitly set, set it to 50000
|
// When size of cache is not explicitly set, set it to 50000
|
||||||
@@ -118,9 +119,9 @@ func Run(s *options.ServerRunOptions) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error generating storage version map: %s", err)
|
return fmt.Errorf("error generating storage version map: %s", err)
|
||||||
}
|
}
|
||||||
storageFactory, err := kubeapiserver.BuildDefaultStorageFactory(
|
storageFactory, err := kubeapiserver.NewStorageFactory(
|
||||||
s.Etcd.StorageConfig, s.Etcd.DefaultStorageMediaType, api.Codecs,
|
s.Etcd.StorageConfig, s.Etcd.DefaultStorageMediaType, api.Codecs,
|
||||||
genericapiserver.NewDefaultResourceEncodingConfig(api.Registry), storageGroupsToEncodingVersion,
|
serverstorage.NewDefaultResourceEncodingConfig(api.Registry), storageGroupsToEncodingVersion,
|
||||||
[]schema.GroupVersionResource{}, resourceConfig, s.APIEnablement.RuntimeConfig)
|
[]schema.GroupVersionResource{}, resourceConfig, s.APIEnablement.RuntimeConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error in initializing storage factory: %s", err)
|
return fmt.Errorf("error in initializing storage factory: %s", err)
|
||||||
@@ -145,6 +146,9 @@ func Run(s *options.ServerRunOptions) error {
|
|||||||
servers := strings.Split(tokens[1], ";")
|
servers := strings.Split(tokens[1], ";")
|
||||||
storageFactory.SetEtcdLocation(groupResource, servers)
|
storageFactory.SetEtcdLocation(groupResource, servers)
|
||||||
}
|
}
|
||||||
|
if err := s.Etcd.ApplyWithStorageFactoryTo(storageFactory, genericConfig); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
apiAuthenticator, securityDefinitions, err := s.Authentication.ToAuthenticationConfig().New()
|
apiAuthenticator, securityDefinitions, err := s.Authentication.ToAuthenticationConfig().New()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -187,12 +191,6 @@ func Run(s *options.ServerRunOptions) error {
|
|||||||
sets.NewString("watch", "proxy"),
|
sets.NewString("watch", "proxy"),
|
||||||
sets.NewString("attach", "exec", "proxy", "log", "portforward"),
|
sets.NewString("attach", "exec", "proxy", "log", "portforward"),
|
||||||
)
|
)
|
||||||
genericConfig.RESTOptionsGetter = &kubeapiserver.RESTOptionsFactory{
|
|
||||||
StorageFactory: storageFactory,
|
|
||||||
EnableWatchCache: s.Etcd.EnableWatchCache,
|
|
||||||
EnableGarbageCollection: s.Etcd.EnableGarbageCollection,
|
|
||||||
DeleteCollectionWorkers: s.Etcd.DeleteCollectionWorkers,
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Move this to generic api server (Need to move the command line flag).
|
// TODO: Move this to generic api server (Need to move the command line flag).
|
||||||
if s.Etcd.EnableWatchCache {
|
if s.Etcd.EnableWatchCache {
|
||||||
|
@@ -13,16 +13,13 @@ go_library(
|
|||||||
srcs = [
|
srcs = [
|
||||||
"default_storage_factory_builder.go",
|
"default_storage_factory_builder.go",
|
||||||
"doc.go",
|
"doc.go",
|
||||||
"rest.go",
|
|
||||||
],
|
],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/api:go_default_library",
|
"//pkg/api:go_default_library",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
|
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic/registry",
|
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
|
||||||
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
||||||
"//vendor:k8s.io/apiserver/pkg/util/flag",
|
"//vendor:k8s.io/apiserver/pkg/util/flag",
|
||||||
],
|
],
|
||||||
@@ -59,6 +56,6 @@ go_test(
|
|||||||
"//pkg/apis/extensions/install:go_default_library",
|
"//pkg/apis/extensions/install:go_default_library",
|
||||||
"//pkg/apis/extensions/v1beta1:go_default_library",
|
"//pkg/apis/extensions/v1beta1:go_default_library",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
|
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@@ -23,18 +23,18 @@ import (
|
|||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
utilflag "k8s.io/apiserver/pkg/util/flag"
|
utilflag "k8s.io/apiserver/pkg/util/flag"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Builds the DefaultStorageFactory.
|
// NewStorageFactory builds the DefaultStorageFactory.
|
||||||
// Merges defaultResourceConfig with the user specified overrides and merges
|
// Merges defaultResourceConfig with the user specified overrides and merges
|
||||||
// defaultAPIResourceConfig with the corresponding user specified overrides as well.
|
// defaultAPIResourceConfig with the corresponding user specified overrides as well.
|
||||||
func BuildDefaultStorageFactory(storageConfig storagebackend.Config, defaultMediaType string, serializer runtime.StorageSerializer,
|
func NewStorageFactory(storageConfig storagebackend.Config, defaultMediaType string, serializer runtime.StorageSerializer,
|
||||||
defaultResourceEncoding *genericapiserver.DefaultResourceEncodingConfig, storageEncodingOverrides map[string]schema.GroupVersion, resourceEncodingOverrides []schema.GroupVersionResource,
|
defaultResourceEncoding *serverstorage.DefaultResourceEncodingConfig, storageEncodingOverrides map[string]schema.GroupVersion, resourceEncodingOverrides []schema.GroupVersionResource,
|
||||||
defaultAPIResourceConfig *genericapiserver.ResourceConfig, resourceConfigOverrides utilflag.ConfigurationMap) (*genericapiserver.DefaultStorageFactory, error) {
|
defaultAPIResourceConfig *serverstorage.ResourceConfig, resourceConfigOverrides utilflag.ConfigurationMap) (*serverstorage.DefaultStorageFactory, error) {
|
||||||
|
|
||||||
resourceEncodingConfig := mergeGroupEncodingConfigs(defaultResourceEncoding, storageEncodingOverrides)
|
resourceEncodingConfig := mergeGroupEncodingConfigs(defaultResourceEncoding, storageEncodingOverrides)
|
||||||
resourceEncodingConfig = mergeResourceEncodingConfigs(resourceEncodingConfig, resourceEncodingOverrides)
|
resourceEncodingConfig = mergeResourceEncodingConfigs(resourceEncodingConfig, resourceEncodingOverrides)
|
||||||
@@ -42,11 +42,11 @@ func BuildDefaultStorageFactory(storageConfig storagebackend.Config, defaultMedi
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return genericapiserver.NewDefaultStorageFactory(storageConfig, defaultMediaType, serializer, resourceEncodingConfig, apiResourceConfig), nil
|
return serverstorage.NewDefaultStorageFactory(storageConfig, defaultMediaType, serializer, resourceEncodingConfig, apiResourceConfig), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merges the given defaultResourceConfig with specifc GroupvVersionResource overrides.
|
// Merges the given defaultResourceConfig with specifc GroupvVersionResource overrides.
|
||||||
func mergeResourceEncodingConfigs(defaultResourceEncoding *genericapiserver.DefaultResourceEncodingConfig, resourceEncodingOverrides []schema.GroupVersionResource) *genericapiserver.DefaultResourceEncodingConfig {
|
func mergeResourceEncodingConfigs(defaultResourceEncoding *serverstorage.DefaultResourceEncodingConfig, resourceEncodingOverrides []schema.GroupVersionResource) *serverstorage.DefaultResourceEncodingConfig {
|
||||||
resourceEncodingConfig := defaultResourceEncoding
|
resourceEncodingConfig := defaultResourceEncoding
|
||||||
for _, gvr := range resourceEncodingOverrides {
|
for _, gvr := range resourceEncodingOverrides {
|
||||||
resourceEncodingConfig.SetResourceEncoding(gvr.GroupResource(), gvr.GroupVersion(),
|
resourceEncodingConfig.SetResourceEncoding(gvr.GroupResource(), gvr.GroupVersion(),
|
||||||
@@ -56,7 +56,7 @@ func mergeResourceEncodingConfigs(defaultResourceEncoding *genericapiserver.Defa
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Merges the given defaultResourceConfig with specifc GroupVersion overrides.
|
// Merges the given defaultResourceConfig with specifc GroupVersion overrides.
|
||||||
func mergeGroupEncodingConfigs(defaultResourceEncoding *genericapiserver.DefaultResourceEncodingConfig, storageEncodingOverrides map[string]schema.GroupVersion) *genericapiserver.DefaultResourceEncodingConfig {
|
func mergeGroupEncodingConfigs(defaultResourceEncoding *serverstorage.DefaultResourceEncodingConfig, storageEncodingOverrides map[string]schema.GroupVersion) *serverstorage.DefaultResourceEncodingConfig {
|
||||||
resourceEncodingConfig := defaultResourceEncoding
|
resourceEncodingConfig := defaultResourceEncoding
|
||||||
for group, storageEncodingVersion := range storageEncodingOverrides {
|
for group, storageEncodingVersion := range storageEncodingOverrides {
|
||||||
resourceEncodingConfig.SetVersionEncoding(group, storageEncodingVersion, schema.GroupVersion{Group: group, Version: runtime.APIVersionInternal})
|
resourceEncodingConfig.SetVersionEncoding(group, storageEncodingVersion, schema.GroupVersion{Group: group, Version: runtime.APIVersionInternal})
|
||||||
@@ -65,7 +65,7 @@ func mergeGroupEncodingConfigs(defaultResourceEncoding *genericapiserver.Default
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Merges the given defaultAPIResourceConfig with the given resourceConfigOverrides.
|
// Merges the given defaultAPIResourceConfig with the given resourceConfigOverrides.
|
||||||
func mergeAPIResourceConfigs(defaultAPIResourceConfig *genericapiserver.ResourceConfig, resourceConfigOverrides utilflag.ConfigurationMap) (*genericapiserver.ResourceConfig, error) {
|
func mergeAPIResourceConfigs(defaultAPIResourceConfig *serverstorage.ResourceConfig, resourceConfigOverrides utilflag.ConfigurationMap) (*serverstorage.ResourceConfig, error) {
|
||||||
resourceConfig := defaultAPIResourceConfig
|
resourceConfig := defaultAPIResourceConfig
|
||||||
overrides := resourceConfigOverrides
|
overrides := resourceConfigOverrides
|
||||||
|
|
||||||
|
@@ -21,7 +21,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
_ "k8s.io/kubernetes/pkg/api/install"
|
_ "k8s.io/kubernetes/pkg/api/install"
|
||||||
apiv1 "k8s.io/kubernetes/pkg/api/v1"
|
apiv1 "k8s.io/kubernetes/pkg/api/v1"
|
||||||
@@ -34,31 +34,31 @@ func TestParseRuntimeConfig(t *testing.T) {
|
|||||||
apiv1GroupVersion := apiv1.SchemeGroupVersion
|
apiv1GroupVersion := apiv1.SchemeGroupVersion
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
runtimeConfig map[string]string
|
runtimeConfig map[string]string
|
||||||
defaultResourceConfig func() *genericapiserver.ResourceConfig
|
defaultResourceConfig func() *serverstorage.ResourceConfig
|
||||||
expectedAPIConfig func() *genericapiserver.ResourceConfig
|
expectedAPIConfig func() *serverstorage.ResourceConfig
|
||||||
err bool
|
err bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
// everything default value.
|
// everything default value.
|
||||||
runtimeConfig: map[string]string{},
|
runtimeConfig: map[string]string{},
|
||||||
defaultResourceConfig: func() *genericapiserver.ResourceConfig {
|
defaultResourceConfig: func() *serverstorage.ResourceConfig {
|
||||||
return genericapiserver.NewResourceConfig()
|
return serverstorage.NewResourceConfig()
|
||||||
},
|
},
|
||||||
expectedAPIConfig: func() *genericapiserver.ResourceConfig {
|
expectedAPIConfig: func() *serverstorage.ResourceConfig {
|
||||||
return genericapiserver.NewResourceConfig()
|
return serverstorage.NewResourceConfig()
|
||||||
},
|
},
|
||||||
err: false,
|
err: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// no runtimeConfig override.
|
// no runtimeConfig override.
|
||||||
runtimeConfig: map[string]string{},
|
runtimeConfig: map[string]string{},
|
||||||
defaultResourceConfig: func() *genericapiserver.ResourceConfig {
|
defaultResourceConfig: func() *serverstorage.ResourceConfig {
|
||||||
config := genericapiserver.NewResourceConfig()
|
config := serverstorage.NewResourceConfig()
|
||||||
config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion)
|
config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion)
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
expectedAPIConfig: func() *genericapiserver.ResourceConfig {
|
expectedAPIConfig: func() *serverstorage.ResourceConfig {
|
||||||
config := genericapiserver.NewResourceConfig()
|
config := serverstorage.NewResourceConfig()
|
||||||
config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion)
|
config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion)
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
@@ -69,13 +69,13 @@ func TestParseRuntimeConfig(t *testing.T) {
|
|||||||
runtimeConfig: map[string]string{
|
runtimeConfig: map[string]string{
|
||||||
"extensions/v1beta1": "",
|
"extensions/v1beta1": "",
|
||||||
},
|
},
|
||||||
defaultResourceConfig: func() *genericapiserver.ResourceConfig {
|
defaultResourceConfig: func() *serverstorage.ResourceConfig {
|
||||||
config := genericapiserver.NewResourceConfig()
|
config := serverstorage.NewResourceConfig()
|
||||||
config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion)
|
config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion)
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
expectedAPIConfig: func() *genericapiserver.ResourceConfig {
|
expectedAPIConfig: func() *serverstorage.ResourceConfig {
|
||||||
config := genericapiserver.NewResourceConfig()
|
config := serverstorage.NewResourceConfig()
|
||||||
config.EnableVersions(extensionsapiv1beta1.SchemeGroupVersion)
|
config.EnableVersions(extensionsapiv1beta1.SchemeGroupVersion)
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
@@ -86,13 +86,13 @@ func TestParseRuntimeConfig(t *testing.T) {
|
|||||||
runtimeConfig: map[string]string{
|
runtimeConfig: map[string]string{
|
||||||
"api/v1/pods": "false",
|
"api/v1/pods": "false",
|
||||||
},
|
},
|
||||||
defaultResourceConfig: func() *genericapiserver.ResourceConfig {
|
defaultResourceConfig: func() *serverstorage.ResourceConfig {
|
||||||
config := genericapiserver.NewResourceConfig()
|
config := serverstorage.NewResourceConfig()
|
||||||
config.EnableVersions(apiv1GroupVersion)
|
config.EnableVersions(apiv1GroupVersion)
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
expectedAPIConfig: func() *genericapiserver.ResourceConfig {
|
expectedAPIConfig: func() *serverstorage.ResourceConfig {
|
||||||
config := genericapiserver.NewResourceConfig()
|
config := serverstorage.NewResourceConfig()
|
||||||
config.EnableVersions(apiv1GroupVersion)
|
config.EnableVersions(apiv1GroupVersion)
|
||||||
config.DisableResources(apiv1GroupVersion.WithResource("pods"))
|
config.DisableResources(apiv1GroupVersion.WithResource("pods"))
|
||||||
return config
|
return config
|
||||||
@@ -104,11 +104,11 @@ func TestParseRuntimeConfig(t *testing.T) {
|
|||||||
runtimeConfig: map[string]string{
|
runtimeConfig: map[string]string{
|
||||||
"api/v1": "false",
|
"api/v1": "false",
|
||||||
},
|
},
|
||||||
defaultResourceConfig: func() *genericapiserver.ResourceConfig {
|
defaultResourceConfig: func() *serverstorage.ResourceConfig {
|
||||||
return genericapiserver.NewResourceConfig()
|
return serverstorage.NewResourceConfig()
|
||||||
},
|
},
|
||||||
expectedAPIConfig: func() *genericapiserver.ResourceConfig {
|
expectedAPIConfig: func() *serverstorage.ResourceConfig {
|
||||||
config := genericapiserver.NewResourceConfig()
|
config := serverstorage.NewResourceConfig()
|
||||||
config.DisableVersions(apiv1GroupVersion)
|
config.DisableVersions(apiv1GroupVersion)
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
@@ -120,14 +120,14 @@ func TestParseRuntimeConfig(t *testing.T) {
|
|||||||
"extensions/v1beta1/anything": "true",
|
"extensions/v1beta1/anything": "true",
|
||||||
"extensions/v1beta1/daemonsets": "false",
|
"extensions/v1beta1/daemonsets": "false",
|
||||||
},
|
},
|
||||||
defaultResourceConfig: func() *genericapiserver.ResourceConfig {
|
defaultResourceConfig: func() *serverstorage.ResourceConfig {
|
||||||
config := genericapiserver.NewResourceConfig()
|
config := serverstorage.NewResourceConfig()
|
||||||
config.EnableVersions(extensionsGroupVersion)
|
config.EnableVersions(extensionsGroupVersion)
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
|
|
||||||
expectedAPIConfig: func() *genericapiserver.ResourceConfig {
|
expectedAPIConfig: func() *serverstorage.ResourceConfig {
|
||||||
config := genericapiserver.NewResourceConfig()
|
config := serverstorage.NewResourceConfig()
|
||||||
config.EnableVersions(extensionsGroupVersion)
|
config.EnableVersions(extensionsGroupVersion)
|
||||||
config.DisableResources(extensionsGroupVersion.WithResource("daemonsets"))
|
config.DisableResources(extensionsGroupVersion.WithResource("daemonsets"))
|
||||||
config.EnableResources(extensionsGroupVersion.WithResource("anything"))
|
config.EnableResources(extensionsGroupVersion.WithResource("anything"))
|
||||||
@@ -140,11 +140,11 @@ func TestParseRuntimeConfig(t *testing.T) {
|
|||||||
runtimeConfig: map[string]string{
|
runtimeConfig: map[string]string{
|
||||||
"invalidgroup/version": "false",
|
"invalidgroup/version": "false",
|
||||||
},
|
},
|
||||||
defaultResourceConfig: func() *genericapiserver.ResourceConfig {
|
defaultResourceConfig: func() *serverstorage.ResourceConfig {
|
||||||
return genericapiserver.NewResourceConfig()
|
return serverstorage.NewResourceConfig()
|
||||||
},
|
},
|
||||||
expectedAPIConfig: func() *genericapiserver.ResourceConfig {
|
expectedAPIConfig: func() *serverstorage.ResourceConfig {
|
||||||
return genericapiserver.NewResourceConfig()
|
return serverstorage.NewResourceConfig()
|
||||||
},
|
},
|
||||||
err: true,
|
err: true,
|
||||||
},
|
},
|
||||||
@@ -153,11 +153,11 @@ func TestParseRuntimeConfig(t *testing.T) {
|
|||||||
runtimeConfig: map[string]string{
|
runtimeConfig: map[string]string{
|
||||||
"api/v1/pods": "false",
|
"api/v1/pods": "false",
|
||||||
},
|
},
|
||||||
defaultResourceConfig: func() *genericapiserver.ResourceConfig {
|
defaultResourceConfig: func() *serverstorage.ResourceConfig {
|
||||||
return genericapiserver.NewResourceConfig()
|
return serverstorage.NewResourceConfig()
|
||||||
},
|
},
|
||||||
expectedAPIConfig: func() *genericapiserver.ResourceConfig {
|
expectedAPIConfig: func() *serverstorage.ResourceConfig {
|
||||||
config := genericapiserver.NewResourceConfig()
|
config := serverstorage.NewResourceConfig()
|
||||||
config.DisableResources(schema.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"})
|
config.DisableResources(schema.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"})
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
@@ -168,11 +168,11 @@ func TestParseRuntimeConfig(t *testing.T) {
|
|||||||
runtimeConfig: map[string]string{
|
runtimeConfig: map[string]string{
|
||||||
"api/all": "true",
|
"api/all": "true",
|
||||||
},
|
},
|
||||||
defaultResourceConfig: func() *genericapiserver.ResourceConfig {
|
defaultResourceConfig: func() *serverstorage.ResourceConfig {
|
||||||
return genericapiserver.NewResourceConfig()
|
return serverstorage.NewResourceConfig()
|
||||||
},
|
},
|
||||||
expectedAPIConfig: func() *genericapiserver.ResourceConfig {
|
expectedAPIConfig: func() *serverstorage.ResourceConfig {
|
||||||
config := genericapiserver.NewResourceConfig()
|
config := serverstorage.NewResourceConfig()
|
||||||
config.EnableVersions(api.Registry.RegisteredGroupVersions()...)
|
config.EnableVersions(api.Registry.RegisteredGroupVersions()...)
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
@@ -183,11 +183,11 @@ func TestParseRuntimeConfig(t *testing.T) {
|
|||||||
runtimeConfig: map[string]string{
|
runtimeConfig: map[string]string{
|
||||||
"api/all": "false",
|
"api/all": "false",
|
||||||
},
|
},
|
||||||
defaultResourceConfig: func() *genericapiserver.ResourceConfig {
|
defaultResourceConfig: func() *serverstorage.ResourceConfig {
|
||||||
return genericapiserver.NewResourceConfig()
|
return serverstorage.NewResourceConfig()
|
||||||
},
|
},
|
||||||
expectedAPIConfig: func() *genericapiserver.ResourceConfig {
|
expectedAPIConfig: func() *serverstorage.ResourceConfig {
|
||||||
config := genericapiserver.NewResourceConfig()
|
config := serverstorage.NewResourceConfig()
|
||||||
config.DisableVersions(api.Registry.RegisteredGroupVersions()...)
|
config.DisableVersions(api.Registry.RegisteredGroupVersions()...)
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
|
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
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 kubeapiserver
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
||||||
"k8s.io/apiserver/pkg/registry/generic"
|
|
||||||
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RESTOptionsFactory is a RESTOptionsGetter for kube apiservers since they do complicated stuff
|
|
||||||
type RESTOptionsFactory struct {
|
|
||||||
DeleteCollectionWorkers int
|
|
||||||
EnableGarbageCollection bool
|
|
||||||
EnableWatchCache bool
|
|
||||||
StorageFactory genericapiserver.StorageFactory
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *RESTOptionsFactory) GetRESTOptions(resource schema.GroupResource) (generic.RESTOptions, error) {
|
|
||||||
storageConfig, err := f.StorageFactory.NewConfig(resource)
|
|
||||||
if err != nil {
|
|
||||||
return generic.RESTOptions{}, fmt.Errorf("Unable to find storage destination for %v, due to %v", resource, err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
ret := generic.RESTOptions{
|
|
||||||
StorageConfig: storageConfig,
|
|
||||||
Decorator: generic.UndecoratedStorage,
|
|
||||||
DeleteCollectionWorkers: f.DeleteCollectionWorkers,
|
|
||||||
EnableGarbageCollection: f.EnableGarbageCollection,
|
|
||||||
ResourcePrefix: f.StorageFactory.ResourcePrefix(resource),
|
|
||||||
}
|
|
||||||
if f.EnableWatchCache {
|
|
||||||
ret.Decorator = genericregistry.StorageWithCacher
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret, nil
|
|
||||||
}
|
|
@@ -83,6 +83,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server/healthz",
|
"//vendor:k8s.io/apiserver/pkg/server/healthz",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -114,7 +115,6 @@ go_test(
|
|||||||
"//pkg/client/clientset_generated/clientset/fake:go_default_library",
|
"//pkg/client/clientset_generated/clientset/fake:go_default_library",
|
||||||
"//pkg/client/clientset_generated/internalclientset/fake:go_default_library",
|
"//pkg/client/clientset_generated/internalclientset/fake:go_default_library",
|
||||||
"//pkg/generated/openapi:go_default_library",
|
"//pkg/generated/openapi:go_default_library",
|
||||||
"//pkg/kubeapiserver:go_default_library",
|
|
||||||
"//pkg/kubelet/client:go_default_library",
|
"//pkg/kubelet/client:go_default_library",
|
||||||
"//pkg/version:go_default_library",
|
"//pkg/version:go_default_library",
|
||||||
"//vendor:github.com/go-openapi/loads",
|
"//vendor:github.com/go-openapi/loads",
|
||||||
@@ -131,6 +131,8 @@ go_test(
|
|||||||
"//vendor:k8s.io/apimachinery/pkg/version",
|
"//vendor:k8s.io/apimachinery/pkg/version",
|
||||||
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/options",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
"//vendor:k8s.io/apiserver/pkg/storage/etcd/testing",
|
"//vendor:k8s.io/apiserver/pkg/storage/etcd/testing",
|
||||||
"//vendor:k8s.io/client-go/rest",
|
"//vendor:k8s.io/client-go/rest",
|
||||||
"//vendor:k8s.io/client-go/testing",
|
"//vendor:k8s.io/client-go/testing",
|
||||||
|
@@ -29,6 +29,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
"k8s.io/apiserver/pkg/server/healthz"
|
"k8s.io/apiserver/pkg/server/healthz"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
apiv1 "k8s.io/kubernetes/pkg/api/v1"
|
apiv1 "k8s.io/kubernetes/pkg/api/v1"
|
||||||
@@ -79,8 +80,8 @@ const (
|
|||||||
type Config struct {
|
type Config struct {
|
||||||
GenericConfig *genericapiserver.Config
|
GenericConfig *genericapiserver.Config
|
||||||
|
|
||||||
APIResourceConfigSource genericapiserver.APIResourceConfigSource
|
APIResourceConfigSource serverstorage.APIResourceConfigSource
|
||||||
StorageFactory genericapiserver.StorageFactory
|
StorageFactory serverstorage.StorageFactory
|
||||||
EnableCoreControllers bool
|
EnableCoreControllers bool
|
||||||
EndpointReconcilerConfig EndpointReconcilerConfig
|
EndpointReconcilerConfig EndpointReconcilerConfig
|
||||||
EventTTL time.Duration
|
EventTTL time.Duration
|
||||||
@@ -284,11 +285,11 @@ func (m *Master) installTunneler(nodeTunneler tunneler.Tunneler, nodeClient core
|
|||||||
// RESTStorageProvider is a factory type for REST storage.
|
// RESTStorageProvider is a factory type for REST storage.
|
||||||
type RESTStorageProvider interface {
|
type RESTStorageProvider interface {
|
||||||
GroupName() string
|
GroupName() string
|
||||||
NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool)
|
NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
// InstallAPIs will install the APIs for the restStorageProviders if they are enabled.
|
// InstallAPIs will install the APIs for the restStorageProviders if they are enabled.
|
||||||
func (m *Master) InstallAPIs(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter, restStorageProviders ...RESTStorageProvider) {
|
func (m *Master) InstallAPIs(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter, restStorageProviders ...RESTStorageProvider) {
|
||||||
apiGroupsInfo := []genericapiserver.APIGroupInfo{}
|
apiGroupsInfo := []genericapiserver.APIGroupInfo{}
|
||||||
|
|
||||||
for _, restStorageBuilder := range restStorageProviders {
|
for _, restStorageBuilder := range restStorageProviders {
|
||||||
@@ -349,8 +350,8 @@ func (n nodeAddressProvider) externalAddresses() ([]string, error) {
|
|||||||
return addrs, nil
|
return addrs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func DefaultAPIResourceConfigSource() *genericapiserver.ResourceConfig {
|
func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig {
|
||||||
ret := genericapiserver.NewResourceConfig()
|
ret := serverstorage.NewResourceConfig()
|
||||||
ret.EnableVersions(
|
ret.EnableVersions(
|
||||||
apiv1.SchemeGroupVersion,
|
apiv1.SchemeGroupVersion,
|
||||||
extensionsapiv1beta1.SchemeGroupVersion,
|
extensionsapiv1beta1.SchemeGroupVersion,
|
||||||
|
@@ -34,6 +34,8 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/version"
|
"k8s.io/apimachinery/pkg/version"
|
||||||
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
"k8s.io/apiserver/pkg/server/options"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing"
|
etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
@@ -51,7 +53,6 @@ import (
|
|||||||
extensionsapiv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
extensionsapiv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
||||||
"k8s.io/kubernetes/pkg/apis/rbac"
|
"k8s.io/kubernetes/pkg/apis/rbac"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake"
|
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake"
|
||||||
"k8s.io/kubernetes/pkg/kubeapiserver"
|
|
||||||
kubeletclient "k8s.io/kubernetes/pkg/kubelet/client"
|
kubeletclient "k8s.io/kubernetes/pkg/kubelet/client"
|
||||||
kubeversion "k8s.io/kubernetes/pkg/version"
|
kubeversion "k8s.io/kubernetes/pkg/version"
|
||||||
|
|
||||||
@@ -69,7 +70,7 @@ func setUp(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.
|
|||||||
MasterCount: 1,
|
MasterCount: 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
resourceEncoding := genericapiserver.NewDefaultResourceEncodingConfig(api.Registry)
|
resourceEncoding := serverstorage.NewDefaultResourceEncodingConfig(api.Registry)
|
||||||
resourceEncoding.SetVersionEncoding(api.GroupName, api.Registry.GroupOrDie(api.GroupName).GroupVersion, schema.GroupVersion{Group: api.GroupName, Version: runtime.APIVersionInternal})
|
resourceEncoding.SetVersionEncoding(api.GroupName, api.Registry.GroupOrDie(api.GroupName).GroupVersion, schema.GroupVersion{Group: api.GroupName, Version: runtime.APIVersionInternal})
|
||||||
resourceEncoding.SetVersionEncoding(autoscaling.GroupName, *testapi.Autoscaling.GroupVersion(), schema.GroupVersion{Group: autoscaling.GroupName, Version: runtime.APIVersionInternal})
|
resourceEncoding.SetVersionEncoding(autoscaling.GroupName, *testapi.Autoscaling.GroupVersion(), schema.GroupVersion{Group: autoscaling.GroupName, Version: runtime.APIVersionInternal})
|
||||||
resourceEncoding.SetVersionEncoding(batch.GroupName, *testapi.Batch.GroupVersion(), schema.GroupVersion{Group: batch.GroupName, Version: runtime.APIVersionInternal})
|
resourceEncoding.SetVersionEncoding(batch.GroupName, *testapi.Batch.GroupVersion(), schema.GroupVersion{Group: batch.GroupName, Version: runtime.APIVersionInternal})
|
||||||
@@ -77,7 +78,12 @@ func setUp(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.
|
|||||||
resourceEncoding.SetVersionEncoding(extensions.GroupName, *testapi.Extensions.GroupVersion(), schema.GroupVersion{Group: extensions.GroupName, Version: runtime.APIVersionInternal})
|
resourceEncoding.SetVersionEncoding(extensions.GroupName, *testapi.Extensions.GroupVersion(), schema.GroupVersion{Group: extensions.GroupName, Version: runtime.APIVersionInternal})
|
||||||
resourceEncoding.SetVersionEncoding(rbac.GroupName, *testapi.Rbac.GroupVersion(), schema.GroupVersion{Group: rbac.GroupName, Version: runtime.APIVersionInternal})
|
resourceEncoding.SetVersionEncoding(rbac.GroupName, *testapi.Rbac.GroupVersion(), schema.GroupVersion{Group: rbac.GroupName, Version: runtime.APIVersionInternal})
|
||||||
resourceEncoding.SetVersionEncoding(certificates.GroupName, *testapi.Certificates.GroupVersion(), schema.GroupVersion{Group: certificates.GroupName, Version: runtime.APIVersionInternal})
|
resourceEncoding.SetVersionEncoding(certificates.GroupName, *testapi.Certificates.GroupVersion(), schema.GroupVersion{Group: certificates.GroupName, Version: runtime.APIVersionInternal})
|
||||||
storageFactory := genericapiserver.NewDefaultStorageFactory(*storageConfig, testapi.StorageMediaType(), api.Codecs, resourceEncoding, DefaultAPIResourceConfigSource())
|
storageFactory := serverstorage.NewDefaultStorageFactory(*storageConfig, testapi.StorageMediaType(), api.Codecs, resourceEncoding, DefaultAPIResourceConfigSource())
|
||||||
|
|
||||||
|
err := options.NewEtcdOptions(storageConfig).ApplyWithStorageFactoryTo(storageFactory, config.GenericConfig)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
kubeVersion := kubeversion.Get()
|
kubeVersion := kubeversion.Get()
|
||||||
config.GenericConfig.Version = &kubeVersion
|
config.GenericConfig.Version = &kubeVersion
|
||||||
@@ -88,12 +94,6 @@ func setUp(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert.
|
|||||||
config.GenericConfig.RequestContextMapper = genericapirequest.NewRequestContextMapper()
|
config.GenericConfig.RequestContextMapper = genericapirequest.NewRequestContextMapper()
|
||||||
config.GenericConfig.LoopbackClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: api.Codecs}}
|
config.GenericConfig.LoopbackClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: api.Codecs}}
|
||||||
config.GenericConfig.EnableMetrics = true
|
config.GenericConfig.EnableMetrics = true
|
||||||
config.GenericConfig.RESTOptionsGetter = &kubeapiserver.RESTOptionsFactory{
|
|
||||||
StorageFactory: storageFactory,
|
|
||||||
EnableWatchCache: true,
|
|
||||||
EnableGarbageCollection: true,
|
|
||||||
DeleteCollectionWorkers: 1,
|
|
||||||
}
|
|
||||||
config.EnableCoreControllers = false
|
config.EnableCoreControllers = false
|
||||||
config.KubeletClientConfig = kubeletclient.KubeletClientConfig{Port: 10250}
|
config.KubeletClientConfig = kubeletclient.KubeletClientConfig{Port: 10250}
|
||||||
config.ProxyTransport = utilnet.SetTransportDefaults(&http.Transport{
|
config.ProxyTransport = utilnet.SetTransportDefaults(&http.Transport{
|
||||||
@@ -121,8 +121,8 @@ func newMaster(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *ass
|
|||||||
}
|
}
|
||||||
|
|
||||||
// limitedAPIResourceConfigSource only enables the core group, the extensions group, the batch group, and the autoscaling group.
|
// limitedAPIResourceConfigSource only enables the core group, the extensions group, the batch group, and the autoscaling group.
|
||||||
func limitedAPIResourceConfigSource() *genericapiserver.ResourceConfig {
|
func limitedAPIResourceConfigSource() *serverstorage.ResourceConfig {
|
||||||
ret := genericapiserver.NewResourceConfig()
|
ret := serverstorage.NewResourceConfig()
|
||||||
ret.EnableVersions(
|
ret.EnableVersions(
|
||||||
apiv1.SchemeGroupVersion,
|
apiv1.SchemeGroupVersion,
|
||||||
extensionsapiv1beta1.SchemeGroupVersion,
|
extensionsapiv1beta1.SchemeGroupVersion,
|
||||||
|
1
pkg/master/thirdparty/BUILD
vendored
1
pkg/master/thirdparty/BUILD
vendored
@@ -28,6 +28,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
3
pkg/master/thirdparty/thirdparty.go
vendored
3
pkg/master/thirdparty/thirdparty.go
vendored
@@ -33,6 +33,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorgage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
@@ -70,7 +71,7 @@ type ThirdPartyResourceServer struct {
|
|||||||
disableThirdPartyControllerForTesting bool
|
disableThirdPartyControllerForTesting bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewThirdPartyResourceServer(genericAPIServer *genericapiserver.GenericAPIServer, storageFactory genericapiserver.StorageFactory) *ThirdPartyResourceServer {
|
func NewThirdPartyResourceServer(genericAPIServer *genericapiserver.GenericAPIServer, storageFactory serverstorgage.StorageFactory) *ThirdPartyResourceServer {
|
||||||
ret := &ThirdPartyResourceServer{
|
ret := &ThirdPartyResourceServer{
|
||||||
genericAPIServer: genericAPIServer,
|
genericAPIServer: genericAPIServer,
|
||||||
thirdPartyResources: map[string]*thirdPartyEntry{},
|
thirdPartyResources: map[string]*thirdPartyEntry{},
|
||||||
|
@@ -19,6 +19,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -20,6 +20,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/apps"
|
"k8s.io/kubernetes/pkg/apis/apps"
|
||||||
appsapiv1beta1 "k8s.io/kubernetes/pkg/apis/apps/v1beta1"
|
appsapiv1beta1 "k8s.io/kubernetes/pkg/apis/apps/v1beta1"
|
||||||
@@ -28,7 +29,7 @@ import (
|
|||||||
|
|
||||||
type RESTStorageProvider struct{}
|
type RESTStorageProvider struct{}
|
||||||
|
|
||||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apps.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(apps.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||||
|
|
||||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(appsapiv1beta1.SchemeGroupVersion) {
|
if apiResourceConfigSource.AnyResourcesForVersionEnabled(appsapiv1beta1.SchemeGroupVersion) {
|
||||||
@@ -39,7 +40,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapise
|
|||||||
return apiGroupInfo, true
|
return apiGroupInfo, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := appsapiv1beta1.SchemeGroupVersion
|
version := appsapiv1beta1.SchemeGroupVersion
|
||||||
|
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
|
@@ -21,6 +21,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -21,6 +21,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/authentication"
|
"k8s.io/kubernetes/pkg/apis/authentication"
|
||||||
authenticationv1 "k8s.io/kubernetes/pkg/apis/authentication/v1"
|
authenticationv1 "k8s.io/kubernetes/pkg/apis/authentication/v1"
|
||||||
@@ -32,7 +33,7 @@ type RESTStorageProvider struct {
|
|||||||
Authenticator authenticator.Request
|
Authenticator authenticator.Request
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||||
// TODO figure out how to make the swagger generation stable, while allowing this endpoint to be disabled.
|
// TODO figure out how to make the swagger generation stable, while allowing this endpoint to be disabled.
|
||||||
// if p.Authenticator == nil {
|
// if p.Authenticator == nil {
|
||||||
// return genericapiserver.APIGroupInfo{}, false
|
// return genericapiserver.APIGroupInfo{}, false
|
||||||
@@ -52,7 +53,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapise
|
|||||||
return apiGroupInfo, true
|
return apiGroupInfo, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := authenticationv1beta1.SchemeGroupVersion
|
version := authenticationv1beta1.SchemeGroupVersion
|
||||||
|
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
@@ -66,7 +67,7 @@ func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource genericapise
|
|||||||
return storage
|
return storage
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := authenticationv1.SchemeGroupVersion
|
version := authenticationv1.SchemeGroupVersion
|
||||||
|
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
|
@@ -23,6 +23,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -21,6 +21,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/authorization"
|
"k8s.io/kubernetes/pkg/apis/authorization"
|
||||||
authorizationv1 "k8s.io/kubernetes/pkg/apis/authorization/v1"
|
authorizationv1 "k8s.io/kubernetes/pkg/apis/authorization/v1"
|
||||||
@@ -34,7 +35,7 @@ type RESTStorageProvider struct {
|
|||||||
Authorizer authorizer.Authorizer
|
Authorizer authorizer.Authorizer
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||||
if p.Authorizer == nil {
|
if p.Authorizer == nil {
|
||||||
return genericapiserver.APIGroupInfo{}, false
|
return genericapiserver.APIGroupInfo{}, false
|
||||||
}
|
}
|
||||||
@@ -54,7 +55,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapise
|
|||||||
return apiGroupInfo, true
|
return apiGroupInfo, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := authorizationv1beta1.SchemeGroupVersion
|
version := authorizationv1beta1.SchemeGroupVersion
|
||||||
|
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
@@ -71,7 +72,7 @@ func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource genericapise
|
|||||||
return storage
|
return storage
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := authorizationv1beta1.SchemeGroupVersion
|
version := authorizationv1beta1.SchemeGroupVersion
|
||||||
|
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
|
@@ -20,6 +20,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -20,6 +20,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
||||||
autoscalingapiv1 "k8s.io/kubernetes/pkg/apis/autoscaling/v1"
|
autoscalingapiv1 "k8s.io/kubernetes/pkg/apis/autoscaling/v1"
|
||||||
@@ -29,7 +30,7 @@ import (
|
|||||||
|
|
||||||
type RESTStorageProvider struct{}
|
type RESTStorageProvider struct{}
|
||||||
|
|
||||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(autoscaling.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(autoscaling.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||||
|
|
||||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(autoscalingapiv1.SchemeGroupVersion) {
|
if apiResourceConfigSource.AnyResourcesForVersionEnabled(autoscalingapiv1.SchemeGroupVersion) {
|
||||||
@@ -44,7 +45,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapise
|
|||||||
return apiGroupInfo, true
|
return apiGroupInfo, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := autoscalingapiv1.SchemeGroupVersion
|
version := autoscalingapiv1.SchemeGroupVersion
|
||||||
|
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
@@ -56,7 +57,7 @@ func (p RESTStorageProvider) v1Storage(apiResourceConfigSource genericapiserver.
|
|||||||
return storage
|
return storage
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v2alpha1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v2alpha1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := autoscalingapiv2alpha1.SchemeGroupVersion
|
version := autoscalingapiv2alpha1.SchemeGroupVersion
|
||||||
|
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
|
@@ -22,6 +22,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -21,6 +21,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/batch"
|
"k8s.io/kubernetes/pkg/apis/batch"
|
||||||
batchapiv1 "k8s.io/kubernetes/pkg/apis/batch/v1"
|
batchapiv1 "k8s.io/kubernetes/pkg/apis/batch/v1"
|
||||||
@@ -31,7 +32,7 @@ import (
|
|||||||
|
|
||||||
type RESTStorageProvider struct{}
|
type RESTStorageProvider struct{}
|
||||||
|
|
||||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(batch.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(batch.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||||
|
|
||||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(batchapiv2alpha1.SchemeGroupVersion) {
|
if apiResourceConfigSource.AnyResourcesForVersionEnabled(batchapiv2alpha1.SchemeGroupVersion) {
|
||||||
@@ -50,7 +51,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapise
|
|||||||
return apiGroupInfo, true
|
return apiGroupInfo, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := batchapiv1.SchemeGroupVersion
|
version := batchapiv1.SchemeGroupVersion
|
||||||
|
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
@@ -62,7 +63,7 @@ func (p RESTStorageProvider) v1Storage(apiResourceConfigSource genericapiserver.
|
|||||||
return storage
|
return storage
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v2alpha1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v2alpha1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := batchapiv2alpha1.SchemeGroupVersion
|
version := batchapiv2alpha1.SchemeGroupVersion
|
||||||
|
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
|
@@ -19,6 +19,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -20,6 +20,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/certificates"
|
"k8s.io/kubernetes/pkg/apis/certificates"
|
||||||
certificatesapiv1beta1 "k8s.io/kubernetes/pkg/apis/certificates/v1beta1"
|
certificatesapiv1beta1 "k8s.io/kubernetes/pkg/apis/certificates/v1beta1"
|
||||||
@@ -28,7 +29,7 @@ import (
|
|||||||
|
|
||||||
type RESTStorageProvider struct{}
|
type RESTStorageProvider struct{}
|
||||||
|
|
||||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(certificates.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(certificates.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||||
|
|
||||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(certificatesapiv1beta1.SchemeGroupVersion) {
|
if apiResourceConfigSource.AnyResourcesForVersionEnabled(certificatesapiv1beta1.SchemeGroupVersion) {
|
||||||
@@ -39,7 +40,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapise
|
|||||||
return apiGroupInfo, true
|
return apiGroupInfo, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := certificatesapiv1beta1.SchemeGroupVersion
|
version := certificatesapiv1beta1.SchemeGroupVersion
|
||||||
|
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
|
@@ -57,6 +57,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
"//vendor:k8s.io/apiserver/pkg/storage/etcd/util",
|
"//vendor:k8s.io/apiserver/pkg/storage/etcd/util",
|
||||||
"//vendor:k8s.io/client-go/rest",
|
"//vendor:k8s.io/client-go/rest",
|
||||||
],
|
],
|
||||||
|
@@ -32,6 +32,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
etcdutil "k8s.io/apiserver/pkg/storage/etcd/util"
|
etcdutil "k8s.io/apiserver/pkg/storage/etcd/util"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
@@ -66,7 +67,7 @@ import (
|
|||||||
// LegacyRESTStorageProvider provides information needed to build RESTStorage for core, but
|
// LegacyRESTStorageProvider provides information needed to build RESTStorage for core, but
|
||||||
// does NOT implement the "normal" RESTStorageProvider (yet!)
|
// does NOT implement the "normal" RESTStorageProvider (yet!)
|
||||||
type LegacyRESTStorageProvider struct {
|
type LegacyRESTStorageProvider struct {
|
||||||
StorageFactory genericapiserver.StorageFactory
|
StorageFactory serverstorage.StorageFactory
|
||||||
// Used for custom proxy dialing, and proxy TLS options
|
// Used for custom proxy dialing, and proxy TLS options
|
||||||
ProxyTransport http.RoundTripper
|
ProxyTransport http.RoundTripper
|
||||||
KubeletClientConfig kubeletclient.KubeletClientConfig
|
KubeletClientConfig kubeletclient.KubeletClientConfig
|
||||||
@@ -238,7 +239,7 @@ func (p LegacyRESTStorageProvider) GroupName() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type componentStatusStorage struct {
|
type componentStatusStorage struct {
|
||||||
storageFactory genericapiserver.StorageFactory
|
storageFactory serverstorage.StorageFactory
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s componentStatusStorage) serversToValidate() map[string]componentstatus.Server {
|
func (s componentStatusStorage) serversToValidate() map[string]componentstatus.Server {
|
||||||
|
@@ -51,6 +51,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -27,6 +27,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
extensionsapiv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
extensionsapiv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
|
||||||
@@ -45,7 +46,7 @@ type RESTStorageProvider struct {
|
|||||||
ResourceInterface ResourceInterface
|
ResourceInterface ResourceInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(extensions.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(extensions.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||||
|
|
||||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(extensionsapiv1beta1.SchemeGroupVersion) {
|
if apiResourceConfigSource.AnyResourcesForVersionEnabled(extensionsapiv1beta1.SchemeGroupVersion) {
|
||||||
@@ -56,7 +57,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapise
|
|||||||
return apiGroupInfo, true
|
return apiGroupInfo, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := extensionsapiv1beta1.SchemeGroupVersion
|
version := extensionsapiv1beta1.SchemeGroupVersion
|
||||||
|
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
|
@@ -19,6 +19,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -20,6 +20,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/policy"
|
"k8s.io/kubernetes/pkg/apis/policy"
|
||||||
policyapiv1beta1 "k8s.io/kubernetes/pkg/apis/policy/v1beta1"
|
policyapiv1beta1 "k8s.io/kubernetes/pkg/apis/policy/v1beta1"
|
||||||
@@ -28,7 +29,7 @@ import (
|
|||||||
|
|
||||||
type RESTStorageProvider struct{}
|
type RESTStorageProvider struct{}
|
||||||
|
|
||||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(policy.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(policy.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||||
|
|
||||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(policyapiv1beta1.SchemeGroupVersion) {
|
if apiResourceConfigSource.AnyResourcesForVersionEnabled(policyapiv1beta1.SchemeGroupVersion) {
|
||||||
@@ -38,7 +39,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapise
|
|||||||
return apiGroupInfo, true
|
return apiGroupInfo, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := policyapiv1beta1.SchemeGroupVersion
|
version := policyapiv1beta1.SchemeGroupVersion
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
if apiResourceConfigSource.ResourceEnabled(version.WithResource("poddisruptionbudgets")) {
|
if apiResourceConfigSource.ResourceEnabled(version.WithResource("poddisruptionbudgets")) {
|
||||||
|
@@ -41,6 +41,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -30,6 +30,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apis/rbac"
|
"k8s.io/kubernetes/pkg/apis/rbac"
|
||||||
rbacapiv1alpha1 "k8s.io/kubernetes/pkg/apis/rbac/v1alpha1"
|
rbacapiv1alpha1 "k8s.io/kubernetes/pkg/apis/rbac/v1alpha1"
|
||||||
@@ -59,7 +60,7 @@ type RESTStorageProvider struct {
|
|||||||
|
|
||||||
var _ genericapiserver.PostStartHookProvider = RESTStorageProvider{}
|
var _ genericapiserver.PostStartHookProvider = RESTStorageProvider{}
|
||||||
|
|
||||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(rbac.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(rbac.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||||
|
|
||||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(rbacapiv1alpha1.SchemeGroupVersion) {
|
if apiResourceConfigSource.AnyResourcesForVersionEnabled(rbacapiv1alpha1.SchemeGroupVersion) {
|
||||||
@@ -74,7 +75,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapise
|
|||||||
return apiGroupInfo, true
|
return apiGroupInfo, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) storage(version schema.GroupVersion, apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) storage(version schema.GroupVersion, apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
once := new(sync.Once)
|
once := new(sync.Once)
|
||||||
var (
|
var (
|
||||||
authorizationRuleResolver rbacregistryvalidation.AuthorizationRuleResolver
|
authorizationRuleResolver rbacregistryvalidation.AuthorizationRuleResolver
|
||||||
|
@@ -19,6 +19,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -20,6 +20,7 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
storageapi "k8s.io/kubernetes/pkg/apis/storage"
|
storageapi "k8s.io/kubernetes/pkg/apis/storage"
|
||||||
storageapiv1beta1 "k8s.io/kubernetes/pkg/apis/storage/v1beta1"
|
storageapiv1beta1 "k8s.io/kubernetes/pkg/apis/storage/v1beta1"
|
||||||
@@ -29,7 +30,7 @@ import (
|
|||||||
type RESTStorageProvider struct {
|
type RESTStorageProvider struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) (genericapiserver.APIGroupInfo, bool) {
|
||||||
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(storageapi.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
apiGroupInfo := genericapiserver.NewDefaultAPIGroupInfo(storageapi.GroupName, api.Registry, api.Scheme, api.ParameterCodec, api.Codecs)
|
||||||
|
|
||||||
if apiResourceConfigSource.AnyResourcesForVersionEnabled(storageapiv1beta1.SchemeGroupVersion) {
|
if apiResourceConfigSource.AnyResourcesForVersionEnabled(storageapiv1beta1.SchemeGroupVersion) {
|
||||||
@@ -40,7 +41,7 @@ func (p RESTStorageProvider) NewRESTStorage(apiResourceConfigSource genericapise
|
|||||||
return apiGroupInfo, true
|
return apiGroupInfo, true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource genericapiserver.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorage.APIResourceConfigSource, restOptionsGetter generic.RESTOptionsGetter) map[string]rest.Storage {
|
||||||
version := storageapiv1beta1.SchemeGroupVersion
|
version := storageapiv1beta1.SchemeGroupVersion
|
||||||
|
|
||||||
storage := map[string]rest.Storage{}
|
storage := map[string]rest.Storage{}
|
||||||
|
@@ -131,7 +131,8 @@ type Config struct {
|
|||||||
OpenAPIConfig *openapicommon.Config
|
OpenAPIConfig *openapicommon.Config
|
||||||
// SwaggerConfig will be used in generating Swagger spec. This is nil by default. Use DefaultSwaggerConfig for "working" defaults.
|
// SwaggerConfig will be used in generating Swagger spec. This is nil by default. Use DefaultSwaggerConfig for "working" defaults.
|
||||||
SwaggerConfig *swagger.Config
|
SwaggerConfig *swagger.Config
|
||||||
// RESTOptionsGetter is used to construct "normal" RESTStorage types
|
|
||||||
|
// RESTOptionsGetter is used to construct RESTStorage types via the generic registry.
|
||||||
RESTOptionsGetter genericregistry.RESTOptionsGetter
|
RESTOptionsGetter genericregistry.RESTOptionsGetter
|
||||||
|
|
||||||
// If specified, requests will be allocated a random timeout between this value, and twice this value.
|
// If specified, requests will be allocated a random timeout between this value, and twice this value.
|
||||||
|
@@ -21,11 +21,11 @@ import (
|
|||||||
|
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apiserver/pkg/registry/generic"
|
"k8s.io/apiserver/pkg/registry/generic"
|
||||||
"k8s.io/apiserver/pkg/registry/generic/registry"
|
genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
|
||||||
"k8s.io/apiserver/pkg/server"
|
"k8s.io/apiserver/pkg/server"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -42,16 +42,9 @@ type EtcdOptions struct {
|
|||||||
EnableWatchCache bool
|
EnableWatchCache bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewEtcdOptions(prefix string, copier runtime.ObjectCopier, codec runtime.Codec) *EtcdOptions {
|
func NewEtcdOptions(backendConfig *storagebackend.Config) *EtcdOptions {
|
||||||
return &EtcdOptions{
|
return &EtcdOptions{
|
||||||
StorageConfig: storagebackend.Config{
|
StorageConfig: *backendConfig,
|
||||||
Prefix: prefix,
|
|
||||||
// Default cache size to 0 - if unset, its size will be set based on target
|
|
||||||
// memory usage.
|
|
||||||
DeserializationCacheSize: 0,
|
|
||||||
Copier: copier,
|
|
||||||
Codec: codec,
|
|
||||||
},
|
|
||||||
DefaultStorageMediaType: "application/json",
|
DefaultStorageMediaType: "application/json",
|
||||||
DeleteCollectionWorkers: 1,
|
DeleteCollectionWorkers: 1,
|
||||||
EnableGarbageCollection: true,
|
EnableGarbageCollection: true,
|
||||||
@@ -114,28 +107,53 @@ func (s *EtcdOptions) AddFlags(fs *pflag.FlagSet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *EtcdOptions) ApplyTo(c *server.Config) error {
|
func (s *EtcdOptions) ApplyTo(c *server.Config) error {
|
||||||
c.RESTOptionsGetter = &restOptionsFactory{options: s}
|
c.RESTOptionsGetter = &simpleRestOptionsFactory{Options: *s}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// restOptionsFactory is a default implementation of a RESTOptionsGetter
|
func (s *EtcdOptions) ApplyWithStorageFactoryTo(factory serverstorage.StorageFactory, c *server.Config) error {
|
||||||
// This will work well for most aggregated API servers. The legacy kube server needs more customization
|
c.RESTOptionsGetter = &storageFactoryRestOptionsFactory{Options: *s, StorageFactory: factory}
|
||||||
type restOptionsFactory struct {
|
return nil
|
||||||
options *EtcdOptions
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *restOptionsFactory) GetRESTOptions(resource schema.GroupResource) (generic.RESTOptions, error) {
|
type simpleRestOptionsFactory struct {
|
||||||
|
Options EtcdOptions
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *simpleRestOptionsFactory) GetRESTOptions(resource schema.GroupResource) (generic.RESTOptions, error) {
|
||||||
ret := generic.RESTOptions{
|
ret := generic.RESTOptions{
|
||||||
StorageConfig: &f.options.StorageConfig,
|
StorageConfig: &f.Options.StorageConfig,
|
||||||
Decorator: registry.StorageWithCacher,
|
Decorator: generic.UndecoratedStorage,
|
||||||
DeleteCollectionWorkers: f.options.DeleteCollectionWorkers,
|
EnableGarbageCollection: f.Options.EnableGarbageCollection,
|
||||||
EnableGarbageCollection: f.options.EnableGarbageCollection,
|
DeleteCollectionWorkers: f.Options.DeleteCollectionWorkers,
|
||||||
ResourcePrefix: f.options.StorageConfig.Prefix + "/" + resource.Group + "/" + resource.Resource,
|
ResourcePrefix: f.Options.StorageConfig.Prefix + "/" + resource.Group + "/" + resource.Resource,
|
||||||
|
}
|
||||||
|
if f.Options.EnableWatchCache {
|
||||||
|
ret.Decorator = genericregistry.StorageWithCacher
|
||||||
|
}
|
||||||
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if !f.options.EnableWatchCache {
|
type storageFactoryRestOptionsFactory struct {
|
||||||
ret.Decorator = generic.UndecoratedStorage
|
Options EtcdOptions
|
||||||
|
StorageFactory serverstorage.StorageFactory
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *storageFactoryRestOptionsFactory) GetRESTOptions(resource schema.GroupResource) (generic.RESTOptions, error) {
|
||||||
|
storageConfig, err := f.StorageFactory.NewConfig(resource)
|
||||||
|
if err != nil {
|
||||||
|
return generic.RESTOptions{}, fmt.Errorf("unable to find storage destination for %v, due to %v", resource, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
ret := generic.RESTOptions{
|
||||||
|
StorageConfig: storageConfig,
|
||||||
|
Decorator: generic.UndecoratedStorage,
|
||||||
|
DeleteCollectionWorkers: f.Options.DeleteCollectionWorkers,
|
||||||
|
EnableGarbageCollection: f.Options.EnableGarbageCollection,
|
||||||
|
ResourcePrefix: f.StorageFactory.ResourcePrefix(resource),
|
||||||
|
}
|
||||||
|
if f.Options.EnableWatchCache {
|
||||||
|
ret.Decorator = genericregistry.StorageWithCacher
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret, nil
|
return ret, nil
|
||||||
|
@@ -21,6 +21,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apiserver/pkg/server"
|
"k8s.io/apiserver/pkg/server"
|
||||||
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RecommendedOptions contains the recommended options for running an API server
|
// RecommendedOptions contains the recommended options for running an API server
|
||||||
@@ -36,7 +37,7 @@ type RecommendedOptions struct {
|
|||||||
|
|
||||||
func NewRecommendedOptions(prefix string, copier runtime.ObjectCopier, codec runtime.Codec) *RecommendedOptions {
|
func NewRecommendedOptions(prefix string, copier runtime.ObjectCopier, codec runtime.Codec) *RecommendedOptions {
|
||||||
return &RecommendedOptions{
|
return &RecommendedOptions{
|
||||||
Etcd: NewEtcdOptions(prefix, copier, codec),
|
Etcd: NewEtcdOptions(storagebackend.NewDefaultConfig(prefix, copier, codec)),
|
||||||
SecureServing: NewSecureServingOptions(),
|
SecureServing: NewSecureServingOptions(),
|
||||||
Authentication: NewDelegatingAuthenticationOptions(),
|
Authentication: NewDelegatingAuthenticationOptions(),
|
||||||
Authorization: NewDelegatingAuthorizationOptions(),
|
Authorization: NewDelegatingAuthorizationOptions(),
|
||||||
|
18
staging/src/k8s.io/apiserver/pkg/server/storage/doc.go
Normal file
18
staging/src/k8s.io/apiserver/pkg/server/storage/doc.go
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 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 storage contains the plumbing to setup the etcd storage of the apiserver.
|
||||||
|
package storage
|
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package server
|
package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package server
|
package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package server
|
package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/apimachinery/pkg/apimachinery/registered"
|
"k8s.io/apimachinery/pkg/apimachinery/registered"
|
@@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
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 storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"mime"
|
||||||
|
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/serializer/recognizer"
|
||||||
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
|
|
||||||
|
"github.com/golang/glog"
|
||||||
|
)
|
||||||
|
|
||||||
|
// StorageCodecConfig are the arguments passed to newStorageCodecFn
|
||||||
|
type StorageCodecConfig struct {
|
||||||
|
StorageMediaType string
|
||||||
|
StorageSerializer runtime.StorageSerializer
|
||||||
|
StorageVersion schema.GroupVersion
|
||||||
|
MemoryVersion schema.GroupVersion
|
||||||
|
Config storagebackend.Config
|
||||||
|
|
||||||
|
EncoderDecoratorFn func(runtime.Encoder) runtime.Encoder
|
||||||
|
DecoderDecoratorFn func([]runtime.Decoder) []runtime.Decoder
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewStorageCodec assembles a storage codec for the provided storage media type, the provided serializer, and the requested
|
||||||
|
// storage and memory versions.
|
||||||
|
func NewStorageCodec(opts StorageCodecConfig) (runtime.Codec, error) {
|
||||||
|
mediaType, _, err := mime.ParseMediaType(opts.StorageMediaType)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("%q is not a valid mime-type", opts.StorageMediaType)
|
||||||
|
}
|
||||||
|
serializer, ok := runtime.SerializerInfoForMediaType(opts.StorageSerializer.SupportedMediaTypes(), mediaType)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("unable to find serializer for %q", opts.StorageMediaType)
|
||||||
|
}
|
||||||
|
|
||||||
|
s := serializer.Serializer
|
||||||
|
|
||||||
|
// etcd2 only supports string data - we must wrap any result before returning
|
||||||
|
// TODO: storagebackend should return a boolean indicating whether it supports binary data
|
||||||
|
if !serializer.EncodesAsText && (opts.Config.Type == storagebackend.StorageTypeUnset || opts.Config.Type == storagebackend.StorageTypeETCD2) {
|
||||||
|
glog.V(4).Infof("Wrapping the underlying binary storage serializer with a base64 encoding for etcd2")
|
||||||
|
s = runtime.NewBase64Serializer(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Give callers the opportunity to wrap encoders and decoders. For decoders, each returned decoder will
|
||||||
|
// be passed to the recognizer so that multiple decoders are available.
|
||||||
|
var encoder runtime.Encoder = s
|
||||||
|
if opts.EncoderDecoratorFn != nil {
|
||||||
|
encoder = opts.EncoderDecoratorFn(encoder)
|
||||||
|
}
|
||||||
|
decoders := []runtime.Decoder{s, opts.StorageSerializer.UniversalDeserializer()}
|
||||||
|
if opts.DecoderDecoratorFn != nil {
|
||||||
|
decoders = opts.DecoderDecoratorFn(decoders)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the storage receives the correct version.
|
||||||
|
encoder = opts.StorageSerializer.EncoderForVersion(
|
||||||
|
encoder,
|
||||||
|
runtime.NewMultiGroupVersioner(
|
||||||
|
opts.StorageVersion,
|
||||||
|
schema.GroupKind{Group: opts.StorageVersion.Group},
|
||||||
|
schema.GroupKind{Group: opts.MemoryVersion.Group},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
decoder := opts.StorageSerializer.DecoderToVersion(
|
||||||
|
recognizer.NewDecoder(decoders...),
|
||||||
|
runtime.NewMultiGroupVersioner(
|
||||||
|
opts.MemoryVersion,
|
||||||
|
schema.GroupKind{Group: opts.MemoryVersion.Group},
|
||||||
|
schema.GroupKind{Group: opts.StorageVersion.Group},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
return runtime.NewCodec(encoder, decoder), nil
|
||||||
|
}
|
@@ -14,20 +14,17 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package server
|
package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"mime"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/runtime/serializer/recognizer"
|
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// StorageFactory is the interface to locate the storage for a given GroupResource
|
// StorageFactory is the interface to locate the storage for a given GroupResource
|
||||||
@@ -77,18 +74,6 @@ type DefaultStorageFactory struct {
|
|||||||
newStorageCodecFn func(opts StorageCodecConfig) (codec runtime.Codec, err error)
|
newStorageCodecFn func(opts StorageCodecConfig) (codec runtime.Codec, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// StorageCodecConfig are the arguments passed to newStorageCodecFn
|
|
||||||
type StorageCodecConfig struct {
|
|
||||||
StorageMediaType string
|
|
||||||
StorageSerializer runtime.StorageSerializer
|
|
||||||
StorageVersion schema.GroupVersion
|
|
||||||
MemoryVersion schema.GroupVersion
|
|
||||||
Config storagebackend.Config
|
|
||||||
|
|
||||||
EncoderDecoratorFn func(runtime.Encoder) runtime.Encoder
|
|
||||||
DecoderDecoratorFn func([]runtime.Decoder) []runtime.Decoder
|
|
||||||
}
|
|
||||||
|
|
||||||
type groupResourceOverrides struct {
|
type groupResourceOverrides struct {
|
||||||
// etcdLocation contains the list of "special" locations that are used for particular GroupResources
|
// etcdLocation contains the list of "special" locations that are used for particular GroupResources
|
||||||
// These are merged on top of the StorageConfig when requesting the storage.Interface for a given GroupResource
|
// These are merged on top of the StorageConfig when requesting the storage.Interface for a given GroupResource
|
||||||
@@ -278,59 +263,6 @@ func (s *DefaultStorageFactory) Backends() []string {
|
|||||||
return backends.List()
|
return backends.List()
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewStorageCodec assembles a storage codec for the provided storage media type, the provided serializer, and the requested
|
|
||||||
// storage and memory versions.
|
|
||||||
func NewStorageCodec(opts StorageCodecConfig) (runtime.Codec, error) {
|
|
||||||
mediaType, _, err := mime.ParseMediaType(opts.StorageMediaType)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("%q is not a valid mime-type", opts.StorageMediaType)
|
|
||||||
}
|
|
||||||
serializer, ok := runtime.SerializerInfoForMediaType(opts.StorageSerializer.SupportedMediaTypes(), mediaType)
|
|
||||||
if !ok {
|
|
||||||
return nil, fmt.Errorf("unable to find serializer for %q", opts.StorageMediaType)
|
|
||||||
}
|
|
||||||
|
|
||||||
s := serializer.Serializer
|
|
||||||
|
|
||||||
// etcd2 only supports string data - we must wrap any result before returning
|
|
||||||
// TODO: storagebackend should return a boolean indicating whether it supports binary data
|
|
||||||
if !serializer.EncodesAsText && (opts.Config.Type == storagebackend.StorageTypeUnset || opts.Config.Type == storagebackend.StorageTypeETCD2) {
|
|
||||||
glog.V(4).Infof("Wrapping the underlying binary storage serializer with a base64 encoding for etcd2")
|
|
||||||
s = runtime.NewBase64Serializer(s)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Give callers the opportunity to wrap encoders and decoders. For decoders, each returned decoder will
|
|
||||||
// be passed to the recognizer so that multiple decoders are available.
|
|
||||||
var encoder runtime.Encoder = s
|
|
||||||
if opts.EncoderDecoratorFn != nil {
|
|
||||||
encoder = opts.EncoderDecoratorFn(encoder)
|
|
||||||
}
|
|
||||||
decoders := []runtime.Decoder{s, opts.StorageSerializer.UniversalDeserializer()}
|
|
||||||
if opts.DecoderDecoratorFn != nil {
|
|
||||||
decoders = opts.DecoderDecoratorFn(decoders)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure the storage receives the correct version.
|
|
||||||
encoder = opts.StorageSerializer.EncoderForVersion(
|
|
||||||
encoder,
|
|
||||||
runtime.NewMultiGroupVersioner(
|
|
||||||
opts.StorageVersion,
|
|
||||||
schema.GroupKind{Group: opts.StorageVersion.Group},
|
|
||||||
schema.GroupKind{Group: opts.MemoryVersion.Group},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
decoder := opts.StorageSerializer.DecoderToVersion(
|
|
||||||
recognizer.NewDecoder(decoders...),
|
|
||||||
runtime.NewMultiGroupVersioner(
|
|
||||||
opts.MemoryVersion,
|
|
||||||
schema.GroupKind{Group: opts.MemoryVersion.Group},
|
|
||||||
schema.GroupKind{Group: opts.StorageVersion.Group},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
return runtime.NewCodec(encoder, decoder), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *DefaultStorageFactory) ResourcePrefix(groupResource schema.GroupResource) string {
|
func (s *DefaultStorageFactory) ResourcePrefix(groupResource schema.GroupResource) string {
|
||||||
chosenStorageResource := s.getStorageGroupResource(groupResource)
|
chosenStorageResource := s.getStorageGroupResource(groupResource)
|
||||||
groupOverride := s.Overrides[getAllResourcesAlias(chosenStorageResource)]
|
groupOverride := s.Overrides[getAllResourcesAlias(chosenStorageResource)]
|
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package server
|
package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
@@ -23,20 +23,36 @@ import (
|
|||||||
|
|
||||||
"k8s.io/apimachinery/pkg/apimachinery/announced"
|
"k8s.io/apimachinery/pkg/apimachinery/announced"
|
||||||
"k8s.io/apimachinery/pkg/apimachinery/registered"
|
"k8s.io/apimachinery/pkg/apimachinery/registered"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
||||||
"k8s.io/apiserver/pkg/apis/example"
|
|
||||||
exampleinstall "k8s.io/apiserver/pkg/apis/example/install"
|
exampleinstall "k8s.io/apiserver/pkg/apis/example/install"
|
||||||
examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
|
|
||||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
|
"k8s.io/apiserver/pkg/apis/example"
|
||||||
|
examplev1 "k8s.io/apiserver/pkg/apis/example/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
v1GroupVersion = schema.GroupVersion{Group: "", Version: "v1"}
|
||||||
|
|
||||||
registry = registered.NewOrDie(os.Getenv("KUBE_API_VERSIONS"))
|
registry = registered.NewOrDie(os.Getenv("KUBE_API_VERSIONS"))
|
||||||
announce = make(announced.APIGroupFactoryRegistry)
|
announce = make(announced.APIGroupFactoryRegistry)
|
||||||
|
scheme = runtime.NewScheme()
|
||||||
|
codecs = serializer.NewCodecFactory(scheme)
|
||||||
|
parameterCodec = runtime.NewParameterCodec(scheme)
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
metav1.AddToGroupVersion(scheme, metav1.SchemeGroupVersion)
|
||||||
|
scheme.AddUnversionedTypes(v1GroupVersion,
|
||||||
|
&metav1.Status{},
|
||||||
|
&metav1.APIVersions{},
|
||||||
|
&metav1.APIGroupList{},
|
||||||
|
&metav1.APIGroup{},
|
||||||
|
&metav1.APIResourceList{},
|
||||||
|
)
|
||||||
|
|
||||||
exampleinstall.Install(announce, registry, scheme)
|
exampleinstall.Install(announce, registry, scheme)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,7 +92,7 @@ func (n *fakeNegotiater) DecoderToVersion(serializer runtime.Decoder, gv runtime
|
|||||||
return n.serializer
|
return n.serializer
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDefaultStorageFactory(t *testing.T) {
|
func TestConfigurableStorageFactory(t *testing.T) {
|
||||||
ns := &fakeNegotiater{types: []string{"test/test"}}
|
ns := &fakeNegotiater{types: []string{"test/test"}}
|
||||||
f := NewDefaultStorageFactory(storagebackend.Config{}, "test/test", ns, NewDefaultResourceEncodingConfig(registry), NewResourceConfig())
|
f := NewDefaultStorageFactory(storagebackend.Config{}, "test/test", ns, NewDefaultResourceEncodingConfig(registry), NewResourceConfig())
|
||||||
f.AddCohabitatingResources(example.Resource("test"), schema.GroupResource{Resource: "test2", Group: "2"})
|
f.AddCohabitatingResources(example.Resource("test"), schema.GroupResource{Resource: "test2", Group: "2"})
|
@@ -46,3 +46,14 @@ type Config struct {
|
|||||||
Codec runtime.Codec
|
Codec runtime.Codec
|
||||||
Copier runtime.ObjectCopier
|
Copier runtime.ObjectCopier
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewDefaultConfig(prefix string, copier runtime.ObjectCopier, codec runtime.Codec) *Config {
|
||||||
|
return &Config{
|
||||||
|
Prefix: prefix,
|
||||||
|
// Default cache size to 0 - if unset, its size will be set based on target
|
||||||
|
// memory usage.
|
||||||
|
DeserializationCacheSize: 0,
|
||||||
|
Copier: copier,
|
||||||
|
Codec: codec,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -34,7 +34,6 @@ go_library(
|
|||||||
"//pkg/controller:go_default_library",
|
"//pkg/controller:go_default_library",
|
||||||
"//pkg/controller/replication:go_default_library",
|
"//pkg/controller/replication:go_default_library",
|
||||||
"//pkg/generated/openapi:go_default_library",
|
"//pkg/generated/openapi:go_default_library",
|
||||||
"//pkg/kubeapiserver:go_default_library",
|
|
||||||
"//pkg/kubectl:go_default_library",
|
"//pkg/kubectl:go_default_library",
|
||||||
"//pkg/kubelet/client:go_default_library",
|
"//pkg/kubelet/client:go_default_library",
|
||||||
"//pkg/master:go_default_library",
|
"//pkg/master:go_default_library",
|
||||||
@@ -61,6 +60,8 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/authorization/authorizerfactory",
|
"//vendor:k8s.io/apiserver/pkg/authorization/authorizerfactory",
|
||||||
"//vendor:k8s.io/apiserver/pkg/authorization/union",
|
"//vendor:k8s.io/apiserver/pkg/authorization/union",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/options",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
||||||
"//vendor:k8s.io/client-go/rest",
|
"//vendor:k8s.io/client-go/rest",
|
||||||
"//vendor:k8s.io/client-go/tools/record",
|
"//vendor:k8s.io/client-go/tools/record",
|
||||||
|
@@ -26,6 +26,9 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-openapi/spec"
|
||||||
|
"github.com/pborman/uuid"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
@@ -40,6 +43,8 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/authorization/authorizerfactory"
|
"k8s.io/apiserver/pkg/authorization/authorizerfactory"
|
||||||
authorizerunion "k8s.io/apiserver/pkg/authorization/union"
|
authorizerunion "k8s.io/apiserver/pkg/authorization/union"
|
||||||
genericapiserver "k8s.io/apiserver/pkg/server"
|
genericapiserver "k8s.io/apiserver/pkg/server"
|
||||||
|
"k8s.io/apiserver/pkg/server/options"
|
||||||
|
serverstorage "k8s.io/apiserver/pkg/server/storage"
|
||||||
"k8s.io/apiserver/pkg/storage/storagebackend"
|
"k8s.io/apiserver/pkg/storage/storagebackend"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/tools/record"
|
"k8s.io/client-go/tools/record"
|
||||||
@@ -61,16 +66,12 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/controller"
|
"k8s.io/kubernetes/pkg/controller"
|
||||||
replicationcontroller "k8s.io/kubernetes/pkg/controller/replication"
|
replicationcontroller "k8s.io/kubernetes/pkg/controller/replication"
|
||||||
"k8s.io/kubernetes/pkg/generated/openapi"
|
"k8s.io/kubernetes/pkg/generated/openapi"
|
||||||
"k8s.io/kubernetes/pkg/kubeapiserver"
|
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
kubeletclient "k8s.io/kubernetes/pkg/kubelet/client"
|
kubeletclient "k8s.io/kubernetes/pkg/kubelet/client"
|
||||||
"k8s.io/kubernetes/pkg/master"
|
"k8s.io/kubernetes/pkg/master"
|
||||||
"k8s.io/kubernetes/pkg/util/env"
|
"k8s.io/kubernetes/pkg/util/env"
|
||||||
"k8s.io/kubernetes/pkg/version"
|
"k8s.io/kubernetes/pkg/version"
|
||||||
"k8s.io/kubernetes/plugin/pkg/admission/admit"
|
"k8s.io/kubernetes/plugin/pkg/admission/admit"
|
||||||
|
|
||||||
"github.com/go-openapi/spec"
|
|
||||||
"github.com/pborman/uuid"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -309,53 +310,50 @@ func GetEtcdURLFromEnv() string {
|
|||||||
|
|
||||||
// Returns a basic master config.
|
// Returns a basic master config.
|
||||||
func NewMasterConfig() *master.Config {
|
func NewMasterConfig() *master.Config {
|
||||||
config := storagebackend.Config{
|
|
||||||
ServerList: []string{GetEtcdURLFromEnv()},
|
|
||||||
// This causes the integration tests to exercise the etcd
|
// This causes the integration tests to exercise the etcd
|
||||||
// prefix code, so please don't change without ensuring
|
// prefix code, so please don't change without ensuring
|
||||||
// sufficient coverage in other ways.
|
// sufficient coverage in other ways.
|
||||||
Prefix: uuid.New(),
|
etcdOptions := options.NewEtcdOptions(storagebackend.NewDefaultConfig(uuid.New(), api.Scheme, nil))
|
||||||
Copier: api.Scheme,
|
etcdOptions.StorageConfig.ServerList = []string{GetEtcdURLFromEnv()}
|
||||||
}
|
|
||||||
|
|
||||||
info, _ := runtime.SerializerInfoForMediaType(api.Codecs.SupportedMediaTypes(), runtime.ContentTypeJSON)
|
info, _ := runtime.SerializerInfoForMediaType(api.Codecs.SupportedMediaTypes(), runtime.ContentTypeJSON)
|
||||||
ns := NewSingleContentTypeSerializer(api.Scheme, info)
|
ns := NewSingleContentTypeSerializer(api.Scheme, info)
|
||||||
|
|
||||||
storageFactory := genericapiserver.NewDefaultStorageFactory(config, runtime.ContentTypeJSON, ns, genericapiserver.NewDefaultResourceEncodingConfig(api.Registry), master.DefaultAPIResourceConfigSource())
|
storageFactory := serverstorage.NewDefaultStorageFactory(etcdOptions.StorageConfig, runtime.ContentTypeJSON, ns, serverstorage.NewDefaultResourceEncodingConfig(api.Registry), master.DefaultAPIResourceConfigSource())
|
||||||
storageFactory.SetSerializer(
|
storageFactory.SetSerializer(
|
||||||
schema.GroupResource{Group: v1.GroupName, Resource: genericapiserver.AllResources},
|
schema.GroupResource{Group: v1.GroupName, Resource: serverstorage.AllResources},
|
||||||
"",
|
"",
|
||||||
ns)
|
ns)
|
||||||
storageFactory.SetSerializer(
|
storageFactory.SetSerializer(
|
||||||
schema.GroupResource{Group: autoscaling.GroupName, Resource: genericapiserver.AllResources},
|
schema.GroupResource{Group: autoscaling.GroupName, Resource: serverstorage.AllResources},
|
||||||
"",
|
"",
|
||||||
ns)
|
ns)
|
||||||
storageFactory.SetSerializer(
|
storageFactory.SetSerializer(
|
||||||
schema.GroupResource{Group: batch.GroupName, Resource: genericapiserver.AllResources},
|
schema.GroupResource{Group: batch.GroupName, Resource: serverstorage.AllResources},
|
||||||
"",
|
"",
|
||||||
ns)
|
ns)
|
||||||
storageFactory.SetSerializer(
|
storageFactory.SetSerializer(
|
||||||
schema.GroupResource{Group: apps.GroupName, Resource: genericapiserver.AllResources},
|
schema.GroupResource{Group: apps.GroupName, Resource: serverstorage.AllResources},
|
||||||
"",
|
"",
|
||||||
ns)
|
ns)
|
||||||
storageFactory.SetSerializer(
|
storageFactory.SetSerializer(
|
||||||
schema.GroupResource{Group: extensions.GroupName, Resource: genericapiserver.AllResources},
|
schema.GroupResource{Group: extensions.GroupName, Resource: serverstorage.AllResources},
|
||||||
"",
|
"",
|
||||||
ns)
|
ns)
|
||||||
storageFactory.SetSerializer(
|
storageFactory.SetSerializer(
|
||||||
schema.GroupResource{Group: policy.GroupName, Resource: genericapiserver.AllResources},
|
schema.GroupResource{Group: policy.GroupName, Resource: serverstorage.AllResources},
|
||||||
"",
|
"",
|
||||||
ns)
|
ns)
|
||||||
storageFactory.SetSerializer(
|
storageFactory.SetSerializer(
|
||||||
schema.GroupResource{Group: rbac.GroupName, Resource: genericapiserver.AllResources},
|
schema.GroupResource{Group: rbac.GroupName, Resource: serverstorage.AllResources},
|
||||||
"",
|
"",
|
||||||
ns)
|
ns)
|
||||||
storageFactory.SetSerializer(
|
storageFactory.SetSerializer(
|
||||||
schema.GroupResource{Group: certificates.GroupName, Resource: genericapiserver.AllResources},
|
schema.GroupResource{Group: certificates.GroupName, Resource: serverstorage.AllResources},
|
||||||
"",
|
"",
|
||||||
ns)
|
ns)
|
||||||
storageFactory.SetSerializer(
|
storageFactory.SetSerializer(
|
||||||
schema.GroupResource{Group: storage.GroupName, Resource: genericapiserver.AllResources},
|
schema.GroupResource{Group: storage.GroupName, Resource: serverstorage.AllResources},
|
||||||
"",
|
"",
|
||||||
ns)
|
ns)
|
||||||
|
|
||||||
@@ -365,11 +363,10 @@ func NewMasterConfig() *master.Config {
|
|||||||
genericConfig.Authorizer = authorizerfactory.NewAlwaysAllowAuthorizer()
|
genericConfig.Authorizer = authorizerfactory.NewAlwaysAllowAuthorizer()
|
||||||
genericConfig.AdmissionControl = admit.NewAlwaysAdmit()
|
genericConfig.AdmissionControl = admit.NewAlwaysAdmit()
|
||||||
genericConfig.EnableMetrics = true
|
genericConfig.EnableMetrics = true
|
||||||
genericConfig.RESTOptionsGetter = &kubeapiserver.RESTOptionsFactory{
|
|
||||||
StorageFactory: storageFactory,
|
err := etcdOptions.ApplyWithStorageFactoryTo(storageFactory, genericConfig)
|
||||||
EnableWatchCache: true,
|
if err != nil {
|
||||||
EnableGarbageCollection: true,
|
panic(err)
|
||||||
DeleteCollectionWorkers: 1,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return &master.Config{
|
return &master.Config{
|
||||||
|
59
vendor/BUILD
vendored
59
vendor/BUILD
vendored
@@ -9061,10 +9061,7 @@ go_library(
|
|||||||
"k8s.io/apiserver/pkg/server/genericapiserver.go",
|
"k8s.io/apiserver/pkg/server/genericapiserver.go",
|
||||||
"k8s.io/apiserver/pkg/server/healthz.go",
|
"k8s.io/apiserver/pkg/server/healthz.go",
|
||||||
"k8s.io/apiserver/pkg/server/hooks.go",
|
"k8s.io/apiserver/pkg/server/hooks.go",
|
||||||
"k8s.io/apiserver/pkg/server/resource_config.go",
|
|
||||||
"k8s.io/apiserver/pkg/server/resource_encoding_config.go",
|
|
||||||
"k8s.io/apiserver/pkg/server/serve.go",
|
"k8s.io/apiserver/pkg/server/serve.go",
|
||||||
"k8s.io/apiserver/pkg/server/storage_factory.go",
|
|
||||||
],
|
],
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
deps = [
|
||||||
@@ -9082,7 +9079,6 @@ go_library(
|
|||||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
|
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/runtime/serializer",
|
"//vendor:k8s.io/apimachinery/pkg/runtime/serializer",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
|
|
||||||
"//vendor:k8s.io/apimachinery/pkg/util/net",
|
"//vendor:k8s.io/apimachinery/pkg/util/net",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/util/runtime",
|
"//vendor:k8s.io/apimachinery/pkg/util/runtime",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/util/sets",
|
"//vendor:k8s.io/apimachinery/pkg/util/sets",
|
||||||
@@ -9107,7 +9103,6 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/server/healthz",
|
"//vendor:k8s.io/apiserver/pkg/server/healthz",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server/mux",
|
"//vendor:k8s.io/apiserver/pkg/server/mux",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server/routes",
|
"//vendor:k8s.io/apiserver/pkg/server/routes",
|
||||||
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
|
||||||
"//vendor:k8s.io/client-go/rest",
|
"//vendor:k8s.io/client-go/rest",
|
||||||
"//vendor:k8s.io/client-go/util/cert",
|
"//vendor:k8s.io/client-go/util/cert",
|
||||||
],
|
],
|
||||||
@@ -14145,6 +14140,7 @@ go_library(
|
|||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/generic/registry",
|
"//vendor:k8s.io/apiserver/pkg/registry/generic/registry",
|
||||||
"//vendor:k8s.io/apiserver/pkg/server",
|
"//vendor:k8s.io/apiserver/pkg/server",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/server/storage",
|
||||||
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
||||||
"//vendor:k8s.io/apiserver/pkg/util/feature",
|
"//vendor:k8s.io/apiserver/pkg/util/feature",
|
||||||
"//vendor:k8s.io/apiserver/pkg/util/flag",
|
"//vendor:k8s.io/apiserver/pkg/util/flag",
|
||||||
@@ -14808,11 +14804,7 @@ go_library(
|
|||||||
|
|
||||||
go_test(
|
go_test(
|
||||||
name = "k8s.io/apiserver/pkg/server_test",
|
name = "k8s.io/apiserver/pkg/server_test",
|
||||||
srcs = [
|
srcs = ["k8s.io/apiserver/pkg/server/genericapiserver_test.go"],
|
||||||
"k8s.io/apiserver/pkg/server/genericapiserver_test.go",
|
|
||||||
"k8s.io/apiserver/pkg/server/resource_config_test.go",
|
|
||||||
"k8s.io/apiserver/pkg/server/storage_factory_test.go",
|
|
||||||
],
|
|
||||||
library = ":k8s.io/apiserver/pkg/server",
|
library = ":k8s.io/apiserver/pkg/server",
|
||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
deps = [
|
||||||
@@ -14821,8 +14813,6 @@ go_test(
|
|||||||
"//vendor:github.com/stretchr/testify/assert",
|
"//vendor:github.com/stretchr/testify/assert",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/api/meta",
|
"//vendor:k8s.io/apimachinery/pkg/api/meta",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/apimachinery",
|
"//vendor:k8s.io/apimachinery/pkg/apimachinery",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/apimachinery/announced",
|
|
||||||
"//vendor:k8s.io/apimachinery/pkg/apimachinery/registered",
|
|
||||||
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
|
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
|
||||||
@@ -14831,14 +14821,12 @@ go_test(
|
|||||||
"//vendor:k8s.io/apimachinery/pkg/util/sets",
|
"//vendor:k8s.io/apimachinery/pkg/util/sets",
|
||||||
"//vendor:k8s.io/apimachinery/pkg/version",
|
"//vendor:k8s.io/apimachinery/pkg/version",
|
||||||
"//vendor:k8s.io/apiserver/pkg/apis/example",
|
"//vendor:k8s.io/apiserver/pkg/apis/example",
|
||||||
"//vendor:k8s.io/apiserver/pkg/apis/example/install",
|
|
||||||
"//vendor:k8s.io/apiserver/pkg/apis/example/v1",
|
"//vendor:k8s.io/apiserver/pkg/apis/example/v1",
|
||||||
"//vendor:k8s.io/apiserver/pkg/authentication/user",
|
"//vendor:k8s.io/apiserver/pkg/authentication/user",
|
||||||
"//vendor:k8s.io/apiserver/pkg/authorization/authorizer",
|
"//vendor:k8s.io/apiserver/pkg/authorization/authorizer",
|
||||||
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
"//vendor:k8s.io/apiserver/pkg/endpoints/request",
|
||||||
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
"//vendor:k8s.io/apiserver/pkg/registry/rest",
|
||||||
"//vendor:k8s.io/apiserver/pkg/storage/etcd/testing",
|
"//vendor:k8s.io/apiserver/pkg/storage/etcd/testing",
|
||||||
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
|
||||||
"//vendor:k8s.io/client-go/pkg/api",
|
"//vendor:k8s.io/client-go/pkg/api",
|
||||||
"//vendor:k8s.io/client-go/rest",
|
"//vendor:k8s.io/client-go/rest",
|
||||||
],
|
],
|
||||||
@@ -16847,3 +16835,46 @@ go_library(
|
|||||||
"//vendor:k8s.io/kube-aggregator/pkg/registry/apiservice",
|
"//vendor:k8s.io/kube-aggregator/pkg/registry/apiservice",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
go_test(
|
||||||
|
name = "k8s.io/apiserver/pkg/server/storage_test",
|
||||||
|
srcs = [
|
||||||
|
"k8s.io/apiserver/pkg/server/storage/resource_config_test.go",
|
||||||
|
"k8s.io/apiserver/pkg/server/storage/storage_factory_test.go",
|
||||||
|
],
|
||||||
|
library = ":k8s.io/apiserver/pkg/server/storage",
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor:k8s.io/apimachinery/pkg/apimachinery/announced",
|
||||||
|
"//vendor:k8s.io/apimachinery/pkg/apimachinery/registered",
|
||||||
|
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
|
||||||
|
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||||
|
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
|
||||||
|
"//vendor:k8s.io/apimachinery/pkg/runtime/serializer",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/apis/example",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/apis/example/install",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/apis/example/v1",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "k8s.io/apiserver/pkg/server/storage",
|
||||||
|
srcs = [
|
||||||
|
"k8s.io/apiserver/pkg/server/storage/doc.go",
|
||||||
|
"k8s.io/apiserver/pkg/server/storage/resource_config.go",
|
||||||
|
"k8s.io/apiserver/pkg/server/storage/resource_encoding_config.go",
|
||||||
|
"k8s.io/apiserver/pkg/server/storage/storage_codec.go",
|
||||||
|
"k8s.io/apiserver/pkg/server/storage/storage_factory.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor:github.com/golang/glog",
|
||||||
|
"//vendor:k8s.io/apimachinery/pkg/apimachinery/registered",
|
||||||
|
"//vendor:k8s.io/apimachinery/pkg/runtime",
|
||||||
|
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
|
||||||
|
"//vendor:k8s.io/apimachinery/pkg/runtime/serializer/recognizer",
|
||||||
|
"//vendor:k8s.io/apimachinery/pkg/util/sets",
|
||||||
|
"//vendor:k8s.io/apiserver/pkg/storage/storagebackend",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
Reference in New Issue
Block a user