@@ -2,7 +2,6 @@ package operator
22
33import (
44 "context"
5- "errors"
65 "fmt"
76 "net/url"
87 "os"
@@ -55,10 +54,8 @@ func (co *consoleOperator) sync_v400(ctx context.Context, controllerContext fact
5554
5655 var (
5756 statusHandler = status .NewStatusHandler (co .operatorClient )
58- // track changes, may trigger ripples & update operator config or console config status
59- toUpdate = false
60- consoleRoute * routev1.Route
61- consoleURL * url.URL
57+ consoleRoute * routev1.Route
58+ consoleURL * url.URL
6259 )
6360
6461 if len (set .Operator .Spec .Ingress .ConsoleURL ) == 0 {
@@ -131,7 +128,7 @@ func (co *consoleOperator) sync_v400(ctx context.Context, controllerContext fact
131128 return statusHandler .FlushAndReturn (techPreviewErr )
132129 }
133130
134- cm , cmChanged , cmErrReason , cmErr := co .SyncConfigMap (
131+ cm , cmErrReason , cmErr := co .SyncConfigMap (
135132 ctx ,
136133 set .Operator ,
137134 set .Console ,
@@ -143,21 +140,18 @@ func (co *consoleOperator) sync_v400(ctx context.Context, controllerContext fact
143140 consoleURL .Hostname (),
144141 techPreviewEnabled ,
145142 )
146- toUpdate = toUpdate || cmChanged
147143 statusHandler .AddConditions (status .HandleProgressingOrDegraded ("ConfigMapSync" , cmErrReason , cmErr ))
148144 if cmErr != nil {
149145 return statusHandler .FlushAndReturn (cmErr )
150146 }
151147
152- serviceCAConfigMap , serviceCAChanged , serviceCAErrReason , serviceCAErr := co .SyncServiceCAConfigMap (ctx , set .Operator )
153- toUpdate = toUpdate || serviceCAChanged
148+ serviceCAConfigMap , serviceCAErrReason , serviceCAErr := co .SyncServiceCAConfigMap (ctx , set .Operator )
154149 statusHandler .AddConditions (status .HandleProgressingOrDegraded ("ServiceCASync" , serviceCAErrReason , serviceCAErr ))
155150 if serviceCAErr != nil {
156151 return statusHandler .FlushAndReturn (serviceCAErr )
157152 }
158153
159- trustedCAConfigMap , trustedCAConfigMapChanged , trustedCAErrReason , trustedCAErr := co .SyncTrustedCAConfigMap (ctx , set .Operator )
160- toUpdate = toUpdate || trustedCAConfigMapChanged
154+ trustedCAConfigMap , trustedCAErrReason , trustedCAErr := co .SyncTrustedCAConfigMap (ctx , set .Operator )
161155 statusHandler .AddConditions (status .HandleProgressingOrDegraded ("TrustedCASync" , trustedCAErrReason , trustedCAErr ))
162156 if trustedCAErr != nil {
163157 return statusHandler .FlushAndReturn (trustedCAErr )
@@ -183,7 +177,7 @@ func (co *consoleOperator) sync_v400(ctx context.Context, controllerContext fact
183177 return statusHandler .FlushAndReturn (secErr )
184178 }
185179
186- actualDeployment , depChanged , depErrReason , depErr := co .SyncDeployment (
180+ actualDeployment , depErrReason , depErr := co .SyncDeployment (
187181 ctx ,
188182 set .Operator ,
189183 cm ,
@@ -197,7 +191,6 @@ func (co *consoleOperator) sync_v400(ctx context.Context, controllerContext fact
197191 set .Infrastructure ,
198192 controllerContext .Recorder (),
199193 )
200- toUpdate = toUpdate || depChanged
201194 statusHandler .AddConditions (status .HandleProgressingOrDegraded ("DeploymentSync" , depErrReason , depErr ))
202195 if depErr != nil {
203196 return statusHandler .FlushAndReturn (depErr )
@@ -207,15 +200,13 @@ func (co *consoleOperator) sync_v400(ctx context.Context, controllerContext fact
207200 statusHandler .UpdateReadyReplicas (actualDeployment .Status .ReadyReplicas )
208201 statusHandler .UpdateObservedGeneration (set .Operator .ObjectMeta .Generation )
209202
210- klog .V (4 ).Infoln ("-----------------------" )
211- klog .V (4 ).Infof ("sync loop 4.0.0 resources updated: %v" , toUpdate )
212- klog .V (4 ).Infoln ("-----------------------" )
213-
214203 statusHandler .AddCondition (status .HandleProgressing ("SyncLoopRefresh" , "InProgress" , func () error {
215- if toUpdate {
216- return errors .New ("changes made during sync updates, additional sync expected" )
217- }
218204 version := os .Getenv ("OPERATOR_IMAGE_VERSION" )
205+ // Only report Progressing=True when the deployment is actually rolling out
206+ // or the operator version is changing. Do NOT report Progressing just because
207+ // resources were updated during reconciliation, as per the API guidelines:
208+ // "Operators should not report Progressing when they are reconciling (without action)
209+ // a previously known state."
219210 if ! deploymentsub .IsAvailableAndUpdated (actualDeployment ) {
220211 return fmt .Errorf ("working toward version %s, %v replicas available" , version , actualDeployment .Status .AvailableReplicas )
221212 }
@@ -252,20 +243,7 @@ func (co *consoleOperator) sync_v400(ctx context.Context, controllerContext fact
252243 return statusHandler .FlushAndReturn (consolePublicConfigErr )
253244 }
254245
255- defer func () {
256- klog .V (4 ).Infof ("sync loop 4.0.0 complete" )
257-
258- if cmChanged {
259- klog .V (4 ).Infof ("\t configmap changed: %v" , cm .GetResourceVersion ())
260- }
261- if serviceCAChanged {
262- klog .V (4 ).Infof ("\t service-ca configmap changed: %v" , serviceCAConfigMap .GetResourceVersion ())
263- }
264- if depChanged {
265- klog .V (4 ).Infof ("\t deployment changed: %v" , actualDeployment .GetResourceVersion ())
266- }
267- }()
268-
246+ klog .V (4 ).Infof ("sync loop 4.0.0 complete" )
269247 return statusHandler .FlushAndReturn (nil )
270248}
271249
@@ -299,7 +277,7 @@ func (co *consoleOperator) SyncDeployment(
299277 proxyConfig * configv1.Proxy ,
300278 infrastructureConfig * configv1.Infrastructure ,
301279 recorder events.Recorder ,
302- ) (consoleDeployment * appsv1.Deployment , changed bool , reason string , err error ) {
280+ ) (consoleDeployment * appsv1.Deployment , reason string , err error ) {
303281 updatedOperatorConfig := operatorConfig .DeepCopy ()
304282 requiredDeployment := deploymentsub .DefaultDeployment (
305283 operatorConfig ,
@@ -320,7 +298,7 @@ func (co *consoleOperator) SyncDeployment(
320298 }
321299 deploymentsub .LogDeploymentAnnotationChanges (co .deploymentClient , requiredDeployment , ctx )
322300
323- deployment , deploymentChanged , applyDepErr := resourceapply .ApplyDeployment (
301+ deployment , _ , applyDepErr := resourceapply .ApplyDeployment (
324302 ctx ,
325303 co .deploymentClient ,
326304 recorder ,
@@ -329,9 +307,9 @@ func (co *consoleOperator) SyncDeployment(
329307 )
330308
331309 if applyDepErr != nil {
332- return nil , false , "FailedApply" , applyDepErr
310+ return nil , "FailedApply" , applyDepErr
333311 }
334- return deployment , deploymentChanged , "" , nil
312+ return deployment , "" , nil
335313}
336314
337315// apply configmap (needs route)
@@ -348,18 +326,18 @@ func (co *consoleOperator) SyncConfigMap(
348326 recorder events.Recorder ,
349327 consoleHost string ,
350328 techPreviewEnabled bool ,
351- ) (consoleConfigMap * corev1.ConfigMap , changed bool , reason string , err error ) {
329+ ) (consoleConfigMap * corev1.ConfigMap , reason string , err error ) {
352330
353331 managedConfig , mcErr := co .managedNSConfigMapLister .ConfigMaps (api .OpenShiftConfigManagedNamespace ).Get (api .OpenShiftConsoleConfigMapName )
354332 if mcErr != nil {
355333 if ! apierrors .IsNotFound (mcErr ) {
356- return nil , false , "FailedGetManagedConfig" , mcErr
334+ return nil , "FailedGetManagedConfig" , mcErr
357335 }
358336 managedConfig = & corev1.ConfigMap {}
359337 }
360338 nodeList , nodeListErr := co .nodeLister .List (labels .Everything ())
361339 if nodeListErr != nil {
362- return nil , false , "FailedListNodes" , nodeListErr
340+ return nil , "FailedListNodes" , nodeListErr
363341 }
364342 nodeArchitectures , nodeOperatingSystems := getNodeComputeEnvironments (nodeList )
365343
@@ -369,7 +347,7 @@ func (co *consoleOperator) SyncConfigMap(
369347 case "" , configv1 .AuthenticationTypeIntegratedOAuth :
370348 oauthClient , oacErr := co .oauthClientLister .Get (oauthsub .Stub ().Name )
371349 if oacErr != nil {
372- return nil , false , "FailedGetOAuthClient" , oacErr
350+ return nil , "FailedGetOAuthClient" , oacErr
373351 }
374352 if oauthClient .AccessTokenInactivityTimeoutSeconds != nil {
375353 inactivityTimeoutSeconds = int (* oauthClient .AccessTokenInactivityTimeoutSeconds )
@@ -385,14 +363,14 @@ func (co *consoleOperator) SyncConfigMap(
385363 monitoringSharedConfig , mscErr := co .managedNSConfigMapLister .ConfigMaps (api .OpenShiftConfigManagedNamespace ).Get (api .OpenShiftMonitoringConfigMapName )
386364 if mscErr != nil {
387365 if ! apierrors .IsNotFound (mscErr ) {
388- return nil , false , "FailedGetMonitoringSharedConfig" , mscErr
366+ return nil , "FailedGetMonitoringSharedConfig" , mscErr
389367 }
390368 monitoringSharedConfig = & corev1.ConfigMap {}
391369 }
392370
393371 telemetryConfig , tcErr := co .GetTelemetryConfiguration (ctx , operatorConfig )
394372 if tcErr != nil {
395- return nil , false , "FailedGetTelemetryConfig" , tcErr
373+ return nil , "FailedGetTelemetryConfig" , tcErr
396374 }
397375
398376 var (
@@ -402,7 +380,7 @@ func (co *consoleOperator) SyncConfigMap(
402380 if ! co .trackables .isOLMDisabled {
403381 copiedCSVsDisabled , ccdErr = co .isCopiedCSVsDisabled (ctx )
404382 if ccdErr != nil {
405- return nil , false , "FailedGetOLMConfig" , ccdErr
383+ return nil , "FailedGetOLMConfig" , ccdErr
406384 }
407385 }
408386
@@ -425,17 +403,17 @@ func (co *consoleOperator) SyncConfigMap(
425403 techPreviewEnabled ,
426404 )
427405 if err != nil {
428- return nil , false , "FailedConsoleConfigBuilder" , err
406+ return nil , "FailedConsoleConfigBuilder" , err
429407 }
430408 cm , cmChanged , cmErr := resourceapply .ApplyConfigMap (ctx , co .configMapClient , recorder , defaultConfigmap )
431409 if cmErr != nil {
432- return nil , false , "FailedApply" , cmErr
410+ return nil , "FailedApply" , cmErr
433411 }
434412 if cmChanged {
435413 klog .V (4 ).Infoln ("new console config yaml:" )
436414 klog .V (4 ).Infof ("%s" , cm .Data )
437415 }
438- return cm , cmChanged , "ConsoleConfigBuilder" , cmErr
416+ return cm , "ConsoleConfigBuilder" , cmErr
439417}
440418
441419// Build telemetry configuration in following order:
@@ -498,67 +476,67 @@ func (co *consoleOperator) GetTelemetryConfiguration(ctx context.Context, operat
498476}
499477
500478// apply service-ca configmap
501- func (co * consoleOperator ) SyncServiceCAConfigMap (ctx context.Context , operatorConfig * operatorv1.Console ) (consoleCM * corev1.ConfigMap , changed bool , reason string , err error ) {
479+ func (co * consoleOperator ) SyncServiceCAConfigMap (ctx context.Context , operatorConfig * operatorv1.Console ) (consoleCM * corev1.ConfigMap , reason string , err error ) {
502480 required := configmapsub .DefaultServiceCAConfigMap (operatorConfig )
503481 // we can't use `resourceapply.ApplyConfigMap` since it compares data, and the service serving cert operator injects the data
504482 existing , err := co .targetNSConfigMapLister .ConfigMaps (required .Namespace ).Get (required .Name )
505483 if apierrors .IsNotFound (err ) {
506484 actual , err := co .configMapClient .ConfigMaps (required .Namespace ).Create (ctx , required , metav1.CreateOptions {})
507485 if err == nil {
508486 klog .V (4 ).Infoln ("service-ca configmap created" )
509- return actual , true , "" , err
487+ return actual , "" , err
510488 } else {
511- return actual , true , "FailedCreate" , err
489+ return actual , "FailedCreate" , err
512490 }
513491 }
514492 if err != nil {
515- return nil , false , "FailedGet" , err
493+ return nil , "FailedGet" , err
516494 }
517495
518496 modified := resourcemerge .BoolPtr (false )
519497 resourcemerge .EnsureObjectMeta (modified , & existing .ObjectMeta , required .ObjectMeta )
520498 if ! * modified {
521499 klog .V (4 ).Infoln ("service-ca configmap exists and is in the correct state" )
522- return existing , false , "" , nil
500+ return existing , "" , nil
523501 }
524502
525503 actual , err := co .configMapClient .ConfigMaps (required .Namespace ).Update (ctx , existing , metav1.UpdateOptions {})
526504 if err == nil {
527505 klog .V (4 ).Infoln ("service-ca configmap updated" )
528- return actual , true , "" , err
506+ return actual , "" , err
529507 } else {
530- return actual , true , "FailedUpdate" , err
508+ return actual , "FailedUpdate" , err
531509 }
532510}
533511
534- func (co * consoleOperator ) SyncTrustedCAConfigMap (ctx context.Context , operatorConfig * operatorv1.Console ) (trustedCA * corev1.ConfigMap , changed bool , reason string , err error ) {
512+ func (co * consoleOperator ) SyncTrustedCAConfigMap (ctx context.Context , operatorConfig * operatorv1.Console ) (trustedCA * corev1.ConfigMap , reason string , err error ) {
535513 required := configmapsub .DefaultTrustedCAConfigMap (operatorConfig )
536514 existing , err := co .targetNSConfigMapLister .ConfigMaps (required .Namespace ).Get (required .Name )
537515 if apierrors .IsNotFound (err ) {
538516 actual , err := co .configMapClient .ConfigMaps (required .Namespace ).Create (ctx , required , metav1.CreateOptions {})
539517 if err != nil {
540- return actual , true , "FailedCreate" , err
518+ return actual , "FailedCreate" , err
541519 }
542520 klog .V (4 ).Infoln ("trusted-ca-bundle configmap created" )
543- return actual , true , "" , err
521+ return actual , "" , err
544522 }
545523 if err != nil {
546- return nil , false , "FailedGet" , err
524+ return nil , "FailedGet" , err
547525 }
548526
549527 modified := resourcemerge .BoolPtr (false )
550528 resourcemerge .EnsureObjectMeta (modified , & existing .ObjectMeta , required .ObjectMeta )
551529 if ! * modified {
552530 klog .V (4 ).Infoln ("trusted-ca-bundle configmap exists and is in the correct state" )
553- return existing , false , "" , nil
531+ return existing , "" , nil
554532 }
555533
556534 actual , err := co .configMapClient .ConfigMaps (required .Namespace ).Update (ctx , existing , metav1.UpdateOptions {})
557535 if err != nil {
558- return actual , true , "FailedUpdate" , err
536+ return actual , "FailedUpdate" , err
559537 }
560538 klog .V (4 ).Infoln ("trusted-ca-bundle configmap updated" )
561- return actual , true , "" , err
539+ return actual , "" , err
562540}
563541
564542// SyncTechPreview determines if tech preview features should be enabled based on cluster FeatureSet
0 commit comments