2019-01-12 04:58:27 +00:00
/ *
Copyright 2018 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 (
"fmt"
"strings"
"k8s.io/apimachinery/pkg/util/sets"
2019-04-07 17:07:55 +00:00
cliflag "k8s.io/component-base/cli/flag"
2020-08-10 17:43:49 +00:00
"k8s.io/component-base/config/options"
2020-12-01 01:06:26 +00:00
cmconfig "k8s.io/controller-manager/config"
2021-03-18 22:40:29 +00:00
migration "k8s.io/controller-manager/pkg/leadermigration/options"
2019-01-12 04:58:27 +00:00
)
// GenericControllerManagerConfigurationOptions holds the options which are generic.
type GenericControllerManagerConfigurationOptions struct {
2020-12-01 01:06:26 +00:00
* cmconfig . GenericControllerManagerConfiguration
2019-04-07 17:07:55 +00:00
Debugging * DebuggingOptions
2021-03-18 22:40:29 +00:00
// LeaderMigration is the options for leader migration, a nil indicates default options should be applied.
LeaderMigration * migration . LeaderMigrationOptions
2019-01-12 04:58:27 +00:00
}
// NewGenericControllerManagerConfigurationOptions returns generic configuration default values for both
// the kube-controller-manager and the cloud-contoller-manager. Any common changes should
// be made here. Any individual changes should be made in that controller.
2020-12-01 01:06:26 +00:00
func NewGenericControllerManagerConfigurationOptions ( cfg * cmconfig . GenericControllerManagerConfiguration ) * GenericControllerManagerConfigurationOptions {
2019-01-12 04:58:27 +00:00
o := & GenericControllerManagerConfigurationOptions {
2019-04-07 17:07:55 +00:00
GenericControllerManagerConfiguration : cfg ,
2020-03-26 21:07:15 +00:00
Debugging : RecommendedDebuggingOptions ( ) ,
2021-03-18 22:40:29 +00:00
LeaderMigration : & migration . LeaderMigrationOptions { } ,
2019-01-12 04:58:27 +00:00
}
return o
}
// AddFlags adds flags related to generic for controller manager to the specified FlagSet.
2019-04-07 17:07:55 +00:00
func ( o * GenericControllerManagerConfigurationOptions ) AddFlags ( fss * cliflag . NamedFlagSets , allControllers , disabledByDefaultControllers [ ] string ) {
2019-01-12 04:58:27 +00:00
if o == nil {
return
}
o . Debugging . AddFlags ( fss . FlagSet ( "debugging" ) )
2021-03-18 22:40:29 +00:00
o . LeaderMigration . AddFlags ( fss . FlagSet ( "leader-migration" ) )
2019-01-12 04:58:27 +00:00
genericfs := fss . FlagSet ( "generic" )
genericfs . DurationVar ( & o . MinResyncPeriod . Duration , "min-resync-period" , o . MinResyncPeriod . Duration , "The resync period in reflectors will be random between MinResyncPeriod and 2*MinResyncPeriod." )
genericfs . StringVar ( & o . ClientConnection . ContentType , "kube-api-content-type" , o . ClientConnection . ContentType , "Content type of requests sent to apiserver." )
genericfs . Float32Var ( & o . ClientConnection . QPS , "kube-api-qps" , o . ClientConnection . QPS , "QPS to use while talking with kubernetes apiserver." )
genericfs . Int32Var ( & o . ClientConnection . Burst , "kube-api-burst" , o . ClientConnection . Burst , "Burst to use while talking with kubernetes apiserver." )
genericfs . DurationVar ( & o . ControllerStartInterval . Duration , "controller-start-interval" , o . ControllerStartInterval . Duration , "Interval between starting controller managers." )
genericfs . StringSliceVar ( & o . Controllers , "controllers" , o . Controllers , fmt . Sprintf ( "" +
"A list of controllers to enable. '*' enables all on-by-default controllers, 'foo' enables the controller " +
"named 'foo', '-foo' disables the controller named 'foo'.\nAll controllers: %s\nDisabled-by-default controllers: %s" ,
strings . Join ( allControllers , ", " ) , strings . Join ( disabledByDefaultControllers , ", " ) ) )
2020-08-10 17:43:49 +00:00
options . BindLeaderElectionFlags ( & o . LeaderElection , genericfs )
2019-01-12 04:58:27 +00:00
}
// ApplyTo fills up generic config with options.
2020-12-01 01:06:26 +00:00
func ( o * GenericControllerManagerConfigurationOptions ) ApplyTo ( cfg * cmconfig . GenericControllerManagerConfiguration ) error {
2019-01-12 04:58:27 +00:00
if o == nil {
return nil
}
if err := o . Debugging . ApplyTo ( & cfg . Debugging ) ; err != nil {
return err
}
2021-03-18 22:40:29 +00:00
if err := o . LeaderMigration . ApplyTo ( cfg ) ; err != nil {
return err
}
2019-01-12 04:58:27 +00:00
cfg . Port = o . Port
cfg . Address = o . Address
cfg . MinResyncPeriod = o . MinResyncPeriod
cfg . ClientConnection = o . ClientConnection
cfg . ControllerStartInterval = o . ControllerStartInterval
cfg . LeaderElection = o . LeaderElection
cfg . Controllers = o . Controllers
return nil
}
// Validate checks validation of GenericOptions.
func ( o * GenericControllerManagerConfigurationOptions ) Validate ( allControllers [ ] string , disabledByDefaultControllers [ ] string ) [ ] error {
if o == nil {
return nil
}
errs := [ ] error { }
errs = append ( errs , o . Debugging . Validate ( ) ... )
allControllersSet := sets . NewString ( allControllers ... )
for _ , controller := range o . Controllers {
if controller == "*" {
continue
}
2019-08-30 18:33:25 +00:00
controller = strings . TrimPrefix ( controller , "-" )
2019-01-12 04:58:27 +00:00
if ! allControllersSet . Has ( controller ) {
errs = append ( errs , fmt . Errorf ( "%q is not in the list of known controllers" , controller ) )
}
}
return errs
}