0

我正在使用以下代码段来获取XML运行在XEN Hypervisor. 该代码正在尝试执行命令,该命令virsh dumpxml Ubutnu14将给出XML名为Ubuntu14

virshCmd := exec.Command("virsh", "dumpxml", "Ubuntu14")

var virshCmdOutput bytes.Buffer
var stderr bytes.Buffer
virshCmd.Stdout = &virshCmdOutput
virshCmd.Stderr = &stderr
err := virshCmd.Run()
if err != nil {
    fmt.Println(err)
    fmt.Println(stderr.String())
}

fmt.Println(virshCmdOutput.String())

此代码始终进入给定域名的错误条件,我得到以下输出。

exit status 1
error: failed to get domain 'Ubuntu14'
error: Domain not found: no domain with matching name 'Ubuntu14'

但是如果我运行独立命令virsh dumpxml Ubuntu14,我会得到正确的XML定义。

如果有人能给我一些关于我做错了什么的提示,我将不胜感激。我的主机是Ubuntu-16.04golang版本是go1.6.2 linux/amd64

4

1 回答 1

0

我希望您在这两种情况下以不同的用户身份运行 virsh,并且由于您没有提供任何 URI,它正在连接到不同的 libvirtd 实例。如果你以非 root 身份运行 virsh,那么它通常会连接到 qemu:///session,但如果你以 root 身份运行 virsh,那么它通常会连接到 qemu:///system。针对一个 URI 注册的虚拟机在连接到另一个 URI 时将不可见。

顺便说一句,如果您使用的是 go,那么最好使用 libvirt 的本机 Go 库绑定而不是执行 virsh。您的“virsh dumpxml”调用几乎等同于:

   import (
      "github.com/libvirt/libvirt-go"
   )

   conn, err := libvirt.NewConnect("qemu:///system")

   dom, err := conn.LookupDomainByName("Ubuntu14")

   xml, err := dom.GetXMLDesc(0)

(显然也做错误处理)

于 2017-01-19T11:19:15.917 回答