diff --git a/internal/controllers/wekacontainer/funcs_pod_ensure.go b/internal/controllers/wekacontainer/funcs_pod_ensure.go index 46171b58f..cbd053562 100644 --- a/internal/controllers/wekacontainer/funcs_pod_ensure.go +++ b/internal/controllers/wekacontainer/funcs_pod_ensure.go @@ -123,9 +123,14 @@ func (r *containerReconcilerLoop) ensurePod(ctx context.Context) error { image = drivers.GetBuilderImageForNode(node) } + builderFlags, ffErr := r.GetFeatureFlags(ctx) + if ffErr != nil { + return errors.Wrap(ffErr, "failed to get feature flags for drivers-builder") + } + payloadBytes, _ := json.Marshal(map[string]string{ //nolint:errcheck // error return value intentionally not checked "targetImage": container.Spec.Image, - "cliImage": image, + "cliImage": drivers.GetBuilderCliImage(builderFlags, container.Spec.Image, image), }) container.Spec.Instructions = &weka.Instructions{ Type: weka.InstructionCopyWekaFilesToDriverLoader, diff --git a/internal/drivers/drivers.go b/internal/drivers/drivers.go index 2a014d8bd..5fec24090 100644 --- a/internal/drivers/drivers.go +++ b/internal/drivers/drivers.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/weka/weka-operator/internal/config" + "github.com/weka/weka-operator/internal/pkg/domain" "github.com/weka/weka-operator/internal/services" v1 "k8s.io/api/core/v1" ) @@ -66,13 +67,22 @@ func GetBuilderImageForNode(node *v1.Node) string { func GetLoaderImageForNode(ctx context.Context, node *v1.Node, image string) string { flags, err := services.GetFeatureFlags(ctx, image) - if err == nil && flags != nil { + if err != nil { + flags = nil + } + + return GetBuilderCliImage(flags, image, GetBuilderImageForNode(node)) +} + +// GetBuilderCliImage picks the image that supplies the weka CLI staged for the +// drivers-builder init containers. The extraction step bind-mounts over /opt/weka, +// where the cluster image keeps its CLI, so a CLI is always staged out of band; +// prefer the cluster image's own CLI when it can copy driver files itself. +func GetBuilderCliImage(flags *domain.FeatureFlags, clusterImage, builderImage string) string { + if flags != nil && flags.WekaGetCopyLocalDriverFiles { // innovation cli --kernel-build-id etc. - if flags.WekaGetCopyLocalDriverFiles { - return image - } + return clusterImage } - // else - can use the builder image that has "innovation" cli - return GetBuilderImageForNode(node) + return builderImage }