/
dialers.go
53 lines (45 loc) · 1.13 KB
/
dialers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package libvirtutils
import (
"fmt"
"github.com/digitalocean/go-libvirt"
"github.com/digitalocean/go-libvirt/socket"
)
func NewDialerFromLibvirtUri(uri LibvirtUri) (dialer socket.Dialer, err error) {
switch uri.Transport {
case "ssh":
dialer, err = NewSshDialer(uri)
case "tls":
dialer, err = NewTlsDialer(uri)
case "tcp":
dialer, err = NewTcpDialer(uri)
case "unix", "":
dialer = NewUnixDialer(uri)
default:
err = fmt.Errorf("%s is not supported uri transport", uri.Transport)
}
return
}
func ConnectByUriString(libvirtUri string) (*libvirt.Libvirt, error) {
uri := LibvirtUri{}
err := uri.Unmarshal(libvirtUri)
if err != nil {
return nil, err
}
return ConnectByUri(uri)
}
func ConnectByUri(uri LibvirtUri) (*libvirt.Libvirt, error) {
dialer, err := NewDialerFromLibvirtUri(uri)
if err != nil {
return nil, err
}
connection := libvirt.NewWithDialer(dialer)
err = connection.ConnectToURI(libvirt.ConnectURI(uri.Name()))
if err != nil {
if uri.Driver == "test" {
err = nil
} else {
err = fmt.Errorf("error while establishing connection with libvirt daemon: %s", err)
}
}
return connection, err
}