Skip to content

Commit c24ebfb

Browse files
committed
refactor(object-controller): isolate standalone manager PR
Move Secret retry behavior and revision-status wording to focused branches. Keep this PR scoped to manager setup and its integration coverage. Signed-off-by: Fabricio Aguiar <fabricio.aguiar@gmail.com> rh-pre-commit.version: 2.3.2 rh-pre-commit.check-secrets: ENABLED
1 parent 7f8d0ea commit c24ebfb

5 files changed

Lines changed: 18 additions & 237 deletions

File tree

‎cmd/object-controller/main_test.go‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ func TestStandaloneController(t *testing.T) {
135135
progressing := meta.FindStatusCondition(cos.Status.Conditions, ocv1.ClusterObjectSetTypeProgressing)
136136
if assert.NotNil(collect, progressing) {
137137
assert.Equal(collect, ocv1.ReasonSucceeded, progressing.Reason)
138-
assert.Equal(collect, "Revision 1 has rolled out.", progressing.Message)
139138
}
140139
}, time.Minute, 100*time.Millisecond)
141140
cm := &corev1.ConfigMap{}

‎internal/object-controller/controllers/clusterobjectset_controller.go‎

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"time"
1616

1717
"github.com/go-logr/logr"
18+
corev1 "k8s.io/api/core/v1"
1819
"k8s.io/apimachinery/pkg/api/equality"
1920
apierrors "k8s.io/apimachinery/pkg/api/errors"
2021
"k8s.io/apimachinery/pkg/api/meta"
@@ -131,20 +132,14 @@ func (c *ClusterObjectSetReconciler) reconcile(ctx context.Context, cos *ocv1.Cl
131132
remaining, hasDeadline := durationUntilDeadline(c.Clock, cos)
132133
isDeadlineExceeded := hasDeadline && remaining <= 0
133134

134-
secretReader := newReferencedSecretReader(c.Client)
135135
// Blocked takes precedence over ProgressDeadlineExceeded: it is more actionable for the user.
136-
if err := c.verifyReferencedSecretsImmutable(ctx, cos, secretReader); err != nil {
137-
var mutableSecrets *mutableSecretsError
138-
if !errors.As(err, &mutableSecrets) {
139-
setRetryingConditions(l, cos, err.Error(), isDeadlineExceeded)
140-
return ctrl.Result{}, err
141-
}
136+
if err := c.verifyReferencedSecretsImmutable(ctx, cos); err != nil {
142137
l.Error(err, "referenced Secret verification failed, blocking reconciliation")
143138
markAsNotProgressing(cos, ocv1.ClusterObjectSetReasonBlocked, err.Error())
144-
return ctrl.Result{RequeueAfter: 10 * time.Second}, nil
139+
return ctrl.Result{}, nil
145140
}
146141

147-
phases, currentPhases, opts, err := c.buildBoxcutterPhases(ctx, cos, secretReader)
142+
phases, currentPhases, opts, err := c.buildBoxcutterPhases(ctx, cos)
148143
if err != nil {
149144
setRetryingConditions(l, cos, err.Error(), isDeadlineExceeded)
150145
return ctrl.Result{}, fmt.Errorf("converting to boxcutter revision: %v", err)
@@ -230,9 +225,6 @@ func (c *ClusterObjectSetReconciler) reconcile(ctx context.Context, cos *ocv1.Cl
230225
}
231226

232227
revVersion := cos.GetAnnotations()[labels.BundleVersionKey]
233-
if revVersion == "" {
234-
revVersion = fmt.Sprint(cos.Spec.Revision)
235-
}
236228
if rres.InTransition() {
237229
markAsProgressing(l, cos, ocv1.ReasonRollingOut, fmt.Sprintf("Revision %s is rolling out.", revVersion), isDeadlineExceeded)
238230
}
@@ -475,7 +467,7 @@ func (c *ClusterObjectSetReconciler) listOtherActiveRevisions(
475467
return result, nil
476468
}
477469

478-
func (c *ClusterObjectSetReconciler) buildBoxcutterPhases(ctx context.Context, cos *ocv1.ClusterObjectSet, secretReader *referencedSecretReader) ([]boxcutter.Phase, []ocv1.ObservedPhase, []boxcutter.RevisionReconcileOption, error) {
470+
func (c *ClusterObjectSetReconciler) buildBoxcutterPhases(ctx context.Context, cos *ocv1.ClusterObjectSet) ([]boxcutter.Phase, []ocv1.ObservedPhase, []boxcutter.RevisionReconcileOption, error) {
479471
siblings, err := c.listSiblingRevisions(ctx, cos)
480472
if err != nil {
481473
return nil, nil, nil, fmt.Errorf("listing sibling revisions: %w", err)
@@ -507,7 +499,7 @@ func (c *ClusterObjectSetReconciler) buildBoxcutterPhases(ctx context.Context, c
507499
case specObj.Object.Object != nil:
508500
obj = specObj.Object.DeepCopy()
509501
case specObj.Ref.Name != "":
510-
resolved, err := secretReader.resolveObjectRef(ctx, specObj.Ref)
502+
resolved, err := c.resolveObjectRef(ctx, specObj.Ref)
511503
if err != nil {
512504
return nil, nil, nil, fmt.Errorf("resolving ref in phase %q: %w", specPhase.Name, err)
513505
}
@@ -549,10 +541,10 @@ func (c *ClusterObjectSetReconciler) buildBoxcutterPhases(ctx context.Context, c
549541

550542
// resolveObjectRef fetches the referenced Secret, reads the value at the specified key,
551543
// auto-detects gzip compression, and deserializes into an unstructured.Unstructured.
552-
func (r *referencedSecretReader) resolveObjectRef(ctx context.Context, ref ocv1.ObjectSourceRef) (*unstructured.Unstructured, error) {
544+
func (c *ClusterObjectSetReconciler) resolveObjectRef(ctx context.Context, ref ocv1.ObjectSourceRef) (*unstructured.Unstructured, error) {
545+
secret := &corev1.Secret{}
553546
key := client.ObjectKey{Name: ref.Name, Namespace: ref.Namespace}
554-
secret, err := r.get(ctx, key)
555-
if err != nil {
547+
if err := c.Client.Get(ctx, key, secret); err != nil {
556548
return nil, fmt.Errorf("getting Secret %s/%s: %w", ref.Namespace, ref.Name, err)
557549
}
558550

@@ -785,7 +777,7 @@ func verifyObservedPhases(stored, current []ocv1.ObservedPhase) error {
785777
// verifyReferencedSecretsImmutable checks that all referenced Secrets
786778
// have Immutable set to true. It collects all violations and returns
787779
// a single error listing every misconfigured Secret.
788-
func (c *ClusterObjectSetReconciler) verifyReferencedSecretsImmutable(ctx context.Context, cos *ocv1.ClusterObjectSet, secretReader *referencedSecretReader) error {
780+
func (c *ClusterObjectSetReconciler) verifyReferencedSecretsImmutable(ctx context.Context, cos *ocv1.ClusterObjectSet) error {
789781
type secretRef struct {
790782
name string
791783
namespace string
@@ -808,9 +800,9 @@ func (c *ClusterObjectSetReconciler) verifyReferencedSecretsImmutable(ctx contex
808800

809801
var mutableSecrets []string
810802
for _, ref := range refs {
803+
secret := &corev1.Secret{}
811804
key := client.ObjectKey{Name: ref.name, Namespace: ref.namespace}
812-
secret, err := secretReader.get(ctx, key)
813-
if err != nil {
805+
if err := c.Client.Get(ctx, key, secret); err != nil {
814806
if apierrors.IsNotFound(err) {
815807
// Secret not yet available — skip verification.
816808
// resolveObjectRef will handle the not-found with a retryable error.
@@ -825,7 +817,8 @@ func (c *ClusterObjectSetReconciler) verifyReferencedSecretsImmutable(ctx contex
825817
}
826818

827819
if len(mutableSecrets) > 0 {
828-
return &mutableSecretsError{names: mutableSecrets}
820+
return fmt.Errorf("the following secrets are not immutable (referenced secrets must have immutable set to true): %s",
821+
strings.Join(mutableSecrets, ", "))
829822
}
830823

831824
return nil

‎internal/object-controller/controllers/clusterobjectset_controller_internal_test.go‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ func TestVerifyReferencedSecretsImmutable(t *testing.T) {
436436
},
437437
}
438438

439-
err := reconciler.verifyReferencedSecretsImmutable(t.Context(), cos, newReferencedSecretReader(testClient))
439+
err := reconciler.verifyReferencedSecretsImmutable(t.Context(), cos)
440440
require.NoError(t, err)
441441
})
442442

@@ -466,7 +466,7 @@ func TestVerifyReferencedSecretsImmutable(t *testing.T) {
466466
},
467467
}
468468

469-
err := reconciler.verifyReferencedSecretsImmutable(t.Context(), cos, newReferencedSecretReader(testClient))
469+
err := reconciler.verifyReferencedSecretsImmutable(t.Context(), cos)
470470
require.Error(t, err)
471471
assert.Contains(t, err.Error(), "not immutable")
472472
})
@@ -489,7 +489,7 @@ func TestVerifyReferencedSecretsImmutable(t *testing.T) {
489489
},
490490
}
491491

492-
err := reconciler.verifyReferencedSecretsImmutable(t.Context(), cos, newReferencedSecretReader(testClient))
492+
err := reconciler.verifyReferencedSecretsImmutable(t.Context(), cos)
493493
require.NoError(t, err)
494494
})
495495

@@ -523,7 +523,7 @@ func TestVerifyReferencedSecretsImmutable(t *testing.T) {
523523
},
524524
}
525525

526-
err := reconciler.verifyReferencedSecretsImmutable(t.Context(), cos, newReferencedSecretReader(testClient))
526+
err := reconciler.verifyReferencedSecretsImmutable(t.Context(), cos)
527527
require.NoError(t, err)
528528
assert.Equal(t, int32(1), secretGetCount.Load(), "secret should be fetched only once despite multiple references")
529529
})

‎internal/object-controller/controllers/referenced_secrets.go‎

Lines changed: 0 additions & 42 deletions
This file was deleted.

‎internal/object-controller/controllers/referenced_secrets_test.go‎

Lines changed: 0 additions & 169 deletions
This file was deleted.

0 commit comments

Comments
 (0)