Skip to content

Commit 277f171

Browse files
authored
feat: log delta differences for read-only resources when spec changes (#205)
Add informational logging when a read-only resource's desired state differs from its current state. This helps operators understand what changes would have been applied if the resource wasn't in read-only mode. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 39173f3 commit 277f171

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

pkg/runtime/reconciler.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,14 @@ func (r *resourceReconciler) Sync(
486486
return latest, err
487487
}
488488
} else if isReadOnly {
489+
delta := r.rd.Delta(desired, latest)
490+
if delta.DifferentAt("Spec") {
491+
rlog.Info(
492+
"desired resource state has changed, but resource is read-only - skipping update",
493+
"skipped", true,
494+
"diff", delta.Differences,
495+
)
496+
}
489497
return latest, nil
490498
} else {
491499
if adoptionPolicy == AdoptionPolicy_AdoptOrCreate {

pkg/runtime/reconciler_test.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -325,12 +325,10 @@ func TestReconcilerReadOnlyResource(t *testing.T) {
325325
rm.On("ReadOne", ctx, desired).Return(
326326
latest, nil,
327327
).Once()
328-
rm.On("Create", ctx, desired).Return(
329-
latest, nil,
330-
)
331328
rm.On("IsSynced", ctx, latest).Return(true, nil)
332-
rmf, _ := managedResourceManagerFactoryMocks(desired, latest)
333-
329+
rmf, rd := managedResourceManagerFactoryMocks(desired, latest)
330+
rd.On("Delta", desired, latest).Return(ackcompare.NewDelta())
331+
334332
r, kc, scmd := reconcilerMocks(rmf)
335333
rm.On("EnsureTags", ctx, desired, scmd).Return(nil)
336334
statusWriter := &ctrlrtclientmock.SubResourceWriter{}
@@ -339,10 +337,10 @@ func TestReconcilerReadOnlyResource(t *testing.T) {
339337
_, err := r.Sync(ctx, rm, desired)
340338
require.Nil(err)
341339
rm.AssertNumberOfCalls(t, "ReadOne", 1)
340+
rd.AssertCalled(t, "Delta", desired, latest)
342341
// Assert that the resource is not created or updated
343342
rm.AssertNotCalled(t, "Create", 0)
344343
rm.AssertNotCalled(t, "Update", 0)
345-
rm.AssertNotCalled(t, "Delta", 0)
346344
}
347345

348346
func TestReconcilerAdoptResource(t *testing.T) {

0 commit comments

Comments
 (0)