
This patch fixes delete confirmation window, changes backend in order to raise proper exception and fixes the ui to catch the right message from backend. Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- src/kimchi/i18n.py | 1 + src/kimchi/model/vms.py | 31 +++++++++++++++++-------------- ui/js/src/kimchi.guest_main.js | 12 ++++++------ ui/pages/i18n.html.tmpl | 1 + 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py index ade845e..f1631f4 100644 --- a/src/kimchi/i18n.py +++ b/src/kimchi/i18n.py @@ -78,6 +78,7 @@ messages = { "KCHVM0018E": _("Virtual machine volumes must be a list of strings with distinct LUNs names."), "KCHVM0019E": _("Unable to start virtual machine %(name)s. Details: %(err)s"), "KCHVM0020E": _("Unable to stop virtual machine %(name)s. Details: %(err)s"), + "KCHVM0021E": _("Unable to delete virtual machine %(name)s. Details: %(err)s"), "KCHVMIF0001E": _("Interface %(iface)s does not exist in virtual machine %(name)s"), "KCHVMIF0002E": _("Network %(network)s specified for virtual machine %(name)s does not exist"), diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py index 7f29f1a..f999ed0 100644 --- a/src/kimchi/model/vms.py +++ b/src/kimchi/model/vms.py @@ -345,26 +345,29 @@ class VMModel(object): raise def delete(self, name): - if self._vm_exists(name): - conn = self.conn.get() - dom = self.get_vm(name, self.conn) - self._vmscreenshot_delete(dom.UUIDString()) - paths = self._vm_get_disk_paths(dom) - info = self.lookup(name) + conn = self.conn.get() + dom = self.get_vm(name, self.conn) + self._vmscreenshot_delete(dom.UUIDString()) + paths = self._vm_get_disk_paths(dom) + info = self.lookup(name) - if info['state'] == 'running': - self.stop(name) + if info['state'] == 'running': + self.stop(name) + try: dom.undefine() + except libvirt.libvirtError as e: + raise OperationFailed("KCHVM0021E", + {'name': name, 'err': e.get_error_message()}) - for path in paths: - vol = conn.storageVolLookupByPath(path) - vol.delete(0) + for path in paths: + vol = conn.storageVolLookupByPath(path) + vol.delete(0) - with self.objstore as session: - session.delete('vm', dom.UUIDString(), ignore_missing=True) + with self.objstore as session: + session.delete('vm', dom.UUIDString(), ignore_missing=True) - vnc.remove_proxy_token(name) + vnc.remove_proxy_token(name) def start(self, name): # make sure the ISO file has read permission diff --git a/ui/js/src/kimchi.guest_main.js b/ui/js/src/kimchi.guest_main.js index 2976cac..d31a01d 100644 --- a/ui/js/src/kimchi.guest_main.js +++ b/ui/js/src/kimchi.guest_main.js @@ -74,16 +74,16 @@ kimchi.vmdelete = function(event) { var vm = $(this).closest('li[name=guest]'); var vm_id=vm.attr("id"); var settings = { - title : i18n['msg.confirm.delete.title'], - content : i18n['msg.vm.confirm.delete'], - confirm : i18n['msg.confirm.delete.confirm'], - cancel : i18n['msg.confirm.delete.cancel'] + title : i18n['KCHVM6002M'], + content : i18n['KCHVM6001M'], + confirm : i18n['KCHAPI6002M'], + cancel : i18n['KCHAPI6003M'] }; kimchi.confirm(settings, function() { kimchi.deleteVM(vm_id, function(result) { kimchi.listVmsAuto(); - }, function() { - kimchi.message.error(i18n['msg.fail.delete']); + }, function(err) { + kimchi.message.error(err.responseJSON.reason); }); }, function() { }); diff --git a/ui/pages/i18n.html.tmpl b/ui/pages/i18n.html.tmpl index f8af68e..b3eeab8 100644 --- a/ui/pages/i18n.html.tmpl +++ b/ui/pages/i18n.html.tmpl @@ -95,6 +95,7 @@ var i18n = { 'KCHDR6011M': "$_("Report name should contain only letters, digits and/or hyphen ('-').")", 'KCHVM6001M': "$_("This will delete the virtual machine and its virtual disks. This operation cannot be undone. Would you like to continue?")", + 'KCHVM6002M': "$_("Delete Confirmation")", 'KCHNET6001E': "$_("The VLAN id must be between 1 and 4094.")", -- 1.8.5.3