From 5459d0cd7f9945815e71bcaef214d4c283b2380d Mon Sep 17 00:00:00 2001 From: nb-ohad Date: Wed, 17 Jul 2024 23:05:36 +0300 Subject: [PATCH] Driver Controller: Align with standard library utilities Signed-off-by: nb-ohad --- internal/controller/driver_controller.go | 23 ++++++++-------- internal/utils/core.go | 35 ++---------------------- 2 files changed, 14 insertions(+), 44 deletions(-) diff --git a/internal/controller/driver_controller.go b/internal/controller/driver_controller.go index a873f27e..10c521c9 100644 --- a/internal/controller/driver_controller.go +++ b/internal/controller/driver_controller.go @@ -17,6 +17,7 @@ limitations under the License. package controller import ( + "cmp" "context" "encoding/json" "errors" @@ -341,12 +342,12 @@ func (r *driverReconcile) reconcileK8sCsiDriver() error { // unless we gureente that we started from the same point. existingCsiDriver.Spec.DeepCopyInto(&desiredCsiDriver.Spec) desiredCsiDriver.Spec.PodInfoOnMount = ptr.To(false) - desiredCsiDriver.Spec.AttachRequired = utils.FirstNonNil( + desiredCsiDriver.Spec.AttachRequired = cmp.Or( r.driver.Spec.AttachRequired, ptr.To(true), ) desiredCsiDriver.Spec.FSGroupPolicy = ptr.To( - utils.FirstNonEmpty( + cmp.Or( r.driver.Spec.FsGroupPolicy, r.driver.Spec.FsGroupPolicy, storagev1.FileFSGroupPolicy, @@ -415,14 +416,14 @@ func (r *driverReconcile) reconcileControllerPluginDeployment() error { MatchLabels: map[string]string{"app": appName}, } - leaderElectionSpec := utils.FirstNonNil(r.driver.Spec.LeaderElection, &defaultLeaderElection) - pluginSpec := utils.FirstNonNil(r.driver.Spec.ControllerPlugin, &csiv1a1.ControllerPluginSpec{}) - serviceAccountName := utils.FirstNonEmpty( + leaderElectionSpec := cmp.Or(r.driver.Spec.LeaderElection, &defaultLeaderElection) + pluginSpec := cmp.Or(r.driver.Spec.ControllerPlugin, &csiv1a1.ControllerPluginSpec{}) + serviceAccountName := cmp.Or( ptr.Deref(pluginSpec.ServiceAccountName, ""), fmt.Sprintf("csi-%s-ctrlplugin-sa", r.driverType), ) - imagePullPolicy := utils.FirstNonEmpty(pluginSpec.ImagePullPolicy, corev1.PullIfNotPresent) - grpcTimeout := utils.FirstNonZero(r.driver.Spec.GRpcTimeout, defaultGRrpcTimeout) + imagePullPolicy := cmp.Or(pluginSpec.ImagePullPolicy, corev1.PullIfNotPresent) + grpcTimeout := cmp.Or(r.driver.Spec.GRpcTimeout, defaultGRrpcTimeout) logLevel := ptr.Deref(r.driver.Spec.Log, csiv1a1.LogSpec{}).LogLevel forceKernelClient := r.isCephFsDriver() && r.driver.Spec.CephFsClientType == csiv1a1.KernelCephFsClient @@ -745,14 +746,14 @@ func (r *driverReconcile) reconcileNodePluginDeamonSet() error { } appName := daemonSet.Name - pluginSpec := utils.FirstNonNil(r.driver.Spec.NodePlugin, &csiv1a1.NodePluginSpec{}) - serviceAccountName := utils.FirstNonEmpty( + pluginSpec := cmp.Or(r.driver.Spec.NodePlugin, &csiv1a1.NodePluginSpec{}) + serviceAccountName := cmp.Or( ptr.Deref(pluginSpec.ServiceAccountName, ""), fmt.Sprintf("csi-%s-nodeplugin-sa", r.driverType), ) - imagePullPolicy := utils.FirstNonEmpty(pluginSpec.ImagePullPolicy, corev1.PullIfNotPresent) + imagePullPolicy := cmp.Or(pluginSpec.ImagePullPolicy, corev1.PullIfNotPresent) logLevel := ptr.Deref(r.driver.Spec.Log, csiv1a1.LogSpec{}).LogLevel - kubeletDirPath := utils.FirstNonEmpty(pluginSpec.KubeletDirPath, defaultKubeletDirPath) + kubeletDirPath := cmp.Or(pluginSpec.KubeletDirPath, defaultKubeletDirPath) forceKernelClient := r.isCephFsDriver() && r.driver.Spec.CephFsClientType == csiv1a1.KernelCephFsClient daemonSet.Spec = appsv1.DaemonSetSpec{ diff --git a/internal/utils/core.go b/internal/utils/core.go index 9bf854d5..ac3151be 100644 --- a/internal/utils/core.go +++ b/internal/utils/core.go @@ -17,10 +17,9 @@ limitations under the License. package utils import ( + "cmp" "strings" "sync" - - "golang.org/x/exp/constraints" ) // RunConcurrently runs all the of the given functions concurrently returning a channel with @@ -67,38 +66,8 @@ func If[T any](cond bool, trueVal, falseVal T) T { } } -// FirstNonNil returns the first non nil argument or nil if all arguments are nil -func FirstNonNil[T any](ptrs ...*T) *T { - for _, ptr := range ptrs { - if ptr != nil { - return ptr - } - } - return nil -} - -// FirstNonEmpty returns the first non empty string or an empty string if all -// arguments are empty strings -func FirstNonEmpty[T ~string](strings ...T) T { - for _, str := range strings { - if str != "" { - return str - } - } - return "" -} - -func FirstNonZero[T constraints.Integer](numbers ...T) T { - for _, num := range numbers { - if num != 0 { - return num - } - } - return 0 -} - // Clamp a number between min and max -func Clamp[T constraints.Ordered](val, low, high T) T { +func Clamp[T cmp.Ordered](val, low, high T) T { if val < low { return low } else if val > high {