Univention Bugzilla – Bug 23092
Anzeige der VMs auf einem nicht erreichbaren Virtualisierungsserver
Last modified: 2011-12-27 11:01:41 CET
Wenn ein Virtualisierungsserver ausfällt, dann hat der Admin keine Chance zu sehen, welche Instanzen auf dem Server liefen. Dadurch wird es schwierig zu sehen, welche Instanzen gerade nicht verfügbar sind. UVMM sollte so erweitert werden, dass die Instanzen angezeigt werden, auch wenn der Virtualisierungsserver nicht erreichbar ist. Ideal wäre, wenn auch die Konfiguration als Read-Only angezeigt wird. Am besten so wie beim nicht erreichbaren Server auch mit einem roten Icon. Dann könnte als zusätzliches Feature das Verschieben der Instanzen von einem ausgefallenen Server auf einen laufenden Server ermöglicht werden.
Siehe auch Ticket #2011082510002264.
UVMMd und das UMC-Modul wurden nun so erweitert, das die VMs ausgefallener Server weiterhin angezeigt werden. Eine Fail-Over-Migration ist die einzig mögliche Aktion für solche VMs. In Rahmen dieser Arbeiten mussten große Teile überarbeitet werden, da vorher 1. Server nur über ihren Namen und nicht über die vollständige URI identifiziert wurden, 2. VMs über ihren Namen anstatt über ihre UUID identifiziert wurden. Dies hat zu vielen (fehlerträchtigen) zusätzlichen Abfragen innerhalb von UVMMd geführt, was im Rahmen dieses Bugs dann zu vielen Work-Arounds geführt hätte. Weiterhin wurden für den TreeView bisher alle Daten von allen VMs von allen Servern abgefragt, einige wenige Daten extrahiert und der überwiegende Teil verworfen, nur damit die nachfolgende Implementierung die Daten erneut anfordert. Der TreeView wurde jetzt so umgearbeitet, das er die angeforderten Informationen für die Dauer des Requests behält und die Daten so weiterverwendet werden können. Weitere interne Änderungen: 1. Im UVMM-Protokoll wurden die URI bei den Node_Data ergänzt und einige Datentypen von Feldern korrigiert. 2. Die Fehlerbehandlung in der Kommunikation zwischen UVMMd und UMC-Modul verwendet nun durchgehende Exceptions (Bug #19541) Weitere sichtbare Änderungen: 1. Beim Migrieren gibt es nun einen 'Cancel'-Knopf. 2. Beim Migrieren werden Image-Dateien, die von mehreren VMs benutzt werden, nicht mehr zum Löschen vorausgewählt. 3. Die Icons wurden überarbeitet und ergänzt: Sie haben jetzt alle eine einheitliche Größe von 16×16. svn27210..27224,27253...27257 univention-management-console_3.0.112-1.527.201109270946 univention-virtual-machine-manager-daemon_0.9.333-1.272.201109270948 QA: UCS-DVS is the only known external user. Make sure this still works: univention-dvs-sessionbroker/umc/modules/univention/management/console/handlers/dvs_templates/__init__.py:552: instance_cmd = umcp.SimpleCommand('uvmm/domain/overview', options={'group': 'default', 'node': netloc, 'domain': self.domain_info.name}, switch_module_if_required=True) univention-dvs-sessionbroker/umc/modules/univention/management/console/handlers/dvs/__init__.py:475: server_cmd = umcp.SimpleCommand('uvmm/node/overview', options={'group': 'default', 'node': server}, switch_module_if_required=True) univention-dvs-sessionbroker/umc/modules/univention/management/console/handlers/dvs/__init__.py:476: instance_cmd = umcp.SimpleCommand('uvmm/domain/overview', options={'group': 'default', 'node': server, 'domain': instance}, switch_module_if_required=True)
Es wurde noch eine Fehler korrigiert, wenn UVMMd initial gestartet wird und noch nie eine erfolgreiche Verbindung zu einem Server aufbauen konnte. In diesem Fall wurde ein leeres Node_Data-Objekt für den Server erstellt, dessen .name-Attribut Node war. Dies hat dann im UMC-Modul zu einem Traceback geführt. # uvmm query qemu://xen6.pmhahn5.test/system | grep name svn27270, univention-virtual-machine-manager-daemon_0.9.333-2.273.201109271223
Es trat noch das Problem auf, das beim Zusammenbrechen der Verbindung das UMC-Modul weiterhin durch eine explizite Anfrage an den UVMMd die Größe der Image-Dateien feststellen wollte. Dies hat dazu geführt, das die Domain nicht angezeigt wurde, bis der TCP-Timeout eintrat. Hierzu wurden jetzt noch zwei Änderungen durchgeführt: 1. Für die expliziten storage-Aufrufe wurde ein Wrapper um die libvirt-Aufrufe implementiert, der diese in einem eigenen Thread startet, aber spätestens nach 10s einen TimeoutError wirft. 2. Statt die Image-Datei-Größe und den Storage-Pool-Namen jeweils explizit abfragen zu müssen, speichert der UVMMd diese nun im Rahmen seines üblichen Caching-Verhaltens diese Informationen zwischen und liefert diese direkt zusammen mit den anderen Informationen über die VMs aus. Dadurch kann sich das UMC-Modul die explizite Anfrage sparen. Weitere Änderungen: 3. Beim löschen von einzelnen Laufwerken wurde im Gegensatz zum Löschen der kompletten VM nicht überprüft, ob die Image-Datei noch von anderen VMs mitbenutzt wird. Beide Funktionen nutzen nun die selbe Implementierung zum Überprüfen, ob es sich um ein Shared-Image handelt bzw. ob dieses in einem Storage-Pool liegt, über des es gelöscht werden kann. 4. Über die UCR-Variable uvmm/umc/show/treeview kann die Anzahl der Ebenen begrenzt werden, die im TreeView angezeigt werden. svn27284..27287, univention-virtual-machine-manager-daemon_0.9.333-3.274.201109272048
Ursache für Bug #23857 war ein Problem im UMC-Modul von UVMM: Dort wurde für eine "<interface type="ethernet">"-Konfiguration keine "<source>" angegeben, weshalb dort dann "None" eingetragen wurde, was zu besagten Traceback geführt hat. Das Problem wurde in UVMM dadurch behoben, das dort statt dessen dann _('unknown') ausgegeben wird. svn27317,27320 univention-virtual-machine-manager-daemon_0.9.333-7.278.201109282228 Siehe auch Bug #23843 für ähnliche Probleme, weshalb der ChangeLog-Eintrag jetzt nicht ergänzt wird.
Funcktioniert. Auch ein umfangreicher DVS Test war erfolgreich.
In einem Fehlerfall ist noch folgender Traceback aufgetreten: Traceback (most recent call last): File "/usr/lib/python2.4/site-packages/univention/management/console/handlers/__init__.py", line 160, in execute func( object ) File "/usr/lib/python2.4/site-packages/univention/management/console/handlers/uvmm/__init__.py", line 429, in uvmm_overview res = tv.get_tree_response(TreeView.LEVEL_ROOT) File "/usr/lib/python2.4/site-packages/univention/management/console/handlers/uvmm/treeview.py", line 181, in get_tree_response table = self.get_tree(current=current_path) File "/usr/lib/python2.4/site-packages/univention/management/console/handlers/uvmm/treeview.py", line 194, in get_tree self.node_tree = node_tree = self.uvmm_client.get_node_tree() File "/usr/lib/python2.4/site-packages/univention/management/console/handlers/uvmm/uvmmd.py", line 480, in get_node_tree node_info = protocol.Data_node() AttributeError: 'module' object has no attribute 'Data_node' s/Data_node/Data_Node/ wurde korrigiert. svn28894, univention-virtual-machine-manager_0.9.335-2.308.201111090901
Und noch ein Traceback im Fehlerfall: # File "/usr/lib/pymodules/python2.6/univention/uvmm/node.py", line 314, in update_expensive # logger.warning('Failed to query disk %s#%s: %s', self.pd.uri, dev.source, e.get_error_message()) # AttributeError: 'Data_Domain' object has no attribute 'uri' uri → uuid svn29101, univention-virtual-machine-manager-daemon_0.9.335-3.318.201111120152 ChangeLog: ±0
UCS 2.4-4 wurde veröffentlicht. Sollte der hier beschriebene Bug mit einer neueren Version von UCS erneut auftreten, so sollte dieser Bug dupliziert werden: "Clone This Bug"