diff --git a/cmd/minikube/cmd/config/util_test.go b/cmd/minikube/cmd/config/util_test.go index 0815332033..cd05e88210 100644 --- a/cmd/minikube/cmd/config/util_test.go +++ b/cmd/minikube/cmd/config/util_test.go @@ -21,6 +21,7 @@ import ( "k8s.io/minikube/pkg/minikube/assets" pkgConfig "k8s.io/minikube/pkg/minikube/config" + "k8s.io/minikube/pkg/minikube/constants" ) var minikubeConfig = pkgConfig.MinikubeConfig{ @@ -47,7 +48,7 @@ func TestFindSetting(t *testing.T) { } func TestSetString(t *testing.T) { - err := SetString(minikubeConfig, "vm-driver", "virtualbox") + err := SetString(minikubeConfig, "vm-driver", constants.DriverVirtualbox) if err != nil { t.Fatalf("Couldnt set string: %v", err) } diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index b4b914b5b5..d7bc068da1 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -175,14 +175,7 @@ func runStart(cmd *cobra.Command, args []string) { console.OutStyle(console.Happy, "minikube %s on %s (%s)", version.GetVersion(), runtime.GOOS, runtime.GOARCH) validateConfig() - currentUser, err := user.Current() - - // Display warning if minikube is being started with root and vmDriver is not HyperV - if err != nil { - glog.Errorf("Error getting the current user: %v", err) - } else if currentUser.Name == "root" && !(viper.GetString(vmDriver) == "hyperv" || viper.GetString(vmDriver) == "none") { - console.OutStyle(console.WarningType, "Please don't run minikube as root or with 'sudo' privileges. It isn't necessary.") - } + validateUser() oldConfig, err := cfg.Load() if err != nil && !os.IsNotExist(err) { @@ -231,11 +224,12 @@ func runStart(cmd *cobra.Command, args []string) { host, preexisting := startHost(m, config.MachineConfig) ip := validateNetwork(host) - // Makes minikube node ip to bypass http(s) proxy. since it is local traffic. + // Bypass proxy for minikube's vm ip err = proxy.ExcludeIP(ip) if err != nil { console.ErrStyle(console.FailureType, "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,%s`.", ip) } + // Save IP to configuration file for subsequent use config.KubernetesConfig.NodeIP = ip if err := saveConfig(config); err != nil { @@ -364,6 +358,18 @@ func selectImageRepository(mirrorCountry string, k8sVersion string) (bool, strin return false, fallback, nil } +// validerUser validates minikube is run by the recommended user (privileged or regular) +func validateUser() { + currentUser, err := user.Current() + + // Display warning if minikube is being started with root and vmDriver is not HyperV + if err != nil { + glog.Errorf("Error getting the current user: %v", err) + } else if currentUser.Name == "root" && !(viper.GetString(vmDriver) == "hyperv" || viper.GetString(vmDriver) == "none") { + console.OutStyle(console.WarningType, "Please don't run minikube as root or with 'sudo' privileges. It isn't necessary.") + } +} + // validateConfig validates the supplied configuration against known bad combinations func validateConfig() { diskSizeMB := pkgutil.CalculateDiskSizeInMB(viper.GetString(humanReadableDiskSize)) @@ -371,11 +377,11 @@ func validateConfig() { exit.WithCode(exit.Config, "Requested disk size (%dMB) is less than minimum of %dMB", diskSizeMB, constants.MinimumDiskSizeMB) } - if viper.GetBool(gpu) && viper.GetString(vmDriver) != "kvm2" { - exit.Usage("Sorry, the --gpu feature is currently only supported with --vm-driver=kvm2") + if viper.GetBool(gpu) && viper.GetString(vmDriver) != constants.DriverKvm2 { + exit.Usage("Sorry, the --gpu feature is currently only supported with --vm-driver=%s", constants.DriverKvm2) } - if viper.GetBool(hidden) && viper.GetString(vmDriver) != "kvm2" { - exit.Usage("Sorry, the --hidden feature is currently only supported with --vm-driver=kvm2") + if viper.GetBool(hidden) && viper.GetString(vmDriver) != constants.DriverKvm2 { + exit.Usage("Sorry, the --hidden feature is currently only supported with --vm-driver=%s", constants.DriverKvm2) } err := autoSetOptions(viper.GetString(vmDriver)) diff --git a/pkg/drivers/hyperkit/driver.go b/pkg/drivers/hyperkit/driver.go index 84b7a3815a..94a729d1f7 100644 --- a/pkg/drivers/hyperkit/driver.go +++ b/pkg/drivers/hyperkit/driver.go @@ -118,7 +118,7 @@ func (d *Driver) Create() error { // DriverName returns the name of the driver func (d *Driver) DriverName() string { - return "hyperkit" + return constants.DriverHyperkit } // GetSSHHostname returns hostname for use with ssh @@ -223,7 +223,7 @@ func (d *Driver) Start() error { h.Memory = d.Memory h.UUID = d.UUID // This should stream logs from hyperkit, but doesn't seem to work. - logger := golog.New(os.Stderr, "hyperkit", golog.LstdFlags) + logger := golog.New(os.Stderr, constants.DriverHyperkit, golog.LstdFlags) h.SetLogger(logger) if vsockPorts, err := d.extractVSockPorts(); err != nil { diff --git a/pkg/drivers/kvm/kvm.go b/pkg/drivers/kvm/kvm.go index 1a160900f8..4f2ccd3c2f 100644 --- a/pkg/drivers/kvm/kvm.go +++ b/pkg/drivers/kvm/kvm.go @@ -220,7 +220,7 @@ func (d *Driver) GetSSHHostname() (string, error) { // DriverName returns the name of the driver func (d *Driver) DriverName() string { - return "kvm2" + return constants.DriverKvm2 } // Kill stops a host forcefully, including any containers that we are managing. diff --git a/pkg/minikube/cluster/cluster.go b/pkg/minikube/cluster/cluster.go index 40089d0f0b..7642204d13 100644 --- a/pkg/minikube/cluster/cluster.go +++ b/pkg/minikube/cluster/cluster.go @@ -409,7 +409,7 @@ func GetVMHostIP(host *host.Host) (net.IP, error) { switch host.DriverName { case "kvm": return net.ParseIP("192.168.42.1"), nil - case "kvm2": + case constants.DriverKvm2: return net.ParseIP("192.168.39.1"), nil case "hyperv": re := regexp.MustCompile(`"VSwitch": "(.*?)",`) @@ -420,7 +420,7 @@ func GetVMHostIP(host *host.Host) (net.IP, error) { return []byte{}, errors.Wrap(err, fmt.Sprintf("ip for interface (%s)", hypervVirtualSwitch)) } return ip, nil - case "virtualbox": + case constants.DriverVirtualbox: out, err := exec.Command(detectVBoxManageCmd(), "showvminfo", host.Name, "--machinereadable").Output() if err != nil { return []byte{}, errors.Wrap(err, "vboxmanage") @@ -432,9 +432,9 @@ func GetVMHostIP(host *host.Host) (net.IP, error) { return []byte{}, errors.Wrap(err, "Error getting VM/Host IP address") } return ip, nil - case "xhyve", "hyperkit": + case "xhyve", constants.DriverHyperkit: return net.ParseIP("192.168.64.1"), nil - case "vmware": + case constants.DriverVmware: vmIPString, err := host.Driver.GetIP() if err != nil { return []byte{}, errors.Wrap(err, "Error getting VM IP address") diff --git a/pkg/minikube/constants/constants.go b/pkg/minikube/constants/constants.go index 6690a0bf79..a01ab32af2 100644 --- a/pkg/minikube/constants/constants.go +++ b/pkg/minikube/constants/constants.go @@ -59,19 +59,37 @@ func ArchTag(hasTag bool) string { return "-" + runtime.GOARCH + ":" } +// DriverNone is the none driver. +const DriverNone = "none" + +// DriverKvmOld is the old kvm driver option +const DriverKvmOld = "kvm" + +// DriverKvm2 is the kvm2 driver option used in linux +const DriverKvm2 = "kvm2" + +// DriverVirtualbox is the virtualbox driver option +const DriverVirtualbox = "virtualbox" + +// DriverHyperkit is the hyperkit driver option for mac os +const DriverHyperkit = "hyperkit" + +// DriverVmware is the hyperkit driver option for mac os +const DriverVmware = "vmware" + // SupportedVMDrivers is a list of supported drivers on all platforms. Currently // used in gendocs. var SupportedVMDrivers = [...]string{ - "virtualbox", + DriverVirtualbox, "parallels", "vmwarefusion", - "kvm", + DriverKvmOld, "xhyve", "hyperv", - "hyperkit", - "kvm2", - "vmware", - "none", + DriverHyperkit, + DriverKvm2, + DriverVmware, + DriverNone, } // DefaultMinipath is the default Minikube path (under the home directory) @@ -130,7 +148,7 @@ const ( // MinimumDiskSizeMB is the minimum disk image size, in megabytes MinimumDiskSizeMB = 2000 // DefaultVMDriver is the default virtual machine driver name - DefaultVMDriver = "virtualbox" + DefaultVMDriver = DriverVirtualbox // DefaultStatusFormat is the default format of a host DefaultStatusFormat = `host: {{.Host}} kubelet: {{.Kubelet}} @@ -235,9 +253,6 @@ func GetKubernetesReleaseURLSHA1(binaryName, version, osName, archName string) s // IsMinikubeChildProcess is the name of "is minikube child process" variable const IsMinikubeChildProcess = "IS_MINIKUBE_CHILD_PROCESS" -// DriverNone is the none driver -const DriverNone = "none" - // FileScheme is the file scheme const FileScheme = "file" diff --git a/pkg/minikube/drivers/hyperkit/driver.go b/pkg/minikube/drivers/hyperkit/driver.go index 849fd6c52d..f848598ae4 100644 --- a/pkg/minikube/drivers/hyperkit/driver.go +++ b/pkg/minikube/drivers/hyperkit/driver.go @@ -31,7 +31,7 @@ import ( func init() { if err := registry.Register(registry.DriverDef{ - Name: "hyperkit", + Name: constants.DriverHyperkit, Builtin: false, ConfigCreator: createHyperkitHost, }); err != nil { diff --git a/pkg/minikube/drivers/kvm2/driver.go b/pkg/minikube/drivers/kvm2/driver.go index 787b3739ad..93395611a8 100644 --- a/pkg/minikube/drivers/kvm2/driver.go +++ b/pkg/minikube/drivers/kvm2/driver.go @@ -30,7 +30,7 @@ import ( func init() { if err := registry.Register(registry.DriverDef{ - Name: "kvm2", + Name: constants.DriverKvm2, Builtin: false, ConfigCreator: createKVM2Host, }); err != nil { diff --git a/pkg/minikube/drivers/virtualbox/driver.go b/pkg/minikube/drivers/virtualbox/driver.go index 8886377ee1..1a1c50d6c1 100644 --- a/pkg/minikube/drivers/virtualbox/driver.go +++ b/pkg/minikube/drivers/virtualbox/driver.go @@ -30,7 +30,7 @@ const defaultVirtualboxNicType = "virtio" func init() { err := registry.Register(registry.DriverDef{ - Name: "virtualbox", + Name: constants.DriverVirtualbox, Builtin: true, ConfigCreator: createVirtualboxHost, DriverCreator: func() drivers.Driver { diff --git a/pkg/minikube/drivers/vmware/driver.go b/pkg/minikube/drivers/vmware/driver.go index 44e958d3f3..0538079a54 100644 --- a/pkg/minikube/drivers/vmware/driver.go +++ b/pkg/minikube/drivers/vmware/driver.go @@ -27,7 +27,7 @@ import ( func init() { err := registry.Register(registry.DriverDef{ - Name: "vmware", + Name: constants.DriverVmware, Builtin: false, ConfigCreator: createVMwareHost, }) diff --git a/pkg/minikube/machine/client_test.go b/pkg/minikube/machine/client_test.go index 06fed6d801..3a8e2d3451 100644 --- a/pkg/minikube/machine/client_test.go +++ b/pkg/minikube/machine/client_test.go @@ -76,12 +76,12 @@ func TestLocalClientNewHost(t *testing.T) { }{ { description: "host vbox correct", - driver: "virtualbox", + driver: constants.DriverVirtualbox, rawDriver: []byte(vboxConfig), }, { description: "host vbox incorrect", - driver: "virtualbox", + driver: constants.DriverVirtualbox, rawDriver: []byte("?"), err: true, }, @@ -137,7 +137,7 @@ func TestRunDriver(t *testing.T) { defer os.RemoveAll(tempDir) os.Setenv(localbinary.PluginEnvKey, localbinary.PluginEnvVal) - os.Setenv(localbinary.PluginEnvDriverName, "virtualbox") + os.Setenv(localbinary.PluginEnvDriverName, constants.DriverVirtualbox) // Capture stdout and reset it later. old := os.Stdout diff --git a/pkg/minikube/tunnel/tunnel.go b/pkg/minikube/tunnel/tunnel.go index d60b063f87..6c06ca2c7a 100644 --- a/pkg/minikube/tunnel/tunnel.go +++ b/pkg/minikube/tunnel/tunnel.go @@ -29,6 +29,7 @@ import ( "github.com/pkg/errors" typed_core "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/minikube/pkg/minikube/config" + "k8s.io/minikube/pkg/minikube/constants" ) //tunnel represents the basic API for a tunnel: periodically the state of the tunnel @@ -149,7 +150,7 @@ func setupRoute(t *tunnel, h *host.Host) { return } - if h.DriverName == "hyperkit" { + if h.DriverName == constants.DriverHyperkit { //the virtio-net interface acts up with ip tunnels :( setupBridge(t) if t.status.RouteError != nil {