diff --git a/pkg/daemon/update.go b/pkg/daemon/update.go index 3a6c585186..5938c65880 100644 --- a/pkg/daemon/update.go +++ b/pkg/daemon/update.go @@ -2057,6 +2057,28 @@ func (dn *CoreOSDaemon) applyLayeredOSChanges(mcDiff machineConfigDiff, oldConfi defer os.Remove(extensionsRepo) } + // Always clean up pending, because the RT kernel switch logic below operates on booted, + // not pending. + if err := removePendingDeployment(); err != nil { + return fmt.Errorf("failed to remove pending deployment: %w", err) + } + + defer func() { + // Operations performed by rpm-ostree on the booted system are available + // as staged deployment. It gets applied only when we reboot the system. + // In case of an error during any rpm-ostree transaction, removing pending deployment + // should be sufficient to discard any applied changes. + if retErr != nil { + // Print out the error now so that if we fail to cleanup -p, we don't lose it. + glog.Infof("Rolling back applied changes to OS due to error: %v", retErr) + if err := removePendingDeployment(); err != nil { + errs := kubeErrs.NewAggregate([]error{err, retErr}) + retErr = fmt.Errorf("error removing staged deployment: %w", errs) + return + } + } + }() + // If we have an OS update *or* a kernel type change, then we must undo the RT kernel // enablement. if mcDiff.osUpdate || mcDiff.kernelType { @@ -2085,22 +2107,6 @@ func (dn *CoreOSDaemon) applyLayeredOSChanges(mcDiff machineConfigDiff, oldConfi // if we're here, we've successfully pivoted, or pivoting wasn't necessary, so we reset the error gauge mcdPivotErr.Set(0) - defer func() { - // Operations performed by rpm-ostree on the booted system are available - // as staged deployment. It gets applied only when we reboot the system. - // In case of an error during any rpm-ostree transaction, removing pending deployment - // should be sufficient to discard any applied changes. - if retErr != nil { - // Print out the error now so that if we fail to cleanup -p, we don't lose it. - glog.Infof("Rolling back applied changes to OS due to error: %v", retErr) - if err := removePendingDeployment(); err != nil { - errs := kubeErrs.NewAggregate([]error{err, retErr}) - retErr = fmt.Errorf("error removing staged deployment: %w", errs) - return - } - } - }() - if mcDiff.kargs { if err := dn.updateKernelArguments(oldConfig.Spec.KernelArguments, newConfig.Spec.KernelArguments); err != nil { return err