6
6
"os"
7
7
"time"
8
8
9
+ configv1 "github.com/openshift/api/config/v1"
9
10
configv1client "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1"
10
11
"github.com/openshift/library-go/pkg/controller/controllercmd"
11
12
"k8s.io/apimachinery/pkg/api/errors"
@@ -156,7 +157,7 @@ func (s *Operator) Run(ctx context.Context, controller *controllercmd.Controller
156
157
// a threshold
157
158
158
159
// start reporting status now that all controller loops are added as sources
159
- if err : = statusReporter .Start (ctx ); err != nil {
160
+ if err = statusReporter .Start (ctx ); err != nil {
160
161
return fmt .Errorf ("unable to set initial cluster status: %v" , err )
161
162
}
162
163
// start uploading status, so that we
@@ -166,13 +167,9 @@ func (s *Operator) Run(ctx context.Context, controller *controllercmd.Controller
166
167
reportGatherer := insightsreport .New (insightsClient , configObserver , uploader )
167
168
go reportGatherer .Run (ctx )
168
169
170
+ runOCMController (ctx , configClient , kubeClient , configObserver , insightsClient )
169
171
klog .Warning ("started" )
170
172
171
- // OMC controller periodically checks and pull data from the OCM API
172
- // the data is exposed in the OpenShift API
173
- ocmController := ocm .New (ctx , kubeClient .CoreV1 (), configObserver , insightsClient )
174
- go ocmController .Run ()
175
-
176
173
<- ctx .Done ()
177
174
178
175
return nil
@@ -206,3 +203,49 @@ func isRunning(ctx context.Context, kubeConfig *rest.Config) wait.ConditionFunc
206
203
return true , nil
207
204
}
208
205
}
206
+
207
+ // runOCMController checks the "InsightsOperatorPullingSCA" feature and if it's enabled then run the OCM controller
208
+ func runOCMController (ctx context.Context , configClient * configv1client.ConfigV1Client ,
209
+ kubeClient * kubernetes.Clientset , configObserver * configobserver.Controller , insightsClient * insightsclient.Client ) {
210
+ ocmEnabled , err := featureEnabled (ctx , configClient , "InsightsOperatorPullingSCA" )
211
+ if err != nil {
212
+ klog .Errorf ("Pulling of SCA certs from the OCM is disabled. Unable to get cluster FeatureGate: %v" , err )
213
+ }
214
+ if ocmEnabled {
215
+ klog .Info ("Pulling of SCA certs from the OCM is enabled." )
216
+ // OMC controller periodically checks and pull data from the OCM API
217
+ // the data is exposed in the OpenShift API
218
+ ocmController := ocm .New (ctx , kubeClient .CoreV1 (), configObserver , insightsClient )
219
+ go ocmController .Run ()
220
+ }
221
+ }
222
+
223
+ // featureEnabled checks if the feature is enabled in the "cluster" FeatureGate
224
+ func featureEnabled (ctx context.Context , client * configv1client.ConfigV1Client , feature string ) (bool , error ) {
225
+ fg , err := client .FeatureGates ().Get (ctx , "cluster" , metav1.GetOptions {})
226
+ if err != nil {
227
+ return false , err
228
+ }
229
+ enabled := getEnabledFeatures (fg )
230
+ for _ , f := range enabled {
231
+ if f == feature {
232
+ return true , nil
233
+ }
234
+ }
235
+ return false , nil
236
+ }
237
+
238
+ // getEnabledFeatures returns a list of enabled features in provided FeatureGate
239
+ func getEnabledFeatures (fg * configv1.FeatureGate ) []string {
240
+ if fg .Spec .FeatureSet == "" {
241
+ return nil
242
+ }
243
+ if fg .Spec .FeatureSet == configv1 .CustomNoUpgrade {
244
+ return fg .Spec .CustomNoUpgrade .Enabled
245
+ }
246
+ gates := configv1 .FeatureSets [fg .Spec .FeatureSet ]
247
+ if gates == nil {
248
+ return nil
249
+ }
250
+ return gates .Enabled
251
+ }
0 commit comments