Merge pull request #4582 from medyagh/medyagh-type_check_lint

Improve typecheck for driver options
pull/4591/head
Medya Ghazizadeh 2019-06-24 20:34:00 -07:00 committed by GitHub
commit be58227d56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 96 additions and 57 deletions

View File

@ -20,6 +20,8 @@ import (
"bytes" "bytes"
"fmt" "fmt"
"testing" "testing"
"k8s.io/minikube/pkg/minikube/constants"
) )
type configTestCase struct { type configTestCase struct {
@ -47,7 +49,7 @@ var configTestCases = []configTestCase{
"vm-driver": "kvm" "vm-driver": "kvm"
}`, }`,
config: map[string]interface{}{ config: map[string]interface{}{
"vm-driver": "kvm", "vm-driver": constants.DriverKvmOld,
"cpus": 4, "cpus": 4,
"disk-size": "20g", "disk-size": "20g",
"v": 5, "v": 5,

View File

@ -21,10 +21,11 @@ import (
"k8s.io/minikube/pkg/minikube/assets" "k8s.io/minikube/pkg/minikube/assets"
pkgConfig "k8s.io/minikube/pkg/minikube/config" pkgConfig "k8s.io/minikube/pkg/minikube/config"
"k8s.io/minikube/pkg/minikube/constants"
) )
var minikubeConfig = pkgConfig.MinikubeConfig{ var minikubeConfig = pkgConfig.MinikubeConfig{
"vm-driver": "kvm", "vm-driver": constants.DriverKvmOld,
"cpus": 12, "cpus": 12,
"show-libmachine-logs": true, "show-libmachine-logs": true,
} }
@ -47,7 +48,7 @@ func TestFindSetting(t *testing.T) {
} }
func TestSetString(t *testing.T) { func TestSetString(t *testing.T) {
err := SetString(minikubeConfig, "vm-driver", "virtualbox") err := SetString(minikubeConfig, "vm-driver", constants.DriverVirtualbox)
if err != nil { if err != nil {
t.Fatalf("Couldnt set string: %v", err) t.Fatalf("Couldnt set string: %v", err)
} }

View File

@ -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) console.OutStyle(console.Happy, "minikube %s on %s (%s)", version.GetVersion(), runtime.GOOS, runtime.GOARCH)
validateConfig() validateConfig()
currentUser, err := user.Current() validateUser()
// 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.")
}
oldConfig, err := cfg.Load() oldConfig, err := cfg.Load()
if err != nil && !os.IsNotExist(err) { if err != nil && !os.IsNotExist(err) {
@ -231,11 +224,12 @@ func runStart(cmd *cobra.Command, args []string) {
host, preexisting := startHost(m, config.MachineConfig) host, preexisting := startHost(m, config.MachineConfig)
ip := validateNetwork(host) 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) err = proxy.ExcludeIP(ip)
if err != nil { if err != nil {
console.ErrStyle(console.FailureType, "Failed to set NO_PROXY Env. Please use `export NO_PROXY=$NO_PROXY,%s`.", ip) 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 // Save IP to configuration file for subsequent use
config.KubernetesConfig.NodeIP = ip config.KubernetesConfig.NodeIP = ip
if err := saveConfig(config); err != nil { if err := saveConfig(config); err != nil {
@ -364,6 +358,18 @@ func selectImageRepository(mirrorCountry string, k8sVersion string) (bool, strin
return false, fallback, nil 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 // validateConfig validates the supplied configuration against known bad combinations
func validateConfig() { func validateConfig() {
diskSizeMB := pkgutil.CalculateDiskSizeInMB(viper.GetString(humanReadableDiskSize)) 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) 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" { if viper.GetBool(gpu) && viper.GetString(vmDriver) != constants.DriverKvm2 {
exit.Usage("Sorry, the --gpu feature is currently only supported with --vm-driver=kvm2") exit.Usage("Sorry, the --gpu feature is currently only supported with --vm-driver=%s", constants.DriverKvm2)
} }
if viper.GetBool(hidden) && viper.GetString(vmDriver) != "kvm2" { if viper.GetBool(hidden) && viper.GetString(vmDriver) != constants.DriverKvm2 {
exit.Usage("Sorry, the --hidden feature is currently only supported with --vm-driver=kvm2") exit.Usage("Sorry, the --hidden feature is currently only supported with --vm-driver=%s", constants.DriverKvm2)
} }
err := autoSetOptions(viper.GetString(vmDriver)) err := autoSetOptions(viper.GetString(vmDriver))

View File

@ -118,7 +118,7 @@ func (d *Driver) Create() error {
// DriverName returns the name of the driver // DriverName returns the name of the driver
func (d *Driver) DriverName() string { func (d *Driver) DriverName() string {
return "hyperkit" return constants.DriverHyperkit
} }
// GetSSHHostname returns hostname for use with ssh // GetSSHHostname returns hostname for use with ssh
@ -223,7 +223,7 @@ func (d *Driver) Start() error {
h.Memory = d.Memory h.Memory = d.Memory
h.UUID = d.UUID h.UUID = d.UUID
// This should stream logs from hyperkit, but doesn't seem to work. // 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) h.SetLogger(logger)
if vsockPorts, err := d.extractVSockPorts(); err != nil { if vsockPorts, err := d.extractVSockPorts(); err != nil {

View File

@ -220,7 +220,7 @@ func (d *Driver) GetSSHHostname() (string, error) {
// DriverName returns the name of the driver // DriverName returns the name of the driver
func (d *Driver) DriverName() string { func (d *Driver) DriverName() string {
return "kvm2" return constants.DriverKvm2
} }
// Kill stops a host forcefully, including any containers that we are managing. // Kill stops a host forcefully, including any containers that we are managing.

View File

@ -254,7 +254,7 @@ func DeleteHost(api libmachine.API) error {
return errors.Wrap(err, "load") return errors.Wrap(err, "load")
} }
// This is slow if SSH is not responding, but HyperV hangs otherwise, See issue #2914 // 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) trySSHPowerOff(host)
} }
@ -320,21 +320,21 @@ func engineOptions(config cfg.MachineConfig) *engine.Options {
func preCreateHost(config *cfg.MachineConfig) { func preCreateHost(config *cfg.MachineConfig) {
switch config.VMDriver { switch config.VMDriver {
case "kvm": case constants.DriverKvmOld:
if viper.GetBool(cfg.ShowDriverDeprecationNotification) { if viper.GetBool(cfg.ShowDriverDeprecationNotification) {
console.Warning(`The kvm driver is deprecated and support for it will be removed in a future release. 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. 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. 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]`) To disable this message, run [minikube config set ShowDriverDeprecationNotification false]`)
} }
case "xhyve": case constants.DriverXhyve:
if viper.GetBool(cfg.ShowDriverDeprecationNotification) { if viper.GetBool(cfg.ShowDriverDeprecationNotification) {
console.Warning(`The xhyve driver is deprecated and support for it will be removed in a future release. 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. 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. 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]`) To disable this message, run [minikube config set ShowDriverDeprecationNotification false]`)
} }
case "vmwarefusion": case constants.DriverVmwareFusion:
if viper.GetBool(cfg.ShowDriverDeprecationNotification) { if viper.GetBool(cfg.ShowDriverDeprecationNotification) {
console.Warning(`The vmwarefusion driver is deprecated and support for it will be removed in a future release. 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. 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 // GetVMHostIP gets the ip address to be used for mapping host -> VM and VM -> host
func GetVMHostIP(host *host.Host) (net.IP, error) { func GetVMHostIP(host *host.Host) (net.IP, error) {
switch host.DriverName { switch host.DriverName {
case "kvm": case constants.DriverKvmOld:
return net.ParseIP("192.168.42.1"), nil return net.ParseIP("192.168.42.1"), nil
case "kvm2": case constants.DriverKvm2:
return net.ParseIP("192.168.39.1"), nil return net.ParseIP("192.168.39.1"), nil
case "hyperv": case constants.DriverHyperv:
re := regexp.MustCompile(`"VSwitch": "(.*?)",`) re := regexp.MustCompile(`"VSwitch": "(.*?)",`)
// TODO(aprindle) Change this to deserialize the driver instead // TODO(aprindle) Change this to deserialize the driver instead
hypervVirtualSwitch := re.FindStringSubmatch(string(host.RawDriver))[1] 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 []byte{}, errors.Wrap(err, fmt.Sprintf("ip for interface (%s)", hypervVirtualSwitch))
} }
return ip, nil return ip, nil
case "virtualbox": case constants.DriverVirtualbox:
out, err := exec.Command(detectVBoxManageCmd(), "showvminfo", host.Name, "--machinereadable").Output() out, err := exec.Command(detectVBoxManageCmd(), "showvminfo", host.Name, "--machinereadable").Output()
if err != nil { if err != nil {
return []byte{}, errors.Wrap(err, "vboxmanage") 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 []byte{}, errors.Wrap(err, "Error getting VM/Host IP address")
} }
return ip, nil return ip, nil
case "xhyve", "hyperkit": case constants.DriverXhyve, constants.DriverHyperkit:
return net.ParseIP("192.168.64.1"), nil return net.ParseIP("192.168.64.1"), nil
case "vmware": case constants.DriverVmware:
vmIPString, err := host.Driver.GetIP() vmIPString, err := host.Driver.GetIP()
if err != nil { if err != nil {
return []byte{}, errors.Wrap(err, "Error getting VM IP address") return []byte{}, errors.Wrap(err, "Error getting VM IP address")

View File

@ -20,6 +20,8 @@ import (
"bytes" "bytes"
"reflect" "reflect"
"testing" "testing"
"k8s.io/minikube/pkg/minikube/constants"
) )
type configTestCase struct { type configTestCase struct {
@ -47,7 +49,7 @@ var configTestCases = []configTestCase{
"vm-driver": "kvm" "vm-driver": "kvm"
}`, }`,
config: map[string]interface{}{ config: map[string]interface{}{
"vm-driver": "kvm", "vm-driver": constants.DriverKvmOld,
"cpus": 4, "cpus": 4,
"disk-size": "20g", "disk-size": "20g",
"v": 5, "v": 5,

View File

@ -59,19 +59,49 @@ func ArchTag(hasTag bool) string {
return "-" + runtime.GOARCH + ":" 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 // SupportedVMDrivers is a list of supported drivers on all platforms. Currently
// used in gendocs. // used in gendocs.
var SupportedVMDrivers = [...]string{ var SupportedVMDrivers = [...]string{
"virtualbox", DriverVirtualbox,
"parallels", DriverParallels,
"vmwarefusion", DriverVmwareFusion,
"kvm", DriverKvmOld,
"xhyve", DriverXhyve,
"hyperv", DriverHyperv,
"hyperkit", DriverHyperkit,
"kvm2", DriverKvm2,
"vmware", DriverVmware,
"none", DriverNone,
} }
// DefaultMinipath is the default Minikube path (under the home directory) // 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 is the minimum disk image size, in megabytes
MinimumDiskSizeMB = 2000 MinimumDiskSizeMB = 2000
// DefaultVMDriver is the default virtual machine driver name // DefaultVMDriver is the default virtual machine driver name
DefaultVMDriver = "virtualbox" DefaultVMDriver = DriverVirtualbox
// DefaultStatusFormat is the default format of a host // DefaultStatusFormat is the default format of a host
DefaultStatusFormat = `host: {{.Host}} DefaultStatusFormat = `host: {{.Host}}
kubelet: {{.Kubelet}} kubelet: {{.Kubelet}}
@ -235,9 +265,6 @@ func GetKubernetesReleaseURLSHA1(binaryName, version, osName, archName string) s
// IsMinikubeChildProcess is the name of "is minikube child process" variable // IsMinikubeChildProcess is the name of "is minikube child process" variable
const IsMinikubeChildProcess = "IS_MINIKUBE_CHILD_PROCESS" const IsMinikubeChildProcess = "IS_MINIKUBE_CHILD_PROCESS"
// DriverNone is the none driver
const DriverNone = "none"
// FileScheme is the file scheme // FileScheme is the file scheme
const FileScheme = "file" const FileScheme = "file"

View File

@ -31,7 +31,7 @@ import (
func init() { func init() {
if err := registry.Register(registry.DriverDef{ if err := registry.Register(registry.DriverDef{
Name: "hyperkit", Name: constants.DriverHyperkit,
Builtin: false, Builtin: false,
ConfigCreator: createHyperkitHost, ConfigCreator: createHyperkitHost,
}); err != nil { }); err != nil {

View File

@ -28,7 +28,7 @@ import (
func init() { func init() {
registry.Register(registry.DriverDef{ registry.Register(registry.DriverDef{
Name: "hyperv", Name: constants.DriverHyperv,
Builtin: true, Builtin: true,
ConfigCreator: createHypervHost, ConfigCreator: createHypervHost,
DriverCreator: func() drivers.Driver { DriverCreator: func() drivers.Driver {

View File

@ -30,7 +30,7 @@ import (
func init() { func init() {
if err := registry.Register(registry.DriverDef{ if err := registry.Register(registry.DriverDef{
Name: "kvm", Name: constants.DriverKvmOld,
Builtin: false, Builtin: false,
ConfigCreator: createKVMHost, ConfigCreator: createKVMHost,
}); err != nil { }); err != nil {

View File

@ -30,7 +30,7 @@ import (
func init() { func init() {
if err := registry.Register(registry.DriverDef{ if err := registry.Register(registry.DriverDef{
Name: "kvm2", Name: constants.DriverKvm2,
Builtin: false, Builtin: false,
ConfigCreator: createKVM2Host, ConfigCreator: createKVM2Host,
}); err != nil { }); err != nil {

View File

@ -30,7 +30,7 @@ import (
func init() { func init() {
err := registry.Register(registry.DriverDef{ err := registry.Register(registry.DriverDef{
Name: "parallels", Name: constants.DriverParallels,
Builtin: true, Builtin: true,
ConfigCreator: createParallelsHost, ConfigCreator: createParallelsHost,
DriverCreator: func() drivers.Driver { DriverCreator: func() drivers.Driver {

View File

@ -30,7 +30,7 @@ const defaultVirtualboxNicType = "virtio"
func init() { func init() {
err := registry.Register(registry.DriverDef{ err := registry.Register(registry.DriverDef{
Name: "virtualbox", Name: constants.DriverVirtualbox,
Builtin: true, Builtin: true,
ConfigCreator: createVirtualboxHost, ConfigCreator: createVirtualboxHost,
DriverCreator: func() drivers.Driver { DriverCreator: func() drivers.Driver {

View File

@ -27,7 +27,7 @@ import (
func init() { func init() {
err := registry.Register(registry.DriverDef{ err := registry.Register(registry.DriverDef{
Name: "vmware", Name: constants.DriverVmware,
Builtin: false, Builtin: false,
ConfigCreator: createVMwareHost, ConfigCreator: createVMwareHost,
}) })

View File

@ -30,7 +30,7 @@ import (
func init() { func init() {
if err := registry.Register(registry.DriverDef{ if err := registry.Register(registry.DriverDef{
Name: "vmwarefusion", Name: constants.DriverVmwareFusion,
Builtin: true, Builtin: true,
ConfigCreator: createVMwareFusionHost, ConfigCreator: createVMwareFusionHost,
DriverCreator: func() drivers.Driver { DriverCreator: func() drivers.Driver {

View File

@ -35,7 +35,7 @@ https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#xhyve-driver
func init() { func init() {
if err := registry.Register(registry.DriverDef{ if err := registry.Register(registry.DriverDef{
Name: "xhyve", Name: constants.DriverXhyve,
Builtin: false, Builtin: false,
ConfigCreator: createXhyveHost, ConfigCreator: createXhyveHost,
DriverCreator: func() drivers.Driver { DriverCreator: func() drivers.Driver {

View File

@ -76,12 +76,12 @@ func TestLocalClientNewHost(t *testing.T) {
}{ }{
{ {
description: "host vbox correct", description: "host vbox correct",
driver: "virtualbox", driver: constants.DriverVirtualbox,
rawDriver: []byte(vboxConfig), rawDriver: []byte(vboxConfig),
}, },
{ {
description: "host vbox incorrect", description: "host vbox incorrect",
driver: "virtualbox", driver: constants.DriverVirtualbox,
rawDriver: []byte("?"), rawDriver: []byte("?"),
err: true, err: true,
}, },
@ -137,7 +137,7 @@ func TestRunDriver(t *testing.T) {
defer os.RemoveAll(tempDir) defer os.RemoveAll(tempDir)
os.Setenv(localbinary.PluginEnvKey, localbinary.PluginEnvVal) os.Setenv(localbinary.PluginEnvKey, localbinary.PluginEnvVal)
os.Setenv(localbinary.PluginEnvDriverName, "virtualbox") os.Setenv(localbinary.PluginEnvDriverName, constants.DriverVirtualbox)
// Capture stdout and reset it later. // Capture stdout and reset it later.
old := os.Stdout old := os.Stdout

View File

@ -29,6 +29,7 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
typed_core "k8s.io/client-go/kubernetes/typed/core/v1" typed_core "k8s.io/client-go/kubernetes/typed/core/v1"
"k8s.io/minikube/pkg/minikube/config" "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 //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 return
} }
if h.DriverName == "hyperkit" { if h.DriverName == constants.DriverHyperkit {
//the virtio-net interface acts up with ip tunnels :( //the virtio-net interface acts up with ip tunnels :(
setupBridge(t) setupBridge(t)
if t.status.RouteError != nil { if t.status.RouteError != nil {