From 8f0ee4cb49b25001000a5169eabc5032c2387523 Mon Sep 17 00:00:00 2001 From: josedonizetti Date: Fri, 31 May 2019 16:44:17 -0300 Subject: [PATCH 1/2] Add support to custom qemu uri on kvm2 driver --- cmd/minikube/cmd/start.go | 3 +++ pkg/drivers/kvm/domain.go | 8 ++++---- pkg/drivers/kvm/kvm.go | 8 ++++++-- pkg/drivers/kvm/network.go | 23 +++++++++++++++++----- pkg/minikube/config/types.go | 1 + pkg/minikube/drivers/kvm2/driver.go | 2 ++ test/integration/start_stop_delete_test.go | 1 + 7 files changed, 35 insertions(+), 11 deletions(-) diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index ac4da6c4ac0f..9275250e4f6a 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -76,6 +76,7 @@ const ( enableDefaultCNI = "enable-default-cni" hypervVirtualSwitch = "hyperv-virtual-switch" kvmNetwork = "kvm-network" + kvmQemuURI = "kvm-qemu-uri" keepContext = "keep-context" createMount = "mount" featureGates = "feature-gates" @@ -121,6 +122,7 @@ func init() { startCmd.Flags().String(hostOnlyCIDR, "192.168.99.1/24", "The CIDR to be used for the minikube VM (only supported with Virtualbox driver)") startCmd.Flags().String(hypervVirtualSwitch, "", "The hyperv virtual switch name. Defaults to first found. (only supported with HyperV driver)") startCmd.Flags().String(kvmNetwork, "default", "The KVM network name. (only supported with KVM driver)") + startCmd.Flags().String(kvmQemuURI, "qemu:///system", "The KVM QEMU connection URI. (works only with kvm2 driver on linux)") startCmd.Flags().String(xhyveDiskDriver, "ahci-hd", "The disk driver to use [ahci-hd|virtio-blk] (only supported with xhyve driver)") startCmd.Flags().StringSlice(nfsShare, []string{}, "Local folders to share with Guest via NFS mounts (Only supported on with hyperkit now)") startCmd.Flags().String(nfsSharesRoot, "/nfsshares", "Where to root the NFS Shares (defaults to /nfsshares, only supported with hyperkit now)") @@ -496,6 +498,7 @@ func generateConfig(cmd *cobra.Command, k8sVersion string) (cfg.Config, error) { HostOnlyCIDR: viper.GetString(hostOnlyCIDR), HypervVirtualSwitch: viper.GetString(hypervVirtualSwitch), KvmNetwork: viper.GetString(kvmNetwork), + KvmQemuURI: viper.GetString(kvmQemuURI), Downloader: pkgutil.DefaultDownloader{}, DisableDriverMounts: viper.GetBool(disableDriverMounts), UUID: viper.GetString(uuid), diff --git a/pkg/drivers/kvm/domain.go b/pkg/drivers/kvm/domain.go index 50b354a29be1..88890fa7b5b0 100644 --- a/pkg/drivers/kvm/domain.go +++ b/pkg/drivers/kvm/domain.go @@ -128,7 +128,7 @@ func randomMAC() (net.HardwareAddr, error) { } func (d *Driver) getDomain() (*libvirt.Domain, *libvirt.Connect, error) { - conn, err := getConnection() + conn, err := getConnection(d.ConnectionURI) if err != nil { return nil, nil, errors.Wrap(err, "getting domain") } @@ -141,8 +141,8 @@ func (d *Driver) getDomain() (*libvirt.Domain, *libvirt.Connect, error) { return dom, conn, nil } -func getConnection() (*libvirt.Connect, error) { - conn, err := libvirt.NewConnect(qemusystem) +func getConnection(connectionURI string) (*libvirt.Connect, error) { + conn, err := libvirt.NewConnect(connectionURI) if err != nil { return nil, errors.Wrap(err, connectionErrorText) } @@ -186,7 +186,7 @@ func (d *Driver) createDomain() (*libvirt.Domain, error) { return nil, errors.Wrap(err, "executing domain xml") } - conn, err := getConnection() + conn, err := getConnection(d.ConnectionURI) if err != nil { return nil, errors.Wrap(err, "Error getting libvirt connection") } diff --git a/pkg/drivers/kvm/kvm.go b/pkg/drivers/kvm/kvm.go index 4f2ccd3c2f1c..bc159abe5be3 100644 --- a/pkg/drivers/kvm/kvm.go +++ b/pkg/drivers/kvm/kvm.go @@ -82,6 +82,9 @@ type Driver struct { // XML that needs to be added to passthrough GPU devices. DevicesXML string + + // QEMU Connection URI + ConnectionURI string } const ( @@ -107,12 +110,13 @@ func NewDriver(hostName, storePath string) *Driver { Network: defaultNetworkName, DiskPath: filepath.Join(constants.GetMinipath(), "machines", config.GetMachineName(), fmt.Sprintf("%s.rawdisk", config.GetMachineName())), ISO: filepath.Join(constants.GetMinipath(), "machines", config.GetMachineName(), "boot2docker.iso"), + ConnectionURI: qemusystem, } } // PreCommandCheck checks the connection before issuing a command func (d *Driver) PreCommandCheck() error { - conn, err := getConnection() + conn, err := getConnection(d.ConnectionURI) if err != nil { return errors.Wrap(err, "Error connecting to libvirt socket. Have you added yourself to the libvirtd group?") } @@ -424,7 +428,7 @@ func (d *Driver) Stop() (err error) { // Remove a host func (d *Driver) Remove() error { log.Debug("Removing machine...") - conn, err := getConnection() + conn, err := getConnection(d.ConnectionURI) if err != nil { return errors.Wrap(err, "getting connection") } diff --git a/pkg/drivers/kvm/network.go b/pkg/drivers/kvm/network.go index 8a7e4d98dd97..673b0fa2b641 100644 --- a/pkg/drivers/kvm/network.go +++ b/pkg/drivers/kvm/network.go @@ -81,7 +81,7 @@ func setupNetwork(conn *libvirt.Connect, name string) error { // ensureNetwork is called on start of the VM func (d *Driver) ensureNetwork() error { - conn, err := getConnection() + conn, err := getConnection(d.ConnectionURI) if err != nil { return errors.Wrap(err, "getting libvirt connection") } @@ -108,12 +108,11 @@ func (d *Driver) ensureNetwork() error { // createNetwork is called during creation of the VM only (and not on start) func (d *Driver) createNetwork() error { - if d.Network == defaultPrivateNetworkName { return fmt.Errorf("KVM network can't be named %s. This is the name of the private network created by minikube", defaultPrivateNetworkName) } - conn, err := getConnection() + conn, err := getConnection(d.ConnectionURI) if err != nil { return errors.Wrap(err, "getting libvirt connection") } @@ -151,7 +150,21 @@ func (d *Driver) createNetwork() error { } func (d *Driver) deleteNetwork() error { - conn, err := getConnection() + type source struct { + //XMLName xml.Name `xml:"source"` + Network string `xml:"network,attr"` + } + type iface struct { + //XMLName xml.Name `xml:"interface"` + Source source `xml:"source"` + } + type result struct { + //XMLName xml.Name `xml:"domain"` + Name string `xml:"name"` + Interfaces []iface `xml:"devices>interface"` + } + + conn, err := getConnection(d.ConnectionURI) if err != nil { return errors.Wrap(err, "getting libvirt connection") } @@ -269,7 +282,7 @@ func (d *Driver) checkDomains(conn *libvirt.Connect) error { } func (d *Driver) lookupIP() (string, error) { - conn, err := getConnection() + conn, err := getConnection(d.ConnectionURI) if err != nil { return "", errors.Wrap(err, "getting connection and domain") } diff --git a/pkg/minikube/config/types.go b/pkg/minikube/config/types.go index 0aa61d402a7a..f0b1b965cefe 100644 --- a/pkg/minikube/config/types.go +++ b/pkg/minikube/config/types.go @@ -46,6 +46,7 @@ type MachineConfig struct { HostOnlyCIDR string // Only used by the virtualbox driver HypervVirtualSwitch string KvmNetwork string // Only used by the KVM driver + KvmQemuURI string // Only used by kvm2 Downloader util.ISODownloader `json:"-"` DockerOpt []string // Each entry is formatted as KEY=VALUE. DisableDriverMounts bool // Only used by virtualbox and xhyve diff --git a/pkg/minikube/drivers/kvm2/driver.go b/pkg/minikube/drivers/kvm2/driver.go index 93395611a868..231f208bfcf0 100644 --- a/pkg/minikube/drivers/kvm2/driver.go +++ b/pkg/minikube/drivers/kvm2/driver.go @@ -53,6 +53,7 @@ type kvmDriver struct { DiskPath string GPU bool Hidden bool + ConnectionURI string } func createKVM2Host(config cfg.MachineConfig) interface{} { @@ -72,5 +73,6 @@ func createKVM2Host(config cfg.MachineConfig) interface{} { ISO: filepath.Join(constants.GetMinipath(), "machines", cfg.GetMachineName(), "boot2docker.iso"), GPU: config.GPU, Hidden: config.Hidden, + ConnectionURI: config.KvmQemuURI, } } diff --git a/test/integration/start_stop_delete_test.go b/test/integration/start_stop_delete_test.go index 7a5b9392e3f2..e2d56d06c472 100644 --- a/test/integration/start_stop_delete_test.go +++ b/test/integration/start_stop_delete_test.go @@ -41,6 +41,7 @@ func TestStartStop(t *testing.T) { // default is the network created by libvirt, if we change the name minikube won't boot // because the given network doesn't exist "--kvm-network=default", + "--kvm-qemu-uri=qemu:///sytem", }}, {"feature_gates_newest_cni", []string{ "--feature-gates", From 3a82099013a1b084496e7b77429c223442f2cbfe Mon Sep 17 00:00:00 2001 From: josedonizetti Date: Tue, 4 Jun 2019 16:44:03 -0300 Subject: [PATCH 2/2] Fix KVM naming --- cmd/minikube/cmd/start.go | 4 ++-- pkg/drivers/kvm/network.go | 14 -------------- pkg/minikube/config/types.go | 4 ++-- pkg/minikube/drivers/kvm/driver.go | 2 +- pkg/minikube/drivers/kvm2/driver.go | 4 ++-- test/integration/start_stop_delete_test.go | 2 +- 6 files changed, 8 insertions(+), 22 deletions(-) diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go index 9275250e4f6a..915933b7ca40 100644 --- a/cmd/minikube/cmd/start.go +++ b/cmd/minikube/cmd/start.go @@ -497,8 +497,8 @@ func generateConfig(cmd *cobra.Command, k8sVersion string) (cfg.Config, error) { RegistryMirror: registryMirror, HostOnlyCIDR: viper.GetString(hostOnlyCIDR), HypervVirtualSwitch: viper.GetString(hypervVirtualSwitch), - KvmNetwork: viper.GetString(kvmNetwork), - KvmQemuURI: viper.GetString(kvmQemuURI), + KVMNetwork: viper.GetString(kvmNetwork), + KVMQemuURI: viper.GetString(kvmQemuURI), Downloader: pkgutil.DefaultDownloader{}, DisableDriverMounts: viper.GetBool(disableDriverMounts), UUID: viper.GetString(uuid), diff --git a/pkg/drivers/kvm/network.go b/pkg/drivers/kvm/network.go index 673b0fa2b641..7a46f0ae14f4 100644 --- a/pkg/drivers/kvm/network.go +++ b/pkg/drivers/kvm/network.go @@ -150,20 +150,6 @@ func (d *Driver) createNetwork() error { } func (d *Driver) deleteNetwork() error { - type source struct { - //XMLName xml.Name `xml:"source"` - Network string `xml:"network,attr"` - } - type iface struct { - //XMLName xml.Name `xml:"interface"` - Source source `xml:"source"` - } - type result struct { - //XMLName xml.Name `xml:"domain"` - Name string `xml:"name"` - Interfaces []iface `xml:"devices>interface"` - } - conn, err := getConnection(d.ConnectionURI) if err != nil { return errors.Wrap(err, "getting libvirt connection") diff --git a/pkg/minikube/config/types.go b/pkg/minikube/config/types.go index f0b1b965cefe..be83b73bfaa4 100644 --- a/pkg/minikube/config/types.go +++ b/pkg/minikube/config/types.go @@ -45,8 +45,8 @@ type MachineConfig struct { RegistryMirror []string HostOnlyCIDR string // Only used by the virtualbox driver HypervVirtualSwitch string - KvmNetwork string // Only used by the KVM driver - KvmQemuURI string // Only used by kvm2 + KVMNetwork string // Only used by the KVM driver + KVMQemuURI string // Only used by kvm2 Downloader util.ISODownloader `json:"-"` DockerOpt []string // Each entry is formatted as KEY=VALUE. DisableDriverMounts bool // Only used by virtualbox and xhyve diff --git a/pkg/minikube/drivers/kvm/driver.go b/pkg/minikube/drivers/kvm/driver.go index 989e74276f86..451712b4c7aa 100644 --- a/pkg/minikube/drivers/kvm/driver.go +++ b/pkg/minikube/drivers/kvm/driver.go @@ -64,7 +64,7 @@ func createKVMHost(config cfg.MachineConfig) interface{} { }, Memory: config.Memory, CPU: config.CPUs, - Network: config.KvmNetwork, + Network: config.KVMNetwork, PrivateNetwork: "docker-machines", Boot2DockerURL: config.Downloader.GetISOFileURI(config.MinikubeISO), DiskSize: config.DiskSize, diff --git a/pkg/minikube/drivers/kvm2/driver.go b/pkg/minikube/drivers/kvm2/driver.go index 231f208bfcf0..511f277a86bd 100644 --- a/pkg/minikube/drivers/kvm2/driver.go +++ b/pkg/minikube/drivers/kvm2/driver.go @@ -65,7 +65,7 @@ func createKVM2Host(config cfg.MachineConfig) interface{} { }, Memory: config.Memory, CPU: config.CPUs, - Network: config.KvmNetwork, + Network: config.KVMNetwork, PrivateNetwork: "minikube-net", Boot2DockerURL: config.Downloader.GetISOFileURI(config.MinikubeISO), DiskSize: config.DiskSize, @@ -73,6 +73,6 @@ func createKVM2Host(config cfg.MachineConfig) interface{} { ISO: filepath.Join(constants.GetMinipath(), "machines", cfg.GetMachineName(), "boot2docker.iso"), GPU: config.GPU, Hidden: config.Hidden, - ConnectionURI: config.KvmQemuURI, + ConnectionURI: config.KVMQemuURI, } } diff --git a/test/integration/start_stop_delete_test.go b/test/integration/start_stop_delete_test.go index e2d56d06c472..58109193594d 100644 --- a/test/integration/start_stop_delete_test.go +++ b/test/integration/start_stop_delete_test.go @@ -41,7 +41,7 @@ func TestStartStop(t *testing.T) { // default is the network created by libvirt, if we change the name minikube won't boot // because the given network doesn't exist "--kvm-network=default", - "--kvm-qemu-uri=qemu:///sytem", + "--kvm-qemu-uri=qemu:///system", }}, {"feature_gates_newest_cni", []string{ "--feature-gates",