From 2ab26b1c902082ade1aefe80cb77e5f50db97772 Mon Sep 17 00:00:00 2001 From: Pablo Rodriguez Nava Date: Thu, 23 Apr 2026 14:29:45 +0200 Subject: [PATCH] OCPBUGS-84218: Fix units rollback if update failure This changes fixes an issue that happened only during rollbacks that had updated existing units. The existing modified unit were never rolledback as the write logic was using the non-rollback arguments effectively writting the target units twice, instead of going back to the previous units. Signed-off-by: Pablo Rodriguez Nava --- pkg/daemon/update.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/daemon/update.go b/pkg/daemon/update.go index 3b8dd7920e..9b25b53a06 100644 --- a/pkg/daemon/update.go +++ b/pkg/daemon/update.go @@ -1385,7 +1385,8 @@ func (dn *Daemon) update(oldConfig, newConfig *mcfgv1.MachineConfig, skipCertifi defer func() { if retErr != nil { - if err := dn.updateFiles(newIgnConfig, oldIgnConfig, addedOrChangedUnits, skipCertificateWrite, false); err != nil { + rollbackUnitDiff := ctrlcommon.GetChangedConfigUnitsByType(&newIgnConfig, &oldIgnConfig) + if err := dn.updateFiles(newIgnConfig, oldIgnConfig, slices.Concat(rollbackUnitDiff.Added, rollbackUnitDiff.Updated), skipCertificateWrite, false); err != nil { errs := kubeErrs.NewAggregate([]error{err, retErr}) retErr = fmt.Errorf("error rolling back files writes: %w", errs) return @@ -1525,7 +1526,8 @@ func (dn *Daemon) updateHypershift(oldConfig, newConfig *mcfgv1.MachineConfig, d defer func() { if retErr != nil { - if err := dn.updateFiles(newIgnConfig, oldIgnConfig, addedOrChangedUnits, false, false); err != nil { + rollbackUnitDiff := ctrlcommon.GetChangedConfigUnitsByType(&newIgnConfig, &oldIgnConfig) + if err := dn.updateFiles(newIgnConfig, oldIgnConfig, slices.Concat(rollbackUnitDiff.Added, rollbackUnitDiff.Updated), false, false); err != nil { errs := kubeErrs.NewAggregate([]error{err, retErr}) retErr = fmt.Errorf("error rolling back files writes: %w", errs) return