libvirt java绑定。无法修改设备

时间:2012-03-26 11:06:55

标签: java libvirt

我打算使用libvirt来控制网络上的一些KVM。 到目前为止,连接正在发挥作用。我使用以下代码建立连接

Connect conn = null;
    try
    {
        ConnectAuth ca = new ConnectAuthDefault();

        conn = new Connect("qemu+ssh://targetUser@targetIP/system", ca, 0);
    }
    catch(LibvirtException e)
    {
        System.out.println("exception caught:" + e);
        System.out.println(e.getError());
    }

我正在通过

获得对域名的引用
Domain d = conn.domainLookupByName("win7");

但是当我尝试连接或分离设备时(我想修改vnc端口)

d.detachDevice("<graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0'/>");

我收到异常读取 请求的操作无效:无法在非活动域上分离设备

好的,似乎错误消息告诉我VM没有运行。所以,如果我通过

启动域名
d.create();

并且我从上面执行detachDevice我收到以下错误 不支持的配置:此类型的设备无法热插拔

是的,那又怎样?如果域未运行我无法更改配置,如果它正在运行,我也无法更改配置?

有谁能告诉我,我做错了什么?如何在不启动域的情况下激活域?我没有找到任何帮助在网上搜索。

非常感谢您的帮助。 问候,-chris -

2 个答案:

答案 0 :(得分:1)

您可以使用virsh edit $domainName修改xml配置文件

答案 1 :(得分:1)

我尝试了这个并得到了同样的错误,然后我尝试了detachDeviceFlags方法也失败了。

我认为detachDevice方法用于分离某种 hotplus 设备,例如USB设备。分离vnc图形设备的唯一方法是重新定义它,就像@liuzhijun一样。

而不是在CLI中执行此操作,这是我的API使用版本:

// Assume you have got the Connect as virtConn, and Domian as dom
// I did it after the vm is shutdown
String xml = dom.getXMLDesc(0);
int[] uuid = dom.getUUID();

// I use a very simple way to erase graphic element, not recommended
// The best way to do it is to use some XML library.
xml = xml.substring(0, xml.indexOf("<graphics type='vnc'")) +
                       xml.substring(xml.indexOf("graphics>")+10);

virtCon.domainDefineXML(xml);

dom = virtCon.domainLookupByUUID(uuid);
dom.create();