Add DefineXML() (#26)
This commit is contained in:
parent
fe0f99a7c1
commit
85674d25f7
@ -49,6 +49,7 @@ const (
|
|||||||
ProcDomainDestroyFlags = 234
|
ProcDomainDestroyFlags = 234
|
||||||
ProcConnectListAllDomains = 273
|
ProcConnectListAllDomains = 273
|
||||||
ProcMigratePerformParams = 305
|
ProcMigratePerformParams = 305
|
||||||
|
ProcDomainDefineXMLFlags = 350
|
||||||
)
|
)
|
||||||
|
|
||||||
// qemu procedure identifiers
|
// qemu procedure identifiers
|
||||||
|
36
libvirt.go
36
libvirt.go
@ -159,6 +159,14 @@ const (
|
|||||||
UndefineFlagNVRAM
|
UndefineFlagNVRAM
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// DomainDefineXMLFlags specifies options available when defining a domain.
|
||||||
|
type DomainDefineXMLFlags uint32
|
||||||
|
|
||||||
|
const (
|
||||||
|
// DefineValidate validates the XML document against schema
|
||||||
|
DefineValidate DomainDefineXMLFlags = 1
|
||||||
|
)
|
||||||
|
|
||||||
// DestroyFlags specifies options available when destroying a domain.
|
// DestroyFlags specifies options available when destroying a domain.
|
||||||
type DestroyFlags uint32
|
type DestroyFlags uint32
|
||||||
|
|
||||||
@ -641,6 +649,34 @@ func (l *Libvirt) XML(dom string, flags DomainXMLFlags) ([]byte, error) {
|
|||||||
return []byte(s), nil
|
return []byte(s), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DefineXML defines a domain, but does not start it.
|
||||||
|
func (l *Libvirt) DefineXML(x []byte, flags DomainDefineXMLFlags) error {
|
||||||
|
payload := struct {
|
||||||
|
Domain []byte
|
||||||
|
Flags DomainDefineXMLFlags
|
||||||
|
}{
|
||||||
|
Domain: x,
|
||||||
|
Flags: flags,
|
||||||
|
}
|
||||||
|
|
||||||
|
buf, err := encode(&payload)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := l.request(constants.ProcDomainDefineXMLFlags, constants.ProgramRemote, &buf)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
r := <-resp
|
||||||
|
if r.Status != StatusOK {
|
||||||
|
return decodeError(r.Payload)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Version returns the version of the libvirt daemon.
|
// Version returns the version of the libvirt daemon.
|
||||||
func (l *Libvirt) Version() (string, error) {
|
func (l *Libvirt) Version() (string, error) {
|
||||||
resp, err := l.request(constants.ProcConnectGetLibVersion, constants.ProgramRemote, nil)
|
resp, err := l.request(constants.ProcConnectGetLibVersion, constants.ProgramRemote, nil)
|
||||||
|
@ -254,3 +254,14 @@ func TestVersion(t *testing.T) {
|
|||||||
t.Errorf("expected version %q, got %q", expected, version)
|
t.Errorf("expected version %q, got %q", expected, version)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDefineXML(t *testing.T) {
|
||||||
|
conn := libvirttest.New()
|
||||||
|
l := New(conn)
|
||||||
|
|
||||||
|
var flags DomainDefineXMLFlags
|
||||||
|
var buf []byte
|
||||||
|
if err := l.DefineXML(buf, flags); err != nil {
|
||||||
|
t.Fatalf("unexpected define error: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -248,6 +248,22 @@ var testVersionReply = []byte{
|
|||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x4d, 0xfc, // version (1003004)
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x4d, 0xfc, // version (1003004)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var testDefineXML = []byte{
|
||||||
|
0x00, 0x00, 0x00, 0x38, // length
|
||||||
|
0x20, 0x00, 0x80, 0x86, // program
|
||||||
|
0x00, 0x00, 0x00, 0x01, // version
|
||||||
|
0x00, 0x00, 0x01, 0x5e, // procedure
|
||||||
|
0x00, 0x00, 0x00, 0x01, // type
|
||||||
|
0x00, 0x00, 0x00, 0x00, // serial
|
||||||
|
0x00, 0x00, 0x00, 0x00, // status
|
||||||
|
0x00, 0x00, 0x00, 0x04, // dom
|
||||||
|
0x74, 0x65, 0x73, 0x74, // name
|
||||||
|
// uuid
|
||||||
|
0xaf, 0xc2, 0xef, 0x71, 0x66, 0xe0, 0x45, 0xa7,
|
||||||
|
0xa5, 0xec, 0xd8, 0xba, 0x1e, 0xa8, 0x17, 0x7d,
|
||||||
|
0xff, 0xff, 0xff, 0xff, // id
|
||||||
|
}
|
||||||
|
|
||||||
// MockLibvirt provides a mock libvirt server for testing.
|
// MockLibvirt provides a mock libvirt server for testing.
|
||||||
type MockLibvirt struct {
|
type MockLibvirt struct {
|
||||||
net.Conn
|
net.Conn
|
||||||
@ -315,6 +331,8 @@ func (m *MockLibvirt) handleRemote(procedure uint32, conn net.Conn) {
|
|||||||
conn.Write(m.reply(testUndefineReply))
|
conn.Write(m.reply(testUndefineReply))
|
||||||
case constants.ProcDomainDestroyFlags:
|
case constants.ProcDomainDestroyFlags:
|
||||||
conn.Write(m.reply(testDestroyReply))
|
conn.Write(m.reply(testDestroyReply))
|
||||||
|
case constants.ProcDomainDefineXMLFlags:
|
||||||
|
conn.Write(m.reply(testDefineXML))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user