使用 libvirt-go 绑定定义域

Defining a domain using libvirt-go bindings

我正在尝试使用 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 字段,它似乎是指向自身的指针,是否可以将字段嵌入结构定义本身的结构中

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

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

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

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