add feature enablement options to recommendedoptions

pull/6/head
deads2k 2017-02-07 13:22:38 -05:00
parent 51b5d5a51b
commit cc75d51897
9 changed files with 84 additions and 26 deletions

View File

@ -45,6 +45,7 @@ type ServerRunOptions struct {
SecureServing *genericoptions.SecureServingOptions SecureServing *genericoptions.SecureServingOptions
InsecureServing *genericoptions.ServingOptions InsecureServing *genericoptions.ServingOptions
Audit *genericoptions.AuditLogOptions Audit *genericoptions.AuditLogOptions
Features *genericoptions.FeatureOptions
Authentication *kubeoptions.BuiltInAuthenticationOptions Authentication *kubeoptions.BuiltInAuthenticationOptions
Authorization *kubeoptions.BuiltInAuthorizationOptions Authorization *kubeoptions.BuiltInAuthorizationOptions
CloudProvider *kubeoptions.CloudProviderOptions CloudProvider *kubeoptions.CloudProviderOptions
@ -70,6 +71,7 @@ func NewServerRunOptions() *ServerRunOptions {
SecureServing: genericoptions.NewSecureServingOptions(), SecureServing: genericoptions.NewSecureServingOptions(),
InsecureServing: genericoptions.NewInsecureServingOptions(), InsecureServing: genericoptions.NewInsecureServingOptions(),
Audit: genericoptions.NewAuditLogOptions(), Audit: genericoptions.NewAuditLogOptions(),
Features: genericoptions.NewFeatureOptions(),
Authentication: kubeoptions.NewBuiltInAuthenticationOptions().WithAll(), Authentication: kubeoptions.NewBuiltInAuthenticationOptions().WithAll(),
Authorization: kubeoptions.NewBuiltInAuthorizationOptions(), Authorization: kubeoptions.NewBuiltInAuthorizationOptions(),
CloudProvider: kubeoptions.NewCloudProviderOptions(), CloudProvider: kubeoptions.NewCloudProviderOptions(),
@ -106,6 +108,7 @@ func (s *ServerRunOptions) AddFlags(fs *pflag.FlagSet) {
s.InsecureServing.AddFlags(fs) s.InsecureServing.AddFlags(fs)
s.InsecureServing.AddDeprecatedFlags(fs) s.InsecureServing.AddDeprecatedFlags(fs)
s.Audit.AddFlags(fs) s.Audit.AddFlags(fs)
s.Features.AddFlags(fs)
s.Authentication.AddFlags(fs) s.Authentication.AddFlags(fs)
s.Authorization.AddFlags(fs) s.Authorization.AddFlags(fs)
s.CloudProvider.AddFlags(fs) s.CloudProvider.AddFlags(fs)

View File

@ -28,7 +28,7 @@ func TestAddFlagsFlag(t *testing.T) {
f := pflag.NewFlagSet("addflagstest", pflag.ContinueOnError) f := pflag.NewFlagSet("addflagstest", pflag.ContinueOnError)
s := NewServerRunOptions() s := NewServerRunOptions()
s.AddFlags(f) s.AddFlags(f)
if s.GenericServerRunOptions.EnableSwaggerUI { if s.Features.EnableSwaggerUI {
t.Errorf("Expected s.EnableSwaggerUI to be false by default") t.Errorf("Expected s.EnableSwaggerUI to be false by default")
} }
@ -36,7 +36,7 @@ func TestAddFlagsFlag(t *testing.T) {
"--enable-swagger-ui=true", "--enable-swagger-ui=true",
} }
f.Parse(args) f.Parse(args)
if !s.GenericServerRunOptions.EnableSwaggerUI { if !s.Features.EnableSwaggerUI {
t.Errorf("Expected s.EnableSwaggerUI to be true") t.Errorf("Expected s.EnableSwaggerUI to be true")
} }
} }

View File

@ -123,6 +123,9 @@ func Run(s *options.ServerRunOptions) error {
if err := s.Audit.ApplyTo(genericConfig); err != nil { if err := s.Audit.ApplyTo(genericConfig); err != nil {
return err return err
} }
if err := s.Features.ApplyTo(genericConfig); err != nil {
return err
}
capabilities.Initialize(capabilities.Capabilities{ capabilities.Initialize(capabilities.Capabilities{
AllowPrivileged: s.AllowPrivileged, AllowPrivileged: s.AllowPrivileged,

View File

@ -37,6 +37,7 @@ type ServerRunOptions struct {
SecureServing *genericoptions.SecureServingOptions SecureServing *genericoptions.SecureServingOptions
InsecureServing *genericoptions.ServingOptions InsecureServing *genericoptions.ServingOptions
Audit *genericoptions.AuditLogOptions Audit *genericoptions.AuditLogOptions
Features *genericoptions.FeatureOptions
Authentication *kubeoptions.BuiltInAuthenticationOptions Authentication *kubeoptions.BuiltInAuthenticationOptions
Authorization *kubeoptions.BuiltInAuthorizationOptions Authorization *kubeoptions.BuiltInAuthorizationOptions
CloudProvider *kubeoptions.CloudProviderOptions CloudProvider *kubeoptions.CloudProviderOptions
@ -53,6 +54,7 @@ func NewServerRunOptions() *ServerRunOptions {
SecureServing: genericoptions.NewSecureServingOptions(), SecureServing: genericoptions.NewSecureServingOptions(),
InsecureServing: genericoptions.NewInsecureServingOptions(), InsecureServing: genericoptions.NewInsecureServingOptions(),
Audit: genericoptions.NewAuditLogOptions(), Audit: genericoptions.NewAuditLogOptions(),
Features: genericoptions.NewFeatureOptions(),
Authentication: kubeoptions.NewBuiltInAuthenticationOptions().WithAll(), Authentication: kubeoptions.NewBuiltInAuthenticationOptions().WithAll(),
Authorization: kubeoptions.NewBuiltInAuthorizationOptions(), Authorization: kubeoptions.NewBuiltInAuthorizationOptions(),
CloudProvider: kubeoptions.NewCloudProviderOptions(), CloudProvider: kubeoptions.NewCloudProviderOptions(),
@ -73,6 +75,7 @@ func (s *ServerRunOptions) AddFlags(fs *pflag.FlagSet) {
s.SecureServing.AddFlags(fs) s.SecureServing.AddFlags(fs)
s.InsecureServing.AddFlags(fs) s.InsecureServing.AddFlags(fs)
s.Audit.AddFlags(fs) s.Audit.AddFlags(fs)
s.Features.AddFlags(fs)
s.Authentication.AddFlags(fs) s.Authentication.AddFlags(fs)
s.Authorization.AddFlags(fs) s.Authorization.AddFlags(fs)
s.CloudProvider.AddFlags(fs) s.CloudProvider.AddFlags(fs)

View File

@ -106,6 +106,9 @@ func Run(s *options.ServerRunOptions) error {
if err := s.Audit.ApplyTo(genericConfig); err != nil { if err := s.Audit.ApplyTo(genericConfig); err != nil {
return err return err
} }
if err := s.Features.ApplyTo(genericConfig); err != nil {
return err
}
// TODO: register cluster federation resources here. // TODO: register cluster federation resources here.
resourceConfig := genericapiserver.NewResourceConfig() resourceConfig := genericapiserver.NewResourceConfig()
@ -211,7 +214,7 @@ func Run(s *options.ServerRunOptions) error {
// TODO: Refactor this code to share it with kube-apiserver rather than duplicating it here. // TODO: Refactor this code to share it with kube-apiserver rather than duplicating it here.
restOptionsFactory := &restOptionsFactory{ restOptionsFactory := &restOptionsFactory{
storageFactory: storageFactory, storageFactory: storageFactory,
enableGarbageCollection: s.GenericServerRunOptions.EnableGarbageCollection, enableGarbageCollection: s.Features.EnableGarbageCollection,
deleteCollectionWorkers: s.GenericServerRunOptions.DeleteCollectionWorkers, deleteCollectionWorkers: s.GenericServerRunOptions.DeleteCollectionWorkers,
} }
if s.GenericServerRunOptions.EnableWatchCache { if s.GenericServerRunOptions.EnableWatchCache {

View File

@ -0,0 +1,62 @@
/*
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 options
import (
"github.com/spf13/pflag"
"k8s.io/apiserver/pkg/server"
)
type FeatureOptions struct {
EnableGarbageCollection bool
EnableProfiling bool
EnableContentionProfiling bool
EnableSwaggerUI bool
}
func NewFeatureOptions() *FeatureOptions {
defaults := server.NewConfig()
return &FeatureOptions{
EnableGarbageCollection: defaults.EnableGarbageCollection,
EnableProfiling: defaults.EnableProfiling,
EnableContentionProfiling: defaults.EnableContentionProfiling,
EnableSwaggerUI: defaults.EnableSwaggerUI,
}
}
func (o *FeatureOptions) AddFlags(fs *pflag.FlagSet) {
fs.BoolVar(&o.EnableGarbageCollection, "enable-garbage-collector", o.EnableGarbageCollection, ""+
"Enables the generic garbage collector. MUST be synced with the corresponding flag "+
"of the kube-controller-manager.")
fs.BoolVar(&o.EnableProfiling, "profiling", o.EnableProfiling,
"Enable profiling via web interface host:port/debug/pprof/")
fs.BoolVar(&o.EnableContentionProfiling, "contention-profiling", o.EnableContentionProfiling,
"Enable contention profiling. Requires --profiling to be set to work.")
fs.BoolVar(&o.EnableSwaggerUI, "enable-swagger-ui", o.EnableSwaggerUI,
"Enables swagger ui on the apiserver at /swagger-ui")
}
func (o *FeatureOptions) ApplyTo(c *server.Config) error {
c.EnableGarbageCollection = o.EnableGarbageCollection
c.EnableProfiling = o.EnableProfiling
c.EnableContentionProfiling = o.EnableContentionProfiling
c.EnableSwaggerUI = o.EnableSwaggerUI
return nil
}

View File

@ -31,6 +31,7 @@ type RecommendedOptions struct {
Authentication *DelegatingAuthenticationOptions Authentication *DelegatingAuthenticationOptions
Authorization *DelegatingAuthorizationOptions Authorization *DelegatingAuthorizationOptions
Audit *AuditLogOptions Audit *AuditLogOptions
Features *FeatureOptions
} }
func NewRecommendedOptions(scheme *runtime.Scheme) *RecommendedOptions { func NewRecommendedOptions(scheme *runtime.Scheme) *RecommendedOptions {
@ -40,6 +41,7 @@ func NewRecommendedOptions(scheme *runtime.Scheme) *RecommendedOptions {
Authentication: NewDelegatingAuthenticationOptions(), Authentication: NewDelegatingAuthenticationOptions(),
Authorization: NewDelegatingAuthorizationOptions(), Authorization: NewDelegatingAuthorizationOptions(),
Audit: NewAuditLogOptions(), Audit: NewAuditLogOptions(),
Features: NewFeatureOptions(),
} }
} }
@ -49,6 +51,7 @@ func (o *RecommendedOptions) AddFlags(fs *pflag.FlagSet) {
o.Authentication.AddFlags(fs) o.Authentication.AddFlags(fs)
o.Authorization.AddFlags(fs) o.Authorization.AddFlags(fs)
o.Audit.AddFlags(fs) o.Audit.AddFlags(fs)
o.Features.AddFlags(fs)
} }
func (o *RecommendedOptions) ApplyTo(config *server.Config) error { func (o *RecommendedOptions) ApplyTo(config *server.Config) error {
@ -64,6 +67,9 @@ func (o *RecommendedOptions) ApplyTo(config *server.Config) error {
if err := o.Audit.ApplyTo(config); err != nil { if err := o.Audit.ApplyTo(config); err != nil {
return err return err
} }
if err := o.Features.ApplyTo(config); err != nil {
return err
}
return nil return nil
} }

View File

@ -44,10 +44,6 @@ type ServerRunOptions struct {
// to set it to "application/vnd.kubernetes.protobuf". // to set it to "application/vnd.kubernetes.protobuf".
DefaultStorageMediaType string DefaultStorageMediaType string
DeleteCollectionWorkers int DeleteCollectionWorkers int
EnableGarbageCollection bool
EnableProfiling bool
EnableContentionProfiling bool
EnableSwaggerUI bool
EnableWatchCache bool EnableWatchCache bool
ExternalHost string ExternalHost string
MaxRequestsInFlight int MaxRequestsInFlight int
@ -65,9 +61,6 @@ func NewServerRunOptions() *ServerRunOptions {
AdmissionControl: "AlwaysAdmit", AdmissionControl: "AlwaysAdmit",
DefaultStorageMediaType: "application/json", DefaultStorageMediaType: "application/json",
DeleteCollectionWorkers: 1, DeleteCollectionWorkers: 1,
EnableGarbageCollection: defaults.EnableGarbageCollection,
EnableProfiling: defaults.EnableProfiling,
EnableContentionProfiling: false,
EnableWatchCache: true, EnableWatchCache: true,
MaxRequestsInFlight: defaults.MaxRequestsInFlight, MaxRequestsInFlight: defaults.MaxRequestsInFlight,
MaxMutatingRequestsInFlight: defaults.MaxMutatingRequestsInFlight, MaxMutatingRequestsInFlight: defaults.MaxMutatingRequestsInFlight,
@ -79,10 +72,6 @@ func NewServerRunOptions() *ServerRunOptions {
// ApplyOptions applies the run options to the method receiver and returns self // ApplyOptions applies the run options to the method receiver and returns self
func (s *ServerRunOptions) ApplyTo(c *server.Config) error { func (s *ServerRunOptions) ApplyTo(c *server.Config) error {
c.CorsAllowedOriginList = s.CorsAllowedOriginList c.CorsAllowedOriginList = s.CorsAllowedOriginList
c.EnableGarbageCollection = s.EnableGarbageCollection
c.EnableProfiling = s.EnableProfiling
c.EnableContentionProfiling = s.EnableContentionProfiling
c.EnableSwaggerUI = s.EnableSwaggerUI
c.ExternalAddress = s.ExternalHost c.ExternalAddress = s.ExternalHost
c.MaxRequestsInFlight = s.MaxRequestsInFlight c.MaxRequestsInFlight = s.MaxRequestsInFlight
c.MaxMutatingRequestsInFlight = s.MaxMutatingRequestsInFlight c.MaxMutatingRequestsInFlight = s.MaxMutatingRequestsInFlight
@ -149,18 +138,6 @@ func (s *ServerRunOptions) AddUniversalFlags(fs *pflag.FlagSet) {
fs.IntVar(&s.DeleteCollectionWorkers, "delete-collection-workers", s.DeleteCollectionWorkers, fs.IntVar(&s.DeleteCollectionWorkers, "delete-collection-workers", s.DeleteCollectionWorkers,
"Number of workers spawned for DeleteCollection call. These are used to speed up namespace cleanup.") "Number of workers spawned for DeleteCollection call. These are used to speed up namespace cleanup.")
fs.BoolVar(&s.EnableGarbageCollection, "enable-garbage-collector", s.EnableGarbageCollection, ""+
"Enables the generic garbage collector. MUST be synced with the corresponding flag "+
"of the kube-controller-manager.")
fs.BoolVar(&s.EnableProfiling, "profiling", s.EnableProfiling,
"Enable profiling via web interface host:port/debug/pprof/")
fs.BoolVar(&s.EnableContentionProfiling, "contention-profiling", s.EnableContentionProfiling,
"Enable contention profiling. Requires --profiling to be set to work.")
fs.BoolVar(&s.EnableSwaggerUI, "enable-swagger-ui", s.EnableSwaggerUI,
"Enables swagger ui on the apiserver at /swagger-ui")
// TODO: enable cache in integration tests. // TODO: enable cache in integration tests.
fs.BoolVar(&s.EnableWatchCache, "watch-cache", s.EnableWatchCache, fs.BoolVar(&s.EnableWatchCache, "watch-cache", s.EnableWatchCache,
"Enable watch caching in the apiserver") "Enable watch caching in the apiserver")

1
vendor/BUILD vendored
View File

@ -14094,6 +14094,7 @@ go_library(
"k8s.io/apiserver/pkg/server/options/authorization.go", "k8s.io/apiserver/pkg/server/options/authorization.go",
"k8s.io/apiserver/pkg/server/options/doc.go", "k8s.io/apiserver/pkg/server/options/doc.go",
"k8s.io/apiserver/pkg/server/options/etcd.go", "k8s.io/apiserver/pkg/server/options/etcd.go",
"k8s.io/apiserver/pkg/server/options/feature.go",
"k8s.io/apiserver/pkg/server/options/recommended.go", "k8s.io/apiserver/pkg/server/options/recommended.go",
"k8s.io/apiserver/pkg/server/options/server_run_options.go", "k8s.io/apiserver/pkg/server/options/server_run_options.go",
"k8s.io/apiserver/pkg/server/options/serving.go", "k8s.io/apiserver/pkg/server/options/serving.go",