2012-03-26 7 views
1

Ich plane, libvirt zu verwenden, um einige KVM über das Netzwerk zu steuern. Bis jetzt funktioniert die Verbindung. Ich stellen Sie eine Verbindung mit dem folgenden Codelibvirt java Bindungen. Kann Geräte nicht ändern

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

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

und ich bin ein Verweis auf die Domain immer von

Domain d = conn.domainLookupByName("win7"); 

Aber wenn ich versuche, Geräte zu anschließen oder entfernen (ich will den vnc-Port ändern

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

ich eine Ausnahme erhalten angeforderte Operation Lesen ist nicht gültig: Das Gerät kann nicht auf inaktiven Domain lösen

OK, es scheint, die Fehlermeldung sagt mir, dass VM nicht läuft. Also, wenn ich die Domain über

d.create(); 

starten und ich führe die detachDevice von oben i die folgenden Fehler nicht unterstützte Konfiguration erhalten: Diese Art von Gerät kann nicht heißen unplugged sein.

Ja, na und? Wenn die Domain nicht läuft, kann ich die Konfiguration nicht ändern und wenn sie läuft, kann ich die Konfiguration auch nicht ändern?

Kann mir bitte jemand sagen, was ich falsch mache? Wie aktiviere ich eine Domain, ohne sie zu starten? Ich habe keine Hilfe bei einer Suche im Internet gefunden.

Vielen Dank im Voraus für jede Hilfe. Grüße, -chris-

Antwort

1

Sie virsh edit $domainName verwenden können, um die XML-Konfigurationsdatei

1

ich versucht, zu ändern und bekam den gleichen Fehler, dann habe ich versucht, die detachDeviceFlags Methode und scheiterte auch.

Ich denke, die detachDevice Methode wird verwendet, um eine Art von hotplus Gerät wie ein USB-Gerät zu lösen. Und die einzige Möglichkeit, ein vnc-Grafikgerät zu trennen, besteht darin, es als @liuzhijun neu zu definieren.

Statt es in CLI tun, hier ist eine API-Version unter Verwendung von mir:

// 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();