diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index 30a20e98ab..63620892cd 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -38,7 +38,6 @@ import ( "github.com/shirou/gopsutil/cpu" gopshost "github.com/shirou/gopsutil/host" "github.com/spf13/cobra" - "github.com/spf13/pflag" "github.com/spf13/viper" cmdcfg "k8s.io/minikube/cmd/minikube/cmd/config" @@ -171,7 +170,21 @@ func runStart(cmd *cobra.Command, args []string) { validateKubernetesVersion(existing) ds, alts, specified := selectDriver(existing) - validateBaseImage(cmd.Flag(kicBaseImage), ds.Name) + if cmd.Flag(kicBaseImage).Changed { + if !isBaseImageApplicable(ds.Name) { + exit.Message(reason.Usage, + "flag --{{.imgFlag}} is not available for driver '{{.driver}}'. Did you mean to use '{{.docker}}' or '{{.podman}}' driver instead?\n"+ + "Please use --{{.isoFlag}} flag to configure VM based drivers", + out.V{ + "imgFlag": kicBaseImage, + "driver": ds.Name, + "docker": registry.Docker, + "podman": registry.Podman, + "isoFlag": isoURL, + }, + ) + } + } starter, err := provisionWithDriver(cmd, ds, existing) if err != nil { @@ -1191,29 +1204,8 @@ func validateKubernetesVersion(old *config.ClusterConfig) { } } -// validateBaseImage checks that --base-image is not passed if the drive being in use is KIC (docker/podman) -// if so, the function exits the process -func validateBaseImage(imageFlag *pflag.Flag, drv string) { - if !validBaseImageFlag(imageFlag.Changed, drv) { - exit.Message(reason.Usage, - "flag --{{.imgFlag}} is not available for driver '{{.driver}}'. Did you mean to use '{{.docker}}' or '{{.podman}}' driver instead?\n"+ - "Please use --{{.isoFlag}} flag to configure VM based drivers", - out.V{ - "imgFlag": imageFlag.Name, - "driver": drv, - "image": imageFlag.Value, - "docker": registry.Docker, - "podman": registry.Podman, - "isoFlag": isoURL, - }, - ) - } -} -func validBaseImageFlag(baseImageFlagSet bool, driver string) bool { - if baseImageFlagSet { - return registry.IsKIC(driver) - } - return true +func isBaseImageApplicable(drv string) bool { + return registry.IsKIC(drv) } func getKubernetesVersion(old *config.ClusterConfig) string { diff --git a/cmd/minikube/cmd/start_test.go b/cmd/minikube/cmd/start_test.go index 13da5639e4..a0752c1fd6 100644 --- a/cmd/minikube/cmd/start_test.go +++ b/cmd/minikube/cmd/start_test.go @@ -282,47 +282,28 @@ func TestSuggestMemoryAllocation(t *testing.T) { } func TestBaseImageFlagDriverCombo(t *testing.T) { - type testStruct struct { - description string - imageSet bool - driver string - } - invalidCombos := []testStruct{ - {"KVM2 with flag", true, driver.KVM2}, - {"VirtualBox with flag", true, driver.VirtualBox}, - {"HyperKit with flag", true, driver.HyperKit}, - {"VMware with flag", true, driver.VMware}, - {"VMwareFusion with flag", true, driver.VMwareFusion}, - {"HyperV with flag", true, driver.HyperV}, - {"Parallels with flag", true, driver.Parallels}, - } - validCombos := []testStruct{ - {"Docker with flag", true, driver.Docker}, - {"Podman with flag", true, driver.Podman}, - {"Docker w/o flag", false, driver.Docker}, - {"Podman w/o flag", false, driver.Podman}, - {"KVM2 w/o flag", false, driver.KVM2}, - {"VirtualBox w/o flag", false, driver.VirtualBox}, - {"HyperKit w/o flag", false, driver.HyperKit}, - {"VMware w/o flag", false, driver.VMware}, - {"VMwareFusion w/o flag", false, driver.VMwareFusion}, - {"HyperV w/o flag", false, driver.HyperV}, - {"Parallels w/o flag", false, driver.Parallels}, + tests := []struct { + driver string + canUseBaseImg bool + }{ + {driver.Docker, true}, + {driver.Podman, true}, + {driver.None, false}, + {driver.KVM2, false}, + {driver.VirtualBox, false}, + {driver.HyperKit, false}, + {driver.VMware, false}, + {driver.VMwareFusion, false}, + {driver.HyperV, false}, + {driver.Parallels, false}, } - for _, test := range validCombos { - t.Run(test.description, func(t *testing.T) { - if !validBaseImageFlag(test.imageSet, test.driver) { - t.Errorf("invalidBaseImageFlag(base-image-set=%v, driver=%v): got false, expected true", - test.imageSet, test.driver) - } - }) - } - for _, test := range invalidCombos { - t.Run(test.description, func(t *testing.T) { - if validBaseImageFlag(test.imageSet, test.driver) { - t.Errorf("invalidBaseImageFlag(base-image-set=%v, driver=%v): got true, expected false", - test.imageSet, test.driver) + for _, test := range tests { + t.Run(test.driver, func(t *testing.T) { + got := isBaseImageApplicable(test.driver) + if got != test.canUseBaseImg { + t.Errorf("isBaseImageApplicable(driver=%v): got %v, expected %v", + test.driver, got, test.canUseBaseImg) } }) }