diff --git a/cmd/minikube/cmd/config/config_test.go b/cmd/minikube/cmd/config/config_test.go index faa7b32ee6..5736897d64 100644 --- a/cmd/minikube/cmd/config/config_test.go +++ b/cmd/minikube/cmd/config/config_test.go @@ -20,6 +20,8 @@ import ( "bytes" "fmt" "testing" + + "k8s.io/minikube/pkg/minikube/constants" ) type configTestCase struct { @@ -47,7 +49,7 @@ var configTestCases = []configTestCase{ "vm-driver": "kvm" }`, config: map[string]interface{}{ - "vm-driver": "kvm", + "vm-driver": constants.DriverKvmOld, "cpus": 4, "disk-size": "20g", "v": 5, diff --git a/cmd/minikube/cmd/config/util_test.go b/cmd/minikube/cmd/config/util_test.go index 0815332033..8e3e78ce11 100644 --- a/cmd/minikube/cmd/config/util_test.go +++ b/cmd/minikube/cmd/config/util_test.go @@ -21,10 +21,11 @@ import ( "k8s.io/minikube/pkg/minikube/assets" pkgConfig "k8s.io/minikube/pkg/minikube/config" + "k8s.io/minikube/pkg/minikube/constants" ) var minikubeConfig = pkgConfig.MinikubeConfig{ - "vm-driver": "kvm", + "vm-driver": constants.DriverKvmOld, "cpus": 12, "show-libmachine-logs": true, } @@ -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..ac4da6c4ac 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) == constants.DriverHyperv || viper.GetString(vmDriver) == constants.DriverNone) { + 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..f1b91d5d12 100644 --- a/pkg/minikube/cluster/cluster.go +++ b/pkg/minikube/cluster/cluster.go @@ -254,7 +254,7 @@ func DeleteHost(api libmachine.API) error { return errors.Wrap(err, "load") } // This is slow if SSH is not responding, but HyperV hangs otherwise, See issue #2914 - if host.Driver.DriverName() == "hyperv" { + if host.Driver.DriverName() == constants.DriverHyperv { trySSHPowerOff(host) } @@ -320,21 +320,21 @@ func engineOptions(config cfg.MachineConfig) *engine.Options { func preCreateHost(config *cfg.MachineConfig) { switch config.VMDriver { - case "kvm": + case constants.DriverKvmOld: if viper.GetBool(cfg.ShowDriverDeprecationNotification) { console.Warning(`The kvm driver is deprecated and support for it will be removed in a future release. Please consider switching to the kvm2 driver, which is intended to replace the kvm driver. See https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#kvm2-driver for more information. To disable this message, run [minikube config set ShowDriverDeprecationNotification false]`) } - case "xhyve": + case constants.DriverXhyve: if viper.GetBool(cfg.ShowDriverDeprecationNotification) { console.Warning(`The xhyve driver is deprecated and support for it will be removed in a future release. Please consider switching to the hyperkit driver, which is intended to replace the xhyve driver. See https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#hyperkit-driver for more information. To disable this message, run [minikube config set ShowDriverDeprecationNotification false]`) } - case "vmwarefusion": + case constants.DriverVmwareFusion: if viper.GetBool(cfg.ShowDriverDeprecationNotification) { console.Warning(`The vmwarefusion driver is deprecated and support for it will be removed in a future release. Please consider switching to the new vmware unified driver, which is intended to replace the vmwarefusion driver. @@ -407,11 +407,11 @@ func GetHostDockerEnv(api libmachine.API) (map[string]string, error) { // GetVMHostIP gets the ip address to be used for mapping host -> VM and VM -> host func GetVMHostIP(host *host.Host) (net.IP, error) { switch host.DriverName { - case "kvm": + case constants.DriverKvmOld: return net.ParseIP("192.168.42.1"), nil - case "kvm2": + case constants.DriverKvm2: return net.ParseIP("192.168.39.1"), nil - case "hyperv": + case constants.DriverHyperv: re := regexp.MustCompile(`"VSwitch": "(.*?)",`) // TODO(aprindle) Change this to deserialize the driver instead hypervVirtualSwitch := re.FindStringSubmatch(string(host.RawDriver))[1] @@ -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 constants.DriverXhyve, 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/config/config_test.go b/pkg/minikube/config/config_test.go index 3a563e9235..ecc13c5ce7 100644 --- a/pkg/minikube/config/config_test.go +++ b/pkg/minikube/config/config_test.go @@ -20,6 +20,8 @@ import ( "bytes" "reflect" "testing" + + "k8s.io/minikube/pkg/minikube/constants" ) type configTestCase struct { @@ -47,7 +49,7 @@ var configTestCases = []configTestCase{ "vm-driver": "kvm" }`, config: map[string]interface{}{ - "vm-driver": "kvm", + "vm-driver": constants.DriverKvmOld, "cpus": 4, "disk-size": "20g", "v": 5, diff --git a/pkg/minikube/constants/constants.go b/pkg/minikube/constants/constants.go index 6690a0bf79..698a3abc59 100644 --- a/pkg/minikube/constants/constants.go +++ b/pkg/minikube/constants/constants.go @@ -59,19 +59,49 @@ func ArchTag(hasTag bool) string { return "-" + runtime.GOARCH + ":" } +// DriverNone is the none driver. +const DriverNone = "none" + +// DriverKvmOld is the depricated kvm driver option name +const DriverKvmOld = "kvm" + +// DriverKvm2 is the kvm2 driver option name for in linux +const DriverKvm2 = "kvm2" + +// DriverVirtualbox is the virtualbox driver option name +const DriverVirtualbox = "virtualbox" + +// DriverHyperkit is the hyperkit driver option name for mac os +const DriverHyperkit = "hyperkit" + +// DriverVmware is the vmware driver option name +const DriverVmware = "vmware" + +// DriverVmwareFusion is the vmware fusion driver option +const DriverVmwareFusion = "vmwarefusion" + +// DriverHyperv is the hyperv driver option for windows +const DriverHyperv = "hyperv" + +// DriverXhyve is the depricated xhyve driver option name +const DriverXhyve = "xhyve" + +// DriverParallels is the parallels driver option name +const DriverParallels = "parallels" + // SupportedVMDrivers is a list of supported drivers on all platforms. Currently // used in gendocs. var SupportedVMDrivers = [...]string{ - "virtualbox", - "parallels", - "vmwarefusion", - "kvm", - "xhyve", - "hyperv", - "hyperkit", - "kvm2", - "vmware", - "none", + DriverVirtualbox, + DriverParallels, + DriverVmwareFusion, + DriverKvmOld, + DriverXhyve, + DriverHyperv, + DriverHyperkit, + DriverKvm2, + DriverVmware, + DriverNone, } // DefaultMinipath is the default Minikube path (under the home directory) @@ -130,7 +160,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 +265,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/hyperv/driver.go b/pkg/minikube/drivers/hyperv/driver.go index 58d3eac839..11ef8fa51b 100644 --- a/pkg/minikube/drivers/hyperv/driver.go +++ b/pkg/minikube/drivers/hyperv/driver.go @@ -28,7 +28,7 @@ import ( func init() { registry.Register(registry.DriverDef{ - Name: "hyperv", + Name: constants.DriverHyperv, Builtin: true, ConfigCreator: createHypervHost, DriverCreator: func() drivers.Driver { diff --git a/pkg/minikube/drivers/kvm/driver.go b/pkg/minikube/drivers/kvm/driver.go index a35d2a5aee..989e74276f 100644 --- a/pkg/minikube/drivers/kvm/driver.go +++ b/pkg/minikube/drivers/kvm/driver.go @@ -30,7 +30,7 @@ import ( func init() { if err := registry.Register(registry.DriverDef{ - Name: "kvm", + Name: constants.DriverKvmOld, Builtin: false, ConfigCreator: createKVMHost, }); 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/parallels/driver.go b/pkg/minikube/drivers/parallels/driver.go index 7921bb1f80..b452dd6781 100644 --- a/pkg/minikube/drivers/parallels/driver.go +++ b/pkg/minikube/drivers/parallels/driver.go @@ -30,7 +30,7 @@ import ( func init() { err := registry.Register(registry.DriverDef{ - Name: "parallels", + Name: constants.DriverParallels, Builtin: true, ConfigCreator: createParallelsHost, DriverCreator: func() drivers.Driver { 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/drivers/vmwarefusion/driver.go b/pkg/minikube/drivers/vmwarefusion/driver.go index ce82041be6..07e77bbe3c 100644 --- a/pkg/minikube/drivers/vmwarefusion/driver.go +++ b/pkg/minikube/drivers/vmwarefusion/driver.go @@ -30,7 +30,7 @@ import ( func init() { if err := registry.Register(registry.DriverDef{ - Name: "vmwarefusion", + Name: constants.DriverVmwareFusion, Builtin: true, ConfigCreator: createVMwareFusionHost, DriverCreator: func() drivers.Driver { diff --git a/pkg/minikube/drivers/xhyve/driver.go b/pkg/minikube/drivers/xhyve/driver.go index 89559f313c..3fc0ae21fb 100644 --- a/pkg/minikube/drivers/xhyve/driver.go +++ b/pkg/minikube/drivers/xhyve/driver.go @@ -35,7 +35,7 @@ https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#xhyve-driver func init() { if err := registry.Register(registry.DriverDef{ - Name: "xhyve", + Name: constants.DriverXhyve, Builtin: false, ConfigCreator: createXhyveHost, DriverCreator: func() drivers.Driver { 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 {