Permit to delete a running VM.
The VM will be forced off before being deleted. (crobinso: fix a minor pylint violation)
This commit is contained in:
parent
44328b1507
commit
660178abe1
|
@ -115,6 +115,50 @@
|
|||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkAlignment" id="delete-warn-running-vm-align">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="left_padding">6</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="delete-warn-running-vm-box">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">3</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="delete-warn-running-vm-icon">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-dialog-warning</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="delete-warn-running-vm-label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes"><small>This VM is currently running and will be forced off before being deleted</small></property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="delete-remove-storage">
|
||||
<property name="label" translatable="yes">Delete _associated storage files</property>
|
||||
|
@ -129,7 +173,7 @@
|
|||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
|
|
|
@ -184,7 +184,6 @@
|
|||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Virtual _Machine</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_details_menu_vm" swapped="no"/>
|
||||
<child type="submenu">
|
||||
<object class="GtkMenu" id="virtual_machine1_menu">
|
||||
<property name="can_focus">False</property>
|
||||
|
|
|
@ -651,7 +651,10 @@ class vmmConsolePages(vmmGObjectUI):
|
|||
self.page_changed()
|
||||
|
||||
def is_visible(self):
|
||||
return self.topwin.get_visible()
|
||||
if self.topwin:
|
||||
return self.topwin.get_visible()
|
||||
else:
|
||||
return False
|
||||
|
||||
def _cleanup(self):
|
||||
self.vm = None
|
||||
|
@ -892,6 +895,9 @@ class vmmConsolePages(vmmGObjectUI):
|
|||
##########################
|
||||
|
||||
def view_vm_status(self):
|
||||
if not self.vm:
|
||||
# window has been closed and no pages to update are available.
|
||||
return
|
||||
status = self.vm.status()
|
||||
if status == libvirt.VIR_DOMAIN_SHUTOFF:
|
||||
self.activate_unavailable_page(_("Guest not running"))
|
||||
|
@ -900,7 +906,6 @@ class vmmConsolePages(vmmGObjectUI):
|
|||
self.activate_unavailable_page(_("Guest has crashed"))
|
||||
|
||||
def close_viewer(self):
|
||||
viewport = self.widget("console-gfx-viewport")
|
||||
if self.viewer is None:
|
||||
return
|
||||
|
||||
|
@ -908,6 +913,7 @@ class vmmConsolePages(vmmGObjectUI):
|
|||
self.viewer = None
|
||||
w = v.display
|
||||
|
||||
viewport = self.widget("console-gfx-viewport")
|
||||
if w and w in viewport.get_children():
|
||||
viewport.remove(w)
|
||||
|
||||
|
|
|
@ -99,6 +99,10 @@ class vmmDeleteDialog(vmmGObjectUI):
|
|||
|
||||
self.widget("delete-cancel").grab_focus()
|
||||
|
||||
# Show warning message if VM is running
|
||||
vm_active = self.vm.is_active()
|
||||
self.widget("delete-warn-running-vm-box").set_visible(vm_active)
|
||||
|
||||
# Disable storage removal by default
|
||||
self.widget("delete-remove-storage").set_active(True)
|
||||
self.widget("delete-remove-storage").toggled()
|
||||
|
@ -169,6 +173,10 @@ class vmmDeleteDialog(vmmGObjectUI):
|
|||
details = ""
|
||||
|
||||
try:
|
||||
if self.vm.is_active():
|
||||
logging.debug("Forcing VM '%s' power off.", self.vm.get_name())
|
||||
self.vm.destroy()
|
||||
|
||||
# Open a seperate connection to install on since this is async
|
||||
logging.debug("Threading off connection to delete vol.")
|
||||
newconn = util.dup_conn(self.conn).vmm
|
||||
|
|
|
@ -404,7 +404,6 @@ class vmmDetails(vmmGObjectUI):
|
|||
"on_details_customize_finish_clicked": self.customize_finish,
|
||||
"on_details_cancel_customize_clicked": self.close,
|
||||
|
||||
"on_details_menu_vm": self.update_vm_menu,
|
||||
"on_details_menu_run_activate": self.control_vm_run,
|
||||
"on_details_menu_poweroff_activate": self.control_vm_shutdown,
|
||||
"on_details_menu_reboot_activate": self.control_vm_reboot,
|
||||
|
@ -1551,10 +1550,6 @@ class vmmDetails(vmmGObjectUI):
|
|||
self.vm.get_uuid())
|
||||
|
||||
|
||||
def update_vm_menu(self, src_ignore):
|
||||
delete = bool(self.vm and self.vm.is_runable())
|
||||
self.widget("details-menu-delete").set_sensitive(delete)
|
||||
|
||||
def control_vm_run(self, src_ignore):
|
||||
self.emit("action-run-domain",
|
||||
self.vm.conn.get_uri(), self.vm.get_uuid())
|
||||
|
|
|
@ -1045,15 +1045,12 @@ class vmmManager(vmmGObjectUI):
|
|||
self.widget("vm-run").set_label(strip_text)
|
||||
|
||||
def vm_selected(self, ignore=None):
|
||||
conn = self.current_conn()
|
||||
vm = self.current_vm()
|
||||
|
||||
show_open = bool(vm)
|
||||
show_details = bool(vm)
|
||||
host_details = bool(len(self.rows))
|
||||
|
||||
delete = bool((vm and vm.is_runable()) or
|
||||
(not vm and conn))
|
||||
show_run = bool(vm and vm.is_runable())
|
||||
is_paused = bool(vm and vm.is_paused())
|
||||
if is_paused:
|
||||
|
@ -1073,7 +1070,6 @@ class vmmManager(vmmGObjectUI):
|
|||
|
||||
self.widget("menu_edit_details").set_sensitive(show_details)
|
||||
self.widget("menu_host_details").set_sensitive(host_details)
|
||||
self.widget("menu_edit_delete").set_sensitive(delete)
|
||||
|
||||
def popup_vm_menu_key(self, widget_ignore, event):
|
||||
if Gdk.keyval_name(event.keyval) != "Menu":
|
||||
|
@ -1118,7 +1114,6 @@ class vmmManager(vmmGObjectUI):
|
|||
self.vmmenu_items["resume"].set_sensitive(paused)
|
||||
self.vmmenu_items["migrate"].set_sensitive(stop)
|
||||
self.vmmenu_items["clone"].set_sensitive(not ro)
|
||||
self.vmmenu_items["delete"].set_sensitive(run)
|
||||
|
||||
self.vmmenushutdown_items["poweroff"].set_sensitive(stop)
|
||||
self.vmmenushutdown_items["reboot"].set_sensitive(stop)
|
||||
|
|
Loading…
Reference in New Issue