Simplify base-image flag validation

pull/9300/head
Ilya Zuyev 2020-09-22 14:10:47 -07:00
parent 76d3c9d7bb
commit bf8ec63ca9
2 changed files with 37 additions and 64 deletions

View File

@ -38,7 +38,6 @@ import (
"github.com/shirou/gopsutil/cpu" "github.com/shirou/gopsutil/cpu"
gopshost "github.com/shirou/gopsutil/host" gopshost "github.com/shirou/gopsutil/host"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/pflag"
"github.com/spf13/viper" "github.com/spf13/viper"
cmdcfg "k8s.io/minikube/cmd/minikube/cmd/config" cmdcfg "k8s.io/minikube/cmd/minikube/cmd/config"
@ -171,7 +170,21 @@ func runStart(cmd *cobra.Command, args []string) {
validateKubernetesVersion(existing) validateKubernetesVersion(existing)
ds, alts, specified := selectDriver(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) starter, err := provisionWithDriver(cmd, ds, existing)
if err != nil { 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) func isBaseImageApplicable(drv string) bool {
// if so, the function exits the process return registry.IsKIC(drv)
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 getKubernetesVersion(old *config.ClusterConfig) string { func getKubernetesVersion(old *config.ClusterConfig) string {

View File

@ -282,47 +282,28 @@ func TestSuggestMemoryAllocation(t *testing.T) {
} }
func TestBaseImageFlagDriverCombo(t *testing.T) { func TestBaseImageFlagDriverCombo(t *testing.T) {
type testStruct struct { tests := []struct {
description string driver string
imageSet bool canUseBaseImg bool
driver string }{
} {driver.Docker, true},
invalidCombos := []testStruct{ {driver.Podman, true},
{"KVM2 with flag", true, driver.KVM2}, {driver.None, false},
{"VirtualBox with flag", true, driver.VirtualBox}, {driver.KVM2, false},
{"HyperKit with flag", true, driver.HyperKit}, {driver.VirtualBox, false},
{"VMware with flag", true, driver.VMware}, {driver.HyperKit, false},
{"VMwareFusion with flag", true, driver.VMwareFusion}, {driver.VMware, false},
{"HyperV with flag", true, driver.HyperV}, {driver.VMwareFusion, false},
{"Parallels with flag", true, driver.Parallels}, {driver.HyperV, false},
} {driver.Parallels, false},
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},
} }
for _, test := range validCombos { for _, test := range tests {
t.Run(test.description, func(t *testing.T) { t.Run(test.driver, func(t *testing.T) {
if !validBaseImageFlag(test.imageSet, test.driver) { got := isBaseImageApplicable(test.driver)
t.Errorf("invalidBaseImageFlag(base-image-set=%v, driver=%v): got false, expected true", if got != test.canUseBaseImg {
test.imageSet, test.driver) t.Errorf("isBaseImageApplicable(driver=%v): got %v, expected %v",
} test.driver, got, test.canUseBaseImg)
})
}
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)
} }
}) })
} }