Skip to content

Commit a5743a7

Browse files
committed
allow configuring enabled and disabled openshift controllerS
1 parent b7120a8 commit a5743a7

File tree

8 files changed

+35
-3
lines changed

8 files changed

+35
-3
lines changed

pkg/cmd/server/api/serialization_test.go

+8
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ func fuzzInternalObject(t *testing.T, forVersion schema.GroupVersion, item runti
4444
if len(obj.Controllers) == 0 {
4545
obj.Controllers = configapi.ControllersAll
4646
}
47+
if len(obj.ControllerConfig.Controllers) == 0 {
48+
switch {
49+
case obj.Controllers == configapi.ControllersAll:
50+
obj.ControllerConfig.Controllers = []string{"*"}
51+
case obj.Controllers == configapi.ControllersDisabled:
52+
obj.ControllerConfig.Controllers = []string{}
53+
}
54+
}
4755
if election := obj.ControllerConfig.Election; election != nil {
4856
if len(election.LockNamespace) == 0 {
4957
election.LockNamespace = "kube-system"

pkg/cmd/server/api/types.go

+4
Original file line numberDiff line numberDiff line change
@@ -1519,6 +1519,10 @@ type AdmissionConfig struct {
15191519

15201520
// ControllerConfig holds configuration values for controllers
15211521
type ControllerConfig struct {
1522+
// Controllers is a list of controllers to enable. '*' enables all on-by-default controllers, 'foo' enables the controller "+
1523+
// named 'foo', '-foo' disables the controller named 'foo'.
1524+
// Defaults to "*".
1525+
Controllers []string
15221526
// Election defines the configuration for electing a controller instance to make changes to
15231527
// the cluster. If unspecified, the ControllerTTL value is checked to determine whether the
15241528
// legacy direct etcd election code will be used.

pkg/cmd/server/api/v1/conversions.go

+10
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ func SetDefaults_MasterConfig(obj *MasterConfig) {
2222
if len(obj.Controllers) == 0 {
2323
obj.Controllers = ControllersAll
2424
}
25+
if len(obj.ControllerConfig.Controllers) == 0 {
26+
switch {
27+
case obj.Controllers == ControllersAll:
28+
obj.ControllerConfig.Controllers = []string{"*"}
29+
case obj.Controllers == ControllersDisabled:
30+
obj.ControllerConfig.Controllers = []string{}
31+
}
32+
}
2533
if election := obj.ControllerConfig.Election; election != nil {
2634
if len(election.LockNamespace) == 0 {
2735
election.LockNamespace = "kube-system"
@@ -30,6 +38,7 @@ func SetDefaults_MasterConfig(obj *MasterConfig) {
3038
election.LockResource.Resource = "configmaps"
3139
}
3240
}
41+
3342
if obj.ServingInfo.RequestTimeoutSeconds == 0 {
3443
obj.ServingInfo.RequestTimeoutSeconds = 60 * 60
3544
}
@@ -194,6 +203,7 @@ func SetDefaults_EtcdStorageConfig(obj *EtcdStorageConfig) {
194203
obj.OpenShiftStoragePrefix = "openshift.io"
195204
}
196205
}
206+
197207
func SetDefaults_DockerConfig(obj *DockerConfig) {
198208
if len(obj.ExecHandlerName) == 0 {
199209
obj.ExecHandlerName = DockerExecHandlerNative

pkg/cmd/server/api/v1/types.go

+4
Original file line numberDiff line numberDiff line change
@@ -1439,6 +1439,10 @@ type AdmissionConfig struct {
14391439

14401440
// ControllerConfig holds configuration values for controllers
14411441
type ControllerConfig struct {
1442+
// Controllers is a list of controllers to enable. '*' enables all on-by-default controllers, 'foo' enables the controller "+
1443+
// named 'foo', '-foo' disables the controller named 'foo'.
1444+
// Defaults to "*".
1445+
Controllers []string `json:"controllers"`
14421446
// Election defines the configuration for electing a controller instance to make changes to
14431447
// the cluster. If unspecified, the ControllerTTL value is checked to determine whether the
14441448
// legacy direct etcd election code will be used.

pkg/cmd/server/api/v1/types_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ auditConfig:
127127
authConfig:
128128
requestHeader: null
129129
controllerConfig:
130+
controllers: null
130131
election: null
131132
serviceServingCert:
132133
signer: null

pkg/cmd/server/origin/controller/interfaces.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import (
55

66
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
77
"k8s.io/apimachinery/pkg/runtime/schema"
8+
"k8s.io/apimachinery/pkg/util/sets"
89
kexternalinformers "k8s.io/client-go/informers"
10+
controllerapp "k8s.io/kubernetes/cmd/kube-controller-manager/app"
911
kclientsetinternal "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
1012
kinternalinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
1113
"k8s.io/kubernetes/pkg/controller"
@@ -29,6 +31,8 @@ import (
2931
type ControllerContext struct {
3032
OpenshiftControllerOptions OpenshiftControllerOptions
3133

34+
EnabledControllers []string
35+
3236
// ClientBuilder will provide a client for this controller to use
3337
ClientBuilder ControllerClientBuilder
3438

@@ -74,9 +78,8 @@ type ServiceAccountTokenOptions struct {
7478
ConcurrentSyncs int32
7579
}
7680

77-
// TODO wire this up to something that handles the names. The logic is available upstream, we just have to wire to it
7881
func (c ControllerContext) IsControllerEnabled(name string) bool {
79-
return true
82+
return controllerapp.IsControllerEnabled(name, sets.String{}, c.EnabledControllers...)
8083
}
8184

8285
type ControllerClientBuilder interface {

pkg/cmd/server/start/controllers.go

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424

2525
func newControllerContext(
2626
openshiftControllerOptions origincontrollers.OpenshiftControllerOptions,
27+
enabledControllers []string,
2728
privilegedLoopbackConfig *rest.Config,
2829
kubeExternal kclientsetexternal.Interface,
2930
informers *informers,
@@ -42,6 +43,7 @@ func newControllerContext(
4243

4344
openshiftControllerContext := origincontrollers.ControllerContext{
4445
OpenshiftControllerOptions: openshiftControllerOptions,
46+
EnabledControllers: enabledControllers,
4547

4648
ClientBuilder: origincontrollers.OpenshiftControllerClientBuilder{
4749
ControllerClientBuilder: controller.SAControllerClientBuilder{

pkg/cmd/server/start/start_master.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,7 @@ func (m *Master) Start() error {
494494
glog.Fatal(err)
495495
}
496496

497-
controllerContext := newControllerContext(openshiftControllerOptions, privilegedLoopbackConfig, kubeExternal, openshiftControllerInformers, utilwait.NeverStop, make(chan struct{}))
497+
controllerContext := newControllerContext(openshiftControllerOptions, m.config.ControllerConfig.Controllers, privilegedLoopbackConfig, kubeExternal, openshiftControllerInformers, utilwait.NeverStop, make(chan struct{}))
498498
if err := startControllers(*m.config, allocationController, controllerContext); err != nil {
499499
glog.Fatal(err)
500500
}

0 commit comments

Comments
 (0)