5
5
"flag"
6
6
"fmt"
7
7
"os"
8
- "time"
9
8
10
9
features "github.com/openshift/api/features"
11
10
"github.com/openshift/machine-config-operator/cmd/common"
@@ -82,7 +81,7 @@ func runStartCmd(_ *cobra.Command, _ []string) {
82
81
ctrlctx .InformerFactory .Machineconfiguration ().V1 ().MachineConfigPools (),
83
82
ctrlctx .ClientBuilder .KubeClientOrDie ("node-update-controller" ),
84
83
ctrlctx .ClientBuilder .MachineConfigClientOrDie ("node-update-controller" ),
85
- ctrlctx .FeatureGateAccess ,
84
+ ctrlctx .FeatureGatesHandler ,
86
85
)
87
86
88
87
certrotationcontroller , err := certrotationcontroller .New (
@@ -108,56 +107,46 @@ func runStartCmd(_ *cobra.Command, _ []string) {
108
107
109
108
close (ctrlctx .InformersStarted )
110
109
111
- select {
112
- case <- ctrlctx .FeatureGateAccess .InitialFeatureGatesObserved ():
113
- fg , err := ctrlctx .FeatureGateAccess .CurrentFeatureGates ()
114
- if err != nil {
115
- klog .Fatalf ("unable to get initial features: %v" , err )
116
- }
117
-
118
- enabled , disabled := ctrlcommon .GetEnabledDisabledFeatures (fg )
119
- klog .Infof ("FeatureGates initialized: enabled=%v disabled=%v" , enabled , disabled )
120
- if fg .Enabled (features .FeatureGatePinnedImages ) && fg .Enabled (features .FeatureGateMachineConfigNodes ) {
121
- pinnedImageSet := pinnedimageset .New (
122
- ctrlctx .InformerFactory .Machineconfiguration ().V1 ().PinnedImageSets (),
123
- ctrlctx .InformerFactory .Machineconfiguration ().V1 ().MachineConfigPools (),
124
- ctrlctx .ClientBuilder .KubeClientOrDie ("pinned-image-set-controller" ),
125
- ctrlctx .ClientBuilder .MachineConfigClientOrDie ("pinned-image-set-controller" ),
126
- )
127
-
128
- go pinnedImageSet .Run (2 , ctrlctx .Stop )
129
- // start the informers again to enable feature gated types.
130
- // see comments in SharedInformerFactory interface.
131
- ctrlctx .InformerFactory .Start (ctrlctx .Stop )
132
- }
110
+ if fgErr := ctrlctx .FeatureGatesHandler .Connect (ctx ); fgErr != nil {
111
+ klog .Fatal (fmt .Errorf ("failed to connect to feature gates %w" , fgErr ))
112
+ }
133
113
134
- if ctrlcommon .IsBootImageControllerRequired (ctrlctx ) {
135
- machineSetBootImage := machinesetbootimage .New (
136
- ctrlctx .ClientBuilder .KubeClientOrDie ("machine-set-boot-image-controller" ),
137
- ctrlctx .ClientBuilder .MachineClientOrDie ("machine-set-boot-image-controller" ),
138
- ctrlctx .KubeNamespacedInformerFactory .Core ().V1 ().ConfigMaps (),
139
- ctrlctx .MachineInformerFactory .Machine ().V1beta1 ().MachineSets (),
140
- ctrlctx .ConfigInformerFactory .Config ().V1 ().Infrastructures (),
141
- ctrlctx .ClientBuilder .OperatorClientOrDie (componentName ),
142
- ctrlctx .OperatorInformerFactory .Operator ().V1 ().MachineConfigurations (),
143
- ctrlctx .FeatureGateAccess ,
144
- )
145
- go machineSetBootImage .Run (ctrlctx .Stop )
146
- // start the informers again to enable feature gated types.
147
- // see comments in SharedInformerFactory interface.
148
- ctrlctx .KubeNamespacedInformerFactory .Start (ctrlctx .Stop )
149
- ctrlctx .MachineInformerFactory .Start (ctrlctx .Stop )
150
- ctrlctx .ConfigInformerFactory .Start (ctrlctx .Stop )
151
- ctrlctx .OperatorInformerFactory .Start (ctrlctx .Stop )
152
- }
114
+ if ctrlctx .FeatureGatesHandler .Enabled (features .FeatureGatePinnedImages ) && ctrlctx .FeatureGatesHandler .Enabled (features .FeatureGateMachineConfigNodes ) {
115
+ pinnedImageSet := pinnedimageset .New (
116
+ ctrlctx .InformerFactory .Machineconfiguration ().V1 ().PinnedImageSets (),
117
+ ctrlctx .InformerFactory .Machineconfiguration ().V1 ().MachineConfigPools (),
118
+ ctrlctx .ClientBuilder .KubeClientOrDie ("pinned-image-set-controller" ),
119
+ ctrlctx .ClientBuilder .MachineConfigClientOrDie ("pinned-image-set-controller" ),
120
+ )
121
+
122
+ go pinnedImageSet .Run (2 , ctrlctx .Stop )
123
+ // start the informers again to enable feature gated types.
124
+ // see comments in SharedInformerFactory interface.
125
+ ctrlctx .InformerFactory .Start (ctrlctx .Stop )
126
+ }
153
127
154
- if fg .Enabled (features .FeatureGateOnClusterBuild ) {
155
- ctrlctx .OCLInformerFactory .Start (ctrlctx .Stop )
156
- }
128
+ if ctrlcommon .IsBootImageControllerRequired (ctrlctx ) {
129
+ machineSetBootImage := machinesetbootimage .New (
130
+ ctrlctx .ClientBuilder .KubeClientOrDie ("machine-set-boot-image-controller" ),
131
+ ctrlctx .ClientBuilder .MachineClientOrDie ("machine-set-boot-image-controller" ),
132
+ ctrlctx .KubeNamespacedInformerFactory .Core ().V1 ().ConfigMaps (),
133
+ ctrlctx .MachineInformerFactory .Machine ().V1beta1 ().MachineSets (),
134
+ ctrlctx .ConfigInformerFactory .Config ().V1 ().Infrastructures (),
135
+ ctrlctx .ClientBuilder .OperatorClientOrDie (componentName ),
136
+ ctrlctx .OperatorInformerFactory .Operator ().V1 ().MachineConfigurations (),
137
+ ctrlctx .FeatureGatesHandler ,
138
+ )
139
+ go machineSetBootImage .Run (ctrlctx .Stop )
140
+ // start the informers again to enable feature gated types.
141
+ // see comments in SharedInformerFactory interface.
142
+ ctrlctx .KubeNamespacedInformerFactory .Start (ctrlctx .Stop )
143
+ ctrlctx .MachineInformerFactory .Start (ctrlctx .Stop )
144
+ ctrlctx .ConfigInformerFactory .Start (ctrlctx .Stop )
145
+ ctrlctx .OperatorInformerFactory .Start (ctrlctx .Stop )
146
+ }
157
147
158
- case <- time .After (1 * time .Minute ):
159
- klog .Errorf ("timed out waiting for FeatureGate detection" )
160
- os .Exit (1 )
148
+ if ctrlctx .FeatureGatesHandler .Enabled (features .FeatureGateOnClusterBuild ) {
149
+ ctrlctx .OCLInformerFactory .Start (ctrlctx .Stop )
161
150
}
162
151
163
152
for _ , c := range controllers {
@@ -215,7 +204,7 @@ func createControllers(ctx *ctrlcommon.ControllerContext) []ctrlcommon.Controlle
215
204
ctx .ClientBuilder .KubeClientOrDie ("kubelet-config-controller" ),
216
205
ctx .ClientBuilder .MachineConfigClientOrDie ("kubelet-config-controller" ),
217
206
ctx .ClientBuilder .ConfigClientOrDie ("kubelet-config-controller" ),
218
- ctx .FeatureGateAccess ,
207
+ ctx .FeatureGatesHandler ,
219
208
),
220
209
containerruntimeconfig .New (
221
210
rootOpts .templates ,
@@ -231,7 +220,7 @@ func createControllers(ctx *ctrlcommon.ControllerContext) []ctrlcommon.Controlle
231
220
ctx .ClientBuilder .KubeClientOrDie ("container-runtime-config-controller" ),
232
221
ctx .ClientBuilder .MachineConfigClientOrDie ("container-runtime-config-controller" ),
233
222
ctx .ClientBuilder .ConfigClientOrDie ("container-runtime-config-controller" ),
234
- ctx .FeatureGateAccess ,
223
+ ctx .FeatureGatesHandler ,
235
224
),
236
225
// The renderer creates "rendered" MCs from the MC fragments generated by
237
226
// the above sub-controllers, which are then consumed by the node controller
@@ -255,7 +244,7 @@ func createControllers(ctx *ctrlcommon.ControllerContext) []ctrlcommon.Controlle
255
244
ctx .ConfigInformerFactory .Config ().V1 ().Schedulers (),
256
245
ctx .ClientBuilder .KubeClientOrDie ("node-update-controller" ),
257
246
ctx .ClientBuilder .MachineConfigClientOrDie ("node-update-controller" ),
258
- ctx .FeatureGateAccess ,
247
+ ctx .FeatureGatesHandler ,
259
248
),
260
249
)
261
250
0 commit comments