From 2ce61f95f6d850ad238034bf22b5f769b96f4e5f Mon Sep 17 00:00:00 2001 From: Tariq Ibrahim Date: Wed, 14 Jan 2026 14:08:55 -0800 Subject: [PATCH] add support for RockyLinux driver containers Signed-off-by: Tariq Ibrahim --- controllers/object_controls.go | 8 ++++ controllers/object_controls_test.go | 59 +++++++++++++++++++++++++++++ internal/state/driver_volumes.go | 2 + internal/state/nodepool.go | 5 +++ 4 files changed, 74 insertions(+) diff --git a/controllers/object_controls.go b/controllers/object_controls.go index 79eb09b40..f26a0c063 100644 --- a/controllers/object_controls.go +++ b/controllers/object_controls.go @@ -211,6 +211,7 @@ var RepoConfigPathMap = map[string]string{ "ubuntu": "/etc/apt/sources.list.d", "rhcos": "/etc/yum.repos.d", "rhel": "/etc/yum.repos.d", + "rocky": "/etc/yum.repos.d", "sles": "/etc/zypp/repos.d", "sl-micro": "/etc/zypp/repos.d", } @@ -225,6 +226,7 @@ var CertConfigPathMap = map[string]string{ "ubuntu": "/usr/local/share/ca-certificates", "rhcos": "/etc/pki/ca-trust/extracted/pem", "rhel": "/etc/pki/ca-trust/extracted/pem", + "rocky": "/etc/pki/ca-trust/extracted/pem", "sles": "/etc/pki/trust/anchors", "sl-micro": "/etc/pki/trust/anchors", } @@ -708,6 +710,12 @@ func kernelFullVersion(n ClusterPolicyController) (string, string, string) { if !ok { return kFVersion, "", "" } + + if osName == "rocky" { + // If the OS is RockyLinux, we will omit the RockyLinux minor version when constructing the os image tag + osVersion = strings.Split(osVersion, ".")[0] + } + osTag := fmt.Sprintf("%s%s", osName, osVersion) return kFVersion, osTag, osVersion diff --git a/controllers/object_controls_test.go b/controllers/object_controls_test.go index 5a7f20501..2e5ea8285 100644 --- a/controllers/object_controls_test.go +++ b/controllers/object_controls_test.go @@ -1518,3 +1518,62 @@ func TestRepoConfigPathMap(t *testing.T) { require.Equal(t, path, val, "Expected path for %s to be %s", os, path) } } + +func TestKernelFullVersion(t *testing.T) { + tests := []struct { + node *corev1.Node + expected map[string]string + }{ + { + node: &corev1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-node", + Labels: map[string]string{ + nfdOSReleaseIDLabelKey: "rocky", + nfdOSVersionIDLabelKey: "9.7", + nfdKernelLabelKey: "5.14.0-611.5.1.el9_7.x86_64", + commonGPULabelKey: "true", + }, + }, + }, + expected: map[string]string{ + "kernelFullVersion": "5.14.0-611.5.1.el9_7.x86_64", + "imageTagSuffix": "rocky9", + "osVersionMajor": "9", + }, + }, + { + node: &corev1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-node", + Labels: map[string]string{ + nfdOSReleaseIDLabelKey: "ubuntu", + nfdOSVersionIDLabelKey: "24.04", + nfdKernelLabelKey: "6.8.0-60-generic", + commonGPULabelKey: "true", + }, + }, + }, + expected: map[string]string{ + "kernelFullVersion": "6.8.0-60-generic", + "imageTagSuffix": "ubuntu24.04", + "osVersionMajor": "24.04", + }, + }, + } + + for _, test := range tests { + mockClient := fake.NewFakeClient(test.node) + + n := ClusterPolicyController{ + ctx: t.Context(), + client: mockClient, + } + + kFVersion, osTag, osVersion := kernelFullVersion(n) + + require.Equal(t, test.expected["kernelFullVersion"], kFVersion) + require.Equal(t, test.expected["imageTagSuffix"], osTag) + require.Equal(t, test.expected["osVersionMajor"], osVersion) + } +} diff --git a/internal/state/driver_volumes.go b/internal/state/driver_volumes.go index fd6669947..c9e13b998 100644 --- a/internal/state/driver_volumes.go +++ b/internal/state/driver_volumes.go @@ -37,6 +37,7 @@ var RepoConfigPathMap = map[string]string{ "ubuntu": "/etc/apt/sources.list.d", "rhcos": "/etc/yum.repos.d", "rhel": "/etc/yum.repos.d", + "rocky": "/etc/yum.repos.d", "sles": "/etc/zypp/repos.d", "sl-micro": "/etc/zypp/repos.d", } @@ -51,6 +52,7 @@ var CertConfigPathMap = map[string]string{ "ubuntu": "/usr/local/share/ca-certificates", "rhcos": "/etc/pki/ca-trust/extracted/pem", "rhel": "/etc/pki/ca-trust/extracted/pem", + "rocky": "/etc/pki/ca-trust/extracted/pem", "sles": "/etc/pki/trust/anchors", "sl-micro": "/etc/pki/trust/anchors", } diff --git a/internal/state/nodepool.go b/internal/state/nodepool.go index cd1d68b72..ddfc0c2e0 100644 --- a/internal/state/nodepool.go +++ b/internal/state/nodepool.go @@ -20,6 +20,7 @@ import ( "context" "fmt" "maps" + "strings" corev1 "k8s.io/api/core/v1" "sigs.k8s.io/controller-runtime/pkg/client" @@ -132,5 +133,9 @@ func getNodePools(ctx context.Context, k8sClient client.Client, selector map[str } func (n nodePool) getOS() string { + if n.osRelease == "rocky" { + // If the OS is RockyLinux, we will omit the RockyLinux minor version when constructing the os image tag + n.osVersion = strings.Split(n.osVersion, ".")[0] + } return fmt.Sprintf("%s%s", n.osRelease, n.osVersion) }