Skip to content

Commit 20a8d94

Browse files
committed
OCPBUGS-64685: Dont report Progressing status when operands arew being reconciled
1 parent c052b8a commit 20a8d94

1 file changed

Lines changed: 40 additions & 62 deletions

File tree

pkg/console/operator/sync_v400.go

Lines changed: 40 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package operator
22

33
import (
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

Comments
 (0)