From c7dfe856122ce093fe6e2419d3131d4c41555045 Mon Sep 17 00:00:00 2001 From: vamshi Date: Fri, 18 Jul 2025 15:31:55 +0530 Subject: [PATCH] fix: Don't show VirtualBox warning when auto-selected minikube should not warn users about VirtualBox driver when it was auto-selected rather than manually specified by the user. Added DriverAutoSelected field to ClusterConfig to track whether the driver was automatically selected or manually chosen, and updated the VirtualBox warning logic to only show warnings for manually selected drivers. Signed-off-by: vamshi --- cmd/minikube/cmd/start.go | 8 ++++---- cmd/minikube/cmd/start_flags.go | 9 ++++++--- cmd/minikube/cmd/start_test.go | 4 ++-- pkg/minikube/config/types.go | 1 + pkg/minikube/node/start.go | 4 ++-- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index bf1649c8da36..199b230377b0 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -225,7 +225,7 @@ func runStart(cmd *cobra.Command, _ []string) { useForce := viper.GetBool(force) - starter, err := provisionWithDriver(cmd, ds, existing) + starter, err := provisionWithDriver(cmd, ds, existing, specified) if err != nil { node.ExitIfFatal(err, useForce) machine.MaybeDisplayAdvice(err, ds.Name) @@ -252,7 +252,7 @@ func runStart(cmd *cobra.Command, _ []string) { if err != nil { out.WarningT("Failed to delete cluster {{.name}}, proceeding with retry anyway.", out.V{"name": ClusterFlagValue()}) } - starter, err = provisionWithDriver(cmd, ds, existing) + starter, err = provisionWithDriver(cmd, ds, existing, false) if err != nil { continue } @@ -299,7 +299,7 @@ func runStart(cmd *cobra.Command, _ []string) { } } -func provisionWithDriver(cmd *cobra.Command, ds registry.DriverState, existing *config.ClusterConfig) (node.Starter, error) { +func provisionWithDriver(cmd *cobra.Command, ds registry.DriverState, existing *config.ClusterConfig, driverManuallySpecified bool) (node.Starter, error) { driverName := ds.Name klog.Infof("selected driver: %s", driverName) validateDriver(ds, existing) @@ -341,7 +341,7 @@ func provisionWithDriver(cmd *cobra.Command, ds registry.DriverState, existing * } rtime := getContainerRuntime(existing) - cc, n, err := generateClusterConfig(cmd, existing, k8sVersion, rtime, driverName) + cc, n, err := generateClusterConfig(cmd, existing, k8sVersion, rtime, driverName, !driverManuallySpecified) if err != nil { return node.Starter{}, errors.Wrap(err, "Failed to generate cluster config") } diff --git a/cmd/minikube/cmd/start_flags.go b/cmd/minikube/cmd/start_flags.go index 0028d5031047..3e08da816d05 100644 --- a/cmd/minikube/cmd/start_flags.go +++ b/cmd/minikube/cmd/start_flags.go @@ -312,10 +312,12 @@ func ClusterFlagValue() string { } // generateClusterConfig generate a config.ClusterConfig based on flags or existing cluster config -func generateClusterConfig(cmd *cobra.Command, existing *config.ClusterConfig, k8sVersion string, rtime string, drvName string) (config.ClusterConfig, config.Node, error) { +func generateClusterConfig(cmd *cobra.Command, existing *config.ClusterConfig, k8sVersion string, rtime string, drvName string, driverAutoSelected bool) (config.ClusterConfig, config.Node, error) { var cc config.ClusterConfig if existing != nil { cc = updateExistingConfigFromFlags(cmd, existing) + // Update the DriverAutoSelected flag based on current selection method + cc.DriverAutoSelected = driverAutoSelected // identify appropriate cni then configure cruntime accordingly if _, err := cni.New(&cc); err != nil { @@ -323,7 +325,7 @@ func generateClusterConfig(cmd *cobra.Command, existing *config.ClusterConfig, k } } else { klog.Info("no existing cluster config was found, will generate one from the flags ") - cc = generateNewConfigFromFlags(cmd, k8sVersion, rtime, drvName) + cc = generateNewConfigFromFlags(cmd, k8sVersion, rtime, drvName, driverAutoSelected) cnm, err := cni.New(&cc) if err != nil { @@ -547,7 +549,7 @@ func validateVfkitNetwork(n string) string { } // generateNewConfigFromFlags generate a config.ClusterConfig based on flags -func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, rtime string, drvName string) config.ClusterConfig { +func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, rtime string, drvName string, driverAutoSelected bool) config.ClusterConfig { var cc config.ClusterConfig // networkPlugin cni deprecation warning @@ -578,6 +580,7 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, rtime str CPUs: getCPUCount(drvName), DiskSize: getDiskSize(), Driver: drvName, + DriverAutoSelected: driverAutoSelected, ListenAddress: viper.GetString(listenAddress), HyperkitVpnKitSock: viper.GetString(vpnkitSock), HyperkitVSockPorts: viper.GetStringSlice(vsockPorts), diff --git a/cmd/minikube/cmd/start_test.go b/cmd/minikube/cmd/start_test.go index a4786ee1712c..762400d92750 100644 --- a/cmd/minikube/cmd/start_test.go +++ b/cmd/minikube/cmd/start_test.go @@ -169,7 +169,7 @@ func TestMirrorCountry(t *testing.T) { viper.SetDefault(imageRepository, test.imageRepository) viper.SetDefault(imageMirrorCountry, test.mirrorCountry) viper.SetDefault(kvmNUMACount, 1) - config, _, err := generateClusterConfig(cmd, nil, k8sVersion, rtime, driver.Mock) + config, _, err := generateClusterConfig(cmd, nil, k8sVersion, rtime, driver.Mock, false) if err != nil { t.Fatalf("Got unexpected error %v during config generation", err) } @@ -230,7 +230,7 @@ func TestGenerateCfgFromFlagsHTTPProxyHandling(t *testing.T) { cfg.DockerEnv = []string{} // clear docker env to avoid pollution proxy.SetDockerEnv() - config, _, err := generateClusterConfig(cmd, nil, k8sVersion, rtime, "none") + config, _, err := generateClusterConfig(cmd, nil, k8sVersion, rtime, "none", false) if err != nil { t.Fatalf("Got unexpected error %v during config generation", err) } diff --git a/pkg/minikube/config/types.go b/pkg/minikube/config/types.go index d8dc05281e78..0b3fc6c71534 100644 --- a/pkg/minikube/config/types.go +++ b/pkg/minikube/config/types.go @@ -43,6 +43,7 @@ type ClusterConfig struct { CPUs int DiskSize int Driver string + DriverAutoSelected bool // Track if driver was auto-selected vs manually chosen HyperkitVpnKitSock string // Only used by the Hyperkit driver HyperkitVSockPorts []string // Only used by the Hyperkit driver DockerEnv []string // Each entry is formatted as KEY=VALUE. diff --git a/pkg/minikube/node/start.go b/pkg/minikube/node/start.go index 9b6418c66e49..7ef061ebce11 100755 --- a/pkg/minikube/node/start.go +++ b/pkg/minikube/node/start.go @@ -218,8 +218,8 @@ func Start(starter Starter) (*kubeconfig.Settings, error) { // nolint:gocyclo go addons.Enable(&wg, starter.Cfg, list, enabledAddons) } - // discourage use of the virtualbox driver - if starter.Cfg.Driver == driver.VirtualBox && viper.GetBool(config.WantVirtualBoxDriverWarning) { + // discourage use of the virtualbox driver, but only if it was manually selected + if starter.Cfg.Driver == driver.VirtualBox && !starter.Cfg.DriverAutoSelected && viper.GetBool(config.WantVirtualBoxDriverWarning) { warnVirtualBox() }