diff options
author | Lily Nie <skycastlelily@gmail.com> | 2019-12-18 16:39:57 +0800 |
---|---|---|
committer | Cole Robinson <crobinso@redhat.com> | 2019-12-18 16:29:58 -0500 |
commit | d52c9d1ffa2d8c204fbb2a714f89b007fa6227ec (patch) | |
tree | 0b8377037811a9a99a86886a0050948bba3c197c /virtManager | |
parent | 8b7854af1f1be4cae66e1a4a63a46f484b348ae5 (diff) | |
download | virt-manager-d52c9d1ffa2d8c204fbb2a714f89b007fa6227ec.tar.gz |
Offer to delete the storage files without removing the VM
we should let users decide whether they want to also delete the
storage files or just dev from UI when they click the Remove button
Reviewed-by: Cole Robinson <crobinso@redhat.com>
Diffstat (limited to 'virtManager')
-rw-r--r-- | virtManager/delete.py | 49 | ||||
-rw-r--r-- | virtManager/details/details.py | 5 |
2 files changed, 42 insertions, 12 deletions
diff --git a/virtManager/delete.py b/virtManager/delete.py index 04043602..bb77a3ac 100644 --- a/virtManager/delete.py +++ b/virtManager/delete.py @@ -31,6 +31,8 @@ STORAGE_ROW_TOOLTIP = 7 class vmmDeleteDialog(vmmGObjectUI): + + disk = None @classmethod def show_instance(cls, parentobj, vm): try: @@ -75,6 +77,9 @@ class vmmDeleteDialog(vmmGObjectUI): self._set_vm(None) return 1 + def set_disk(self, disk): + self.disk = disk + def _cleanup(self): pass @@ -93,9 +98,14 @@ class vmmDeleteDialog(vmmGObjectUI): self.vm = newvm def _reset_state(self): - # Set VM name in title' + # Set VM name or disk.target in title' + if self.disk: + text = self.disk.target + else: + text = self.vm.get_name() + title_str = ("<span size='large' color='white'>%s '%s'</span>" % - (_("Delete"), xmlutil.xml_escape(self.vm.get_name()))) + (_("Delete"), xmlutil.xml_escape(text))) self.widget("header-label").set_markup(title_str) self.topwin.resize(1, 1) @@ -109,8 +119,10 @@ class vmmDeleteDialog(vmmGObjectUI): # Enable storage removal by default self.widget("delete-remove-storage").set_active(True) self.widget("delete-remove-storage").toggled() - - diskdatas = _build_diskdata_for_vm(self.vm) + if self.disk: + diskdatas = [_DiskData.from_disk(self.disk)] + else: + diskdatas = _build_diskdata_for_vm(self.vm) _populate_storage_list(self.widget("delete-storage-list"), self.vm, self.vm.conn, diskdatas) @@ -172,10 +184,15 @@ class vmmDeleteDialog(vmmGObjectUI): self.set_finish_cursor() - title = _("Deleting virtual machine '%s'") % self.vm.get_name() - text = title - if devs: - text = title + _(" and selected storage (this may take a while)") + if self.disk: + title = _("Deleting the selected storage") + text = _('%s') % self.disk.target + else: + title = _("Deleting virtual machine '%s'") % self.vm.get_name() + text = title + if devs: + text = title + _(" and selected storage (this may take a while)") + progWin = vmmAsyncJob(self._async_delete, [self.vm, devs], self._delete_finished_cb, [], @@ -195,18 +212,20 @@ class vmmDeleteDialog(vmmGObjectUI): conn = vm.conn.get_backend() meter = asyncjob.get_meter() + if not paths and self.disk: + vm.remove_device(self.disk) for path in paths: try: log.debug("Deleting path: %s", path) meter.start(text=_("Deleting path '%s'") % path) - self._async_delete_path(conn, path, meter) + self._async_delete_dev(vm, conn, path, meter) except Exception as e: storage_errors.append((str(e), "".join(traceback.format_exc()))) meter.end(0) - if undefine: + if undefine and not self.disk: log.debug("Removing VM '%s'", vm.get_name()) vm.delete() @@ -239,7 +258,7 @@ class vmmDeleteDialog(vmmGObjectUI): asyncjob.set_error(error, details) vm.conn.schedule_priority_tick(pollvm=True) - def _async_delete_path(self, conn, path, ignore): + def _async_delete_dev(self, vm, conn, path, ignore): vol = None try: @@ -251,6 +270,14 @@ class vmmDeleteDialog(vmmGObjectUI): vol.delete(0) else: os.unlink(path) + self._async_delete_xmldev(vm, path, ignore) + + def _async_delete_xmldev(self, vm, path, ignore): + for d in vm.xmlobj.devices.disk: + if d.path == path: + dev = d + break + vm.remove_device(dev) ################### diff --git a/virtManager/details/details.py b/virtManager/details/details.py index 0554bc42..cf75f2ac 100644 --- a/virtManager/details/details.py +++ b/virtManager/details/details.py @@ -1109,7 +1109,10 @@ class vmmDetails(vmmGObjectUI): str(e))) def remove_disk(self, disk): - self.remove_device(disk) + from ..delete import vmmDeleteDialog + dialog = vmmDeleteDialog() + dialog.set_disk(disk) + dialog.show(self.topwin, self.vm) def remove_xml_dev(self, src_ignore): devobj = self.get_hw_row()[HW_LIST_COL_DEVICE] |