libvirt java bindings Невозможно изменить устройства - PullRequest
1 голос
/ 26 марта 2012

Я планирую использовать 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, я получаю следующую ошибку неподдерживаемая конфигурация: устройство такого типа не может быть отключено в горячем режиме .

Да, и что?Если домен не работает, я не могу изменить конфигурацию, и если он работает, я тоже не могу изменить конфигурацию?

Может кто-нибудь сказать мне, пожалуйста, что я делаю неправильно?Как активировать домен без его запуска?Я не нашел никакой помощи в поиске в сети.

Большое спасибо заранее за любую помощь.Привет, Крис-

Ответы [ 2 ]

1 голос
/ 08 марта 2013

Я попробовал это и получил ту же ошибку, затем я попробовал метод 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();
1 голос
/ 24 декабря 2012

вы можете использовать virsh edit $domainName для изменения файла конфигурации xml

...