diff --git a/constants.go b/constants.go index 34efcb35..917be351 100644 --- a/constants.go +++ b/constants.go @@ -4,7 +4,9 @@ const ( DriverName = "libvirt" DriverVersion = "0.12.6" - connectionString = "qemu:///system" + sessionConnectionString = "qemu:///session" + systemConnectionString = "qemu:///system" + dnsmasqLeases = "/var/lib/libvirt/dnsmasq/%s.leases" dnsmasqStatus = "/var/lib/libvirt/dnsmasq/%s.status" DefaultMemory = 8096 @@ -43,9 +45,9 @@ const ( - + - + @@ -58,4 +60,3 @@ const ( ` ) - diff --git a/libvirt.go b/libvirt.go index e84c1d44..df8f498e 100644 --- a/libvirt.go +++ b/libvirt.go @@ -40,7 +40,8 @@ type Driver struct { // Libvirt connection and state connectionString string - conn *libvirt.Connect + sessionConn *libvirt.Connect + systemConn *libvirt.Connect VM *libvirt.Domain vmLoaded bool } @@ -146,22 +147,36 @@ func (d *Driver) GetURL() (string, error) { return "", nil } -func (d *Driver) getConn() (*libvirt.Connect, error) { - if d.conn == nil { - conn, err := libvirt.NewConnect(connectionString) +func (d *Driver) getSessionConn() (*libvirt.Connect, error) { + log.Debugf("Connecting to session") + if d.sessionConn == nil { + conn, err := libvirt.NewConnect(sessionConnectionString) + if err != nil { + log.Errorf("Failed to connect to libvirt: %s", err) + return &libvirt.Connect{}, errors.New("Unable to connect to kvm driver") + } + d.sessionConn = conn + } + return d.sessionConn, nil +} + +func (d *Driver) getSystemConn() (*libvirt.Connect, error) { + log.Debugf("Connecting to system") + if d.systemConn == nil { + conn, err := libvirt.NewConnectReadOnly(systemConnectionString) if err != nil { log.Errorf("Failed to connect to libvirt: %s", err) return &libvirt.Connect{}, errors.New("Unable to connect to kvm driver, did you add yourself to the libvirtd group?") } - d.conn = conn + d.systemConn = conn } - return d.conn, nil + return d.systemConn, nil } // Create, or verify the private network is properly configured func (d *Driver) validateNetwork() error { log.Debug("Validating network") - conn, err := d.getConn() + conn, err := d.getSystemConn() if err != nil { return err } @@ -211,7 +226,7 @@ func (d *Driver) validateNetwork() error { } func (d *Driver) PreCreateCheck() error { - conn, err := d.getConn() + conn, err := d.getSessionConn() if err != nil { return err } @@ -282,7 +297,7 @@ func (d *Driver) Create() error { return err } - conn, err := d.getConn() + conn, err := d.getSessionConn() if err != nil { return err } @@ -430,7 +445,7 @@ func (d *Driver) GetState() (state.State, error) { func (d *Driver) validateVMRef() error { if !d.vmLoaded { log.Debugf("Fetching VM...") - conn, err := d.getConn() + conn, err := d.getSessionConn() if err != nil { return err } @@ -461,7 +476,7 @@ func (d *Driver) getMAC() (string, error) { ... ... - + ... ... @@ -472,7 +487,7 @@ func (d *Driver) getMAC() (string, error) { Address string `xml:"address,attr"` } type Source struct { - Network string `xml:"network,attr"` + Network string `xml:"bridge,attr"` } type Interface struct { Type string `xml:"type,attr"` @@ -496,7 +511,7 @@ func (d *Driver) getMAC() (string, error) { } func (d *Driver) getIPByMacFromSettings(mac string) (string, error) { - conn, err := d.getConn() + conn, err := d.getSystemConn() if err != nil { return "", err }