@@ -1734,7 +1734,10 @@ func (dn *CoreOSDaemon) switchKernel(oldConfig, newConfig *mcfgv1.MachineConfig)
17341734 logSystem ("Re-applying kernel type %s" , newKtype )
17351735 }
17361736
1737- kernelPackages := dn .getKernelPackagesForRelease ()
1737+ kernelPackages , err := dn .getKernelPackagesForTargetRelease ()
1738+ if err != nil {
1739+ return fmt .Errorf ("failed to get kernel packages for target release: %w" , err )
1740+ }
17381741 if newKtype == ctrlcommon .KernelTypeRealtime {
17391742 // Switch to RT kernel
17401743 args := []string {"override" , "remove" }
@@ -1757,10 +1760,22 @@ func (dn *CoreOSDaemon) switchKernel(oldConfig, newConfig *mcfgv1.MachineConfig)
17571760 return fmt .Errorf ("unhandled kernel type %s" , newKtype )
17581761}
17591762
1760- // getKernelPackagesForRelease returns the list of kernel packaged for the running OS release.
1761- func (dn * CoreOSDaemon ) getKernelPackagesForRelease () releaseKernelPackages {
1763+ // getKernelPackagesForTargetRelease returns the list of kernel packaged for the running OS release.
1764+ func (dn * CoreOSDaemon ) getKernelPackagesForTargetRelease () ( releaseKernelPackages , error ) {
17621765 // TODO: Drop this code and use https://github.com/coreos/rpm-ostree/issues/2542 instead
17631766
1767+ // Fetch the OS deployments to infer the target OS version from them
1768+ booted , staged , err := dn .NodeUpdaterClient .GetBootedAndStagedDeployment ()
1769+ if err != nil {
1770+ return releaseKernelPackages {}, fmt .Errorf ("error fetching OS deployments : %v" , err )
1771+ }
1772+
1773+ // If there's a staged deployment the packages will be installed in it instead of in the current booted deployment
1774+ targetDeployment := booted
1775+ if staged != nil {
1776+ targetDeployment = staged
1777+ }
1778+
17641779 kernelPackages := releaseKernelPackages {
17651780 defaultKernel : []string {"kernel" , "kernel-core" , "kernel-modules" , "kernel-modules-core" , "kernel-modules-extra" },
17661781 hugePagesKernel : []string {"kernel-64k-core" , "kernel-64k-modules" , "kernel-64k-modules-core" , "kernel-64k-modules-extra" },
@@ -1771,10 +1786,11 @@ func (dn *CoreOSDaemon) getKernelPackagesForRelease() releaseKernelPackages {
17711786
17721787 // RHEL10 early bugfix of OCPBUGS-62925
17731788 // RHEL10 doesn't ship with kernel-rt-kvm
1774- if ! dn .os .IsEL10 () {
1789+ targetVersion := NewTargetOSVersionFromDeployment (targetDeployment )
1790+ if ! targetVersion .IsEL10 () {
17751791 kernelPackages .realtimeKernel = append (kernelPackages .realtimeKernel , "kernel-rt-kvm" )
17761792 }
1777- return kernelPackages
1793+ return kernelPackages , nil
17781794}
17791795
17801796// updateFiles writes files specified by the nodeconfig to disk. it also writes
0 commit comments