From 9bad05bd762fac8b0e5df44cc64ffb445e8df1e8 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Wed, 21 Mar 2018 15:12:17 +0100 Subject: [PATCH] make container clones/template available in the gui also refactor the right click menu logic Signed-off-by: Dominik Csapak --- www/manager6/Utils.js | 36 ++++++++++------------------ www/manager6/lxc/CmdMenu.js | 48 +++++++++++++++++++++---------------- www/manager6/lxc/Config.js | 26 ++++++++++++++++++++ 3 files changed, 67 insertions(+), 43 deletions(-) diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js index 7b495890..6345b2b4 100644 --- a/www/manager6/Utils.js +++ b/www/manager6/Utils.js @@ -831,32 +831,22 @@ Ext.define('PVE.Utils', { utilities: { v.select(record); } var menu; + var template = !!record.data.template; + var type = record.data.type; - if (record.data.type === 'qemu' && !record.data.template) { - menu = Ext.create('PVE.qemu.CmdMenu', { - pveSelNode: record - }); - } else if (record.data.type === 'qemu' && record.data.template) { - menu = Ext.create('PVE.menu.TemplateMenu', { - pveSelNode: record - }); - } else if (record.data.type === 'lxc' && !record.data.template) { - menu = Ext.create('PVE.lxc.CmdMenu', { - pveSelNode: record - }); - } else if (record.data.type === 'lxc' && record.data.template) { - /* since clone does not work reliably, disable for now - menu = Ext.create('PVE.lxc.TemplateMenu', { - pveSelNode: record - }); - */ - return; - - } else if (record.data.type === 'node' ){ - menu = Ext.create('PVE.node.CmdMenu', { + if (template) { + if (type === 'qemu' || type == 'lxc') { + menu = Ext.create('PVE.menu.TemplateMenu', { + pveSelNode: record + }); + } + } else if (type === 'qemu' || + type === 'lxc' || + type === 'node') { + menu = Ext.create('PVE.' + type + '.CmdMenu', { + pveSelNode: record, nodename: record.data.node }); - } else { return; } diff --git a/www/manager6/lxc/CmdMenu.js b/www/manager6/lxc/CmdMenu.js index 6ad3ca29..13edcb2e 100644 --- a/www/manager6/lxc/CmdMenu.js +++ b/www/manager6/lxc/CmdMenu.js @@ -115,6 +115,14 @@ Ext.define('PVE.lxc.CmdMenu', { xtype: 'menuseparator', hidden: standalone || !caps.vms['VM.Migrate'] }, + { + text: gettext('Clone'), + iconCls: 'fa fa-fw fa-clone', + hidden: !caps.vms['VM.Clone'], + handler: function() { + PVE.window.Clone.wrap(nodename, vmid, me.isTemplate, 'lxc'); + } + }, { text: gettext('Migrate'), iconCls: 'fa fa-fw fa-send-o', @@ -128,26 +136,26 @@ Ext.define('PVE.lxc.CmdMenu', { win.show(); } }, -// { -// text: gettext('Convert to template'), -// icon: '/pve2/images/forward.png', -// handler: function() { -// var msg = Proxmox.Utils.format_task_description('vztemplate', vmid); -// Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) { -// if (btn !== 'yes') { -// return; -// } -// -// Proxmox.Utils.API2Request({ -// url: '/nodes/' + nodename + '/lxc/' + vmid + '/template', -// method: 'POST', -// failure: function(response, opts) { -// Ext.Msg.alert('Error', response.htmlStatus); -// } -// }); -// }); -// } -// }, + { + text: gettext('Convert to template'), + iconCls: 'fa fa-fw fa-file-o', + handler: function() { + var msg = Proxmox.Utils.format_task_description('vztemplate', vmid); + Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) { + if (btn !== 'yes') { + return; + } + + Proxmox.Utils.API2Request({ + url: '/nodes/' + nodename + '/lxc/' + vmid + '/template', + method: 'POST', + failure: function(response, opts) { + Ext.Msg.alert('Error', response.htmlStatus); + } + }); + }); + } + }, { xtype: 'menuseparator' }, { text: gettext('Console'), diff --git a/www/manager6/lxc/Config.js b/www/manager6/lxc/Config.js index 52569901..c9c49177 100644 --- a/www/manager6/lxc/Config.js +++ b/www/manager6/lxc/Config.js @@ -93,6 +93,32 @@ Ext.define('PVE.lxc.Config', { var moreBtn = Ext.create('Proxmox.button.Button', { text: gettext('More'), menu: { items: [ + { + text: gettext('Clone'), + iconCls: 'fa fa-fw fa-clone', + hidden: caps.vms['VM.Clone'] ? false : true, + handler: function() { + PVE.window.Clone.wrap(nodename, vmid, template, 'lxc'); + } + }, + { + text: gettext('Convert to template'), + disabled: template, + xtype: 'pveMenuItem', + iconCls: 'fa fa-fw fa-file-o', + hidden: caps.vms['VM.Allocate'] ? false : true, + confirmMsg: Proxmox.Utils.format_task_description('vztemplate', vmid), + handler: function() { + Proxmox.Utils.API2Request({ + url: base_url + '/template', + waitMsgTarget: me, + method: 'POST', + failure: function(response, opts) { + Ext.Msg.alert('Error', response.htmlStatus); + } + }); + } + }, { iconCls: 'fa fa-heartbeat ', hidden: !caps.nodes['Sys.Console'], -- 2.39.2