fixme : disable rollback button is current is a template

Signed-off-by: Alexandre Derumier <[email protected]>
---
 www/manager/qemu/SnapshotTree.js |  157 +++++++++++++++++++++++++++++++++++---
 1 file changed, 148 insertions(+), 9 deletions(-)

diff --git a/www/manager/qemu/SnapshotTree.js b/www/manager/qemu/SnapshotTree.js
index f98c849..64ffdc5 100644
--- a/www/manager/qemu/SnapshotTree.js
+++ b/www/manager/qemu/SnapshotTree.js
@@ -22,6 +22,7 @@ Ext.define('PVE.qemu.SnapshotTree', {
 
     reload: function(repeat) {
         var me = this;
+       var currentistemplate;
 
        PVE.Utils.API2Request({
            url: '/nodes/' + me.nodename + '/qemu/' + me.vmid + '/snapshot',
@@ -38,15 +39,18 @@ Ext.define('PVE.qemu.SnapshotTree', {
                Ext.Array.each(response.result.data, function(item) {
                    item.leaf = true;
                    item.children = [];
+
+                   var running = item.running ? '-running' : '';
+                   var template = item.template ? '-template' : '';
+
                    if (item.name === 'current') {
                        digest = item.digest + item.running;
-                       if (item.running) {
-                           item.iconCls = 'x-tree-node-computer-running';
-                       } else {
-                           item.iconCls = 'x-tree-node-computer';
+                       item.iconCls = 'x-tree-node-computer' + running + 
template;
+                       if(item.template){
+                          currentistemplate = 1;
                        }
                    } else {
-                       item.iconCls = 'x-tree-node-snapshot';
+                        item.iconCls = 'x-tree-node-snapshot' + template;
                    }
                    idhash[item.name] = item;
                });
@@ -78,8 +82,10 @@ Ext.define('PVE.qemu.SnapshotTree', {
             method: 'GET',
             success: function(response, options) {
                 var res = response.result.data;
-               if (res === 1) {
+               if (res === 1 && !currentistemplate) {
                   Ext.getCmp('snapshotBtn').enable();
+               }else{
+                  Ext.getCmp('snapshotBtn').disable();
                }
             }
         });
@@ -109,11 +115,28 @@ Ext.define('PVE.qemu.SnapshotTree', {
                record.data.name !== 'current';
        };
 
+       var valid_snapshot_delete = function(record) {
+           return record && record.data && record.data.name &&
+               record.data.name !== 'current' && !record.data.template;
+       };
+
        var valid_snapshot_rollback = function(record) {
            return record && record.data && record.data.name &&
                record.data.name !== 'current' && !record.data.snapstate;
        };
 
+       var valid_template = function(record) {
+           if(record && record.data && record.data.template){
+               return true;
+           }else{
+               return false;
+           }
+       };
+
+       var valid_not_template = function(record) {
+           return record && record.data && !record.data.template && 
!record.data.snapstate;
+       };
+
        var run_editor = function() {
            var rec = sm.getSelection()[0];
            if (valid_snapshot(rec)) {
@@ -127,6 +150,42 @@ Ext.define('PVE.qemu.SnapshotTree', {
            }
        };
 
+       var run_clone = function() {
+           var rec = sm.getSelection()[0];
+           if (valid_template(rec)) {
+
+               var snapname = rec.data.name;
+               var params = { feature: 'clone' };
+               if (snapname && snapname !== 'current') {
+                   params.snapname = snapname;
+               }
+
+               PVE.Utils.API2Request({
+                   waitMsgTarget: me,
+                   url: '/nodes/' + me.nodename + '/qemu/' + me.vmid + 
'/feature',
+                   params: params,
+                   method: 'GET',
+                   success: function(response, options) {
+                       var res = response.result.data;
+                       var clonefeature;
+
+                       if (res === 1) {
+                           clonefeature = 1;
+                       }
+
+                       var win = Ext.create('PVE.window.Clone', {
+                           snapname: snapname,
+                           nodename: me.nodename,
+                           vmid: me.vmid,
+                           clonefeature: clonefeature
+                       });
+                       win.show();
+                       me.mon(win, 'close', me.reload, me);
+                   }
+               });
+           }
+       };
+
        var editBtn = new PVE.button.Button({
            text: gettext('Edit'),
            disabled: true,
@@ -180,7 +239,7 @@ Ext.define('PVE.qemu.SnapshotTree', {
                                            "'" + rec.data.name + "'");
                return msg;
            },
-           enableFn: valid_snapshot,
+           enableFn: valid_snapshot_delete,
            handler: function(btn, event) {
                var rec = sm.getSelection()[0];
                if (!rec) {
@@ -220,15 +279,95 @@ Ext.define('PVE.qemu.SnapshotTree', {
            }
        });
 
+
+       var templateBtn = new PVE.button.Button({
+           text: gettext('Create Template'),
+           enableFn: valid_not_template,
+           disabled: true,
+           selModel: sm,
+            handler: function(btn, event) {
+                var rec = sm.getSelection()[0];
+                if (!rec) {
+                    return;
+                }
+               var params = {};
+
+                if (rec.data.name && rec.data.name !== 'current') {
+                    params.snapname = rec.data.name;
+                }
+
+                PVE.Utils.API2Request({
+                    url: '/nodes/' + me.nodename + '/qemu/' + me.vmid + 
'/template',
+                    params: params,
+                    method: 'POST',
+                    waitMsgTarget: me,
+                    callback: function() {
+                        me.reload();
+                    },
+                    failure: function (response, opts) {
+                        Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+                    },
+                    success: function(response, options) {
+                        //win.show();
+                    }
+                });
+            }
+
+       });
+
+       var templatedeleteBtn = new PVE.button.Button({
+           text: gettext('Delete Template'),
+           disabled: true,
+           selModel: sm,
+           enableFn: valid_template,
+            handler: function(btn, event) {
+                var rec = sm.getSelection()[0];
+                if (!rec) {
+                    return;
+                }
+               var params = { delete:1 };
+
+                if (rec.data.name && rec.data.name !== 'current') {
+                    params.snapname = rec.data.name;
+                }
+
+                PVE.Utils.API2Request({
+                    url: '/nodes/' + me.nodename + '/qemu/' + me.vmid + 
'/template',
+                    params: params,
+                    method: 'POST',
+                    waitMsgTarget: me,
+                    callback: function() {
+                        me.reload();
+                    },
+                    failure: function (response, opts) {
+                        Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+                    },
+                    success: function(response, options) {
+                        //win.show();
+                    }
+                });
+            }
+
+       });
+
+       var cloneBtn = new PVE.button.Button({
+           text: gettext('Clone Template'),
+           disabled: true,
+           selModel: sm,
+           enableFn: valid_template,
+           handler: run_clone
+       });
+
+
        Ext.apply(me, {
            layout: 'fit',
            rootVisible: false,
            animate: false,
            sortableColumns: false,
            selModel: sm,
-           tbar: [ snapshotBtn, rollbackBtn, removeBtn, editBtn ],
+           tbar: [ snapshotBtn, rollbackBtn, removeBtn, editBtn, templateBtn, 
templatedeleteBtn, cloneBtn ],
            fields: [ 
-               'name', 'description', 'snapstate', 'vmstate', 'running',
+               'name', 'description', 'snapstate', 'vmstate', 'running', 
'template',
                { name: 'snaptime', type: 'date', dateFormat: 'timestamp' }
            ],
            columns: [
-- 
1.7.10.4

_______________________________________________
pve-devel mailing list
[email protected]
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to