add feature enablement options to recommendedoptions
This commit is contained in:
		| @@ -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) | ||||||
|   | |||||||
| @@ -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") | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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, | ||||||
|   | |||||||
| @@ -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) | ||||||
|   | |||||||
| @@ -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 { | ||||||
|   | |||||||
							
								
								
									
										62
									
								
								staging/src/k8s.io/apiserver/pkg/server/options/feature.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								staging/src/k8s.io/apiserver/pkg/server/options/feature.go
									
									
									
									
									
										Normal 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 | ||||||
|  | } | ||||||
| @@ -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 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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
									
									
								
							
							
						
						
									
										1
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							| @@ -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", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 deads2k
					deads2k