使用libvirt-go绑定定义域

时间:2018-11-28 23:57:03

标签: libvirt

我正在尝试使用libvirt-go api绑定,并按照示例代码段here,到目前为止,已经填充了domcfg变量:

domcfg := &libvirtxml.Domain{
        Type: "kvm",
        Name: "demo",
        Memory: &libvirtxml.DomainMemory{
            Value:    4096,
            Unit:     "MB",
            DumpCore: "on"},
        VCPU: &libvirtxml.DomainVCPU{
            Value: 1},
        CPU: &libvirtxml.DomainCPU{
            Mode: "host-model"},
        Devices: &libvirtxml.DomainDeviceList{
            Disks: []libvirtxml.DomainDisk{
                Source: &libvirtxml.DomainDiskSource{
                    File: &DomainDiskSourceFile{
                        File: "./vm.qcow2"}},
                BackingStore: &DomainDiskBackingStore{
                    BackingStore: &DomainDiskBackingStore{

                    }
                }}}

我不确定我是否完全在正确的道路上,所以这是在编组到xml之前定义变量的正确方法吗?另外,我发现在https://godoc.org/github.com/libvirt/libvirt-go-xml#DomainDiskBackingStore处定义的结构特别是BackingStore字段,该字段似乎是指向其自身的指针,是否有可能将字段嵌入到结构定义本身的结构中?

1 个答案:

答案 0 :(得分:1)

是的,这是在Go中定义内联XML配置的正确方法。要定义域,您可以执行

xml, err := domcfg.Marshal()
if err != nil {
   ...
}

dom, err := conn.DomainDefineXML(xml)
if err != nil {
   ...
}

磁盘后备存储是一种提供有关完整磁盘链的信息的方法。通常,您可以将此设置保留为nil,因为libvirt会自动为您检测链。支撑链可以有多个级别,因此为什么该结构再次包含一个具有其自身类型的字段。