[pve-devel] [PATCH manager v2 5/5] make container clones/template available in the gui

Dominik Csapak d.csapak at proxmox.com
Wed Mar 21 15:12:17 CET 2018


also refactor the right click menu logic

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 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
@@ -116,6 +116,14 @@ Ext.define('PVE.lxc.CmdMenu', {
 		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',
 		hidden: standalone || !caps.vms['VM.Migrate'],
@@ -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
@@ -94,6 +94,32 @@ Ext.define('PVE.lxc.Config', {
 	    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'],
 		    text: gettext('Manage HA'),
-- 
2.11.0





More information about the pve-devel mailing list