]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager/openvz/Config.js
fix bug #115: simplify GUI for users without permissions
[pve-manager.git] / www / manager / openvz / Config.js
index 351c58ef04b49fa4181b1558e49aeff742068479..dcd7552eafe561636f585673612c973262cc68be 100644 (file)
@@ -15,44 +15,202 @@ Ext.define('PVE.openvz.Config', {
            throw "no VM ID specified";
        }
 
+       var caps = Ext.state.Manager.get('GuiCap');
+
+       me.statusStore = Ext.create('PVE.data.ObjectStore', {
+           url: "/api2/json/nodes/" + nodename + "/openvz/" + vmid + "/status/current",
+           interval: 1000
+       });
+
+       var vm_command = function(cmd, params) {
+           PVE.Utils.API2Request({
+               params: params,
+               url: '/nodes/' + nodename + '/openvz/' + vmid + "/status/" + cmd,
+               waitMsgTarget: me,
+               method: 'POST',
+               failure: function(response, opts) {
+                   Ext.Msg.alert('Error', response.htmlStatus);
+               }
+           });
+       };
+
+       var startBtn = Ext.create('Ext.Button', { 
+           text: gettext('Start'),
+           disabled: !caps.vms['VM.PowerMgmt'],
+           handler: function() {
+               vm_command('start');
+           }                       
+       }); 
+
+       var umountBtn = Ext.create('Ext.Button', { 
+           text: gettext('Unmount'),
+           disabled: true,
+           hidden: true,
+           handler: function() {
+               vm_command('umount');
+           }                       
+       }); 
+       var stopBtn = Ext.create('PVE.button.Button', {
+           text: gettext('Stop'),
+           disabled: !caps.vms['VM.PowerMgmt'],
+           confirmMsg: Ext.String.format(gettext("Do you really want to stop VM {0}?"), vmid),
+           handler: function() {
+               vm_command("stop");
+           }
+       });
+       var shutdownBtn = Ext.create('PVE.button.Button', {
+           text: gettext('Shutdown'),
+           disabled: !caps.vms['VM.PowerMgmt'],
+           confirmMsg: Ext.String.format(gettext("Do you really want to shutdown VM {0}?"), vmid),
+           handler: function() {
+               vm_command('shutdown');
+           }                       
+       });
+       var migrateBtn = Ext.create('Ext.Button', { 
+           text: gettext('Migrate'),
+           disabled: !caps.vms['VM.Migrate'],
+           handler: function() {
+               var win = Ext.create('PVE.window.Migrate', { 
+                   vmtype: 'openvz',
+                   nodename: nodename,
+                   vmid: vmid
+               });
+               win.show();
+           }
+       });
+
+       var removeBtn = Ext.create('PVE.button.Button', {
+           text: gettext('Remove'),
+           disabled: !caps.vms['VM.Allocate'],
+           confirmMsg: Ext.String.format(gettext('Are you sure you want to remove VM {0}? This will permanently erase all VM data.'), vmid),
+           handler: function() {
+               PVE.Utils.API2Request({
+                   url: '/nodes/' + nodename + '/openvz/' + vmid,
+                   method: 'DELETE',
+                   waitMsgTarget: me,
+                   failure: function(response, opts) {
+                       Ext.Msg.alert('Error', response.htmlStatus);
+                   }
+               });
+           }
+       });
+
        var vmname = me.pveSelNode.data.name;
-       var descr = vmname ? " '" + vmname + "'" : '';
+
+       var consoleBtn = Ext.create('Ext.Button', {
+           text: gettext('Console'),
+           disabled: !caps.vms['VM.Console'],
+           handler: function() {
+               PVE.Utils.openConoleWindow('openvz', vmid, nodename, vmname);
+           }
+       });
+
+       var descr = vmid + " (" + (vmname ? "'" + vmname + "' " : "'CT " + vmid + "'") + ")";
+
        Ext.apply(me, {
-           title: "OpenVZ container " + vmid + descr +  
-               " on node '" + nodename + "'",
+           title: Ext.String.format(gettext("Container {0} on node {1}"), descr, "'" + nodename + "'"),
            hstateid: 'ovztab',
+           tbar: [ startBtn, shutdownBtn, umountBtn, stopBtn, removeBtn, 
+                   migrateBtn, consoleBtn ],
+           defaults: { statusStore: me.statusStore },
            items: [
                {
-                   title: 'Summary',
+                   title: gettext('Summary'),
                    xtype: 'pveOpenVZSummary',
-                   itemId: 'summary',
+                   itemId: 'summary'
                },
                {
-                   title: 'Options',
-                   itemId: 'options',
-                   html: 'OpenVZ options - not inplemented!'
+                   title: gettext('Resources'),
+                   itemId: 'resources',
+                   xtype: 'pveOpenVZRessourceView'
                },
                {
-                   title: 'Console',
-                   itemId: 'console',
-                   nodename: nodename,
-                   vmid: vmid,
-                   html: 'OpenVZ console - not inplemented!'
+                   title: gettext('Network'),
+                   itemId: 'network',
+                   xtype: 'pveOpenVZNetworkView'
                },
                {
-                   title: 'Backup',
-                   itemId: 'backup',
-                   html: 'Backup and restore - not implemented!'
+                   title: 'DNS',
+                   itemId: 'dns',
+                   xtype: 'pveOpenVZDNS'
                },
                {
-                   title: 'Permissions',
-                   itemId: 'permissions',
-                   html: 'permissions ' + vmid
+                   title: gettext('Options'),
+                   itemId: 'options',
+                   xtype: 'pveOpenVZOptions'
+               },
+               {
+                   title: 'UBC',
+                   itemId: 'ubc',
+                   xtype: 'pveBeanCounterGrid',
+                   url: '/api2/json/nodes/' + nodename + '/openvz/' + vmid + '/status/ubc'
                }
-
            ]
        });
 
+
+       if (caps.vms['VM.Console']) {
+           me.items.push({
+               title: "InitLog",
+               itemId: 'initlog',
+               xtype: 'pveLogView',
+               url: '/api2/extjs/nodes/' + nodename + '/openvz/' + vmid + '/initlog'
+           });
+       }
+
+       if (caps.vms['VM.Backup']) {
+           me.items.push({
+               title: gettext('Backup'),
+               xtype: 'pveBackupView',
+               itemId: 'backup'
+           });
+       }
+
+       if (caps.vms['Permissions.Modify']) {
+           me.items.push({
+               xtype: 'pveACLView',
+               title: gettext('Permissions'),
+               itemId: 'permissions',
+               path: '/vms/' + vmid
+           });
+       }
+
        me.callParent();
-   }
+
+       me.statusStore.on('load', function(s, records, success) {
+           var status;
+           if (!success) {
+               me.workspace.checkVmMigration(me.pveSelNode);
+               status = 'unknown';
+           } else {
+               var rec = s.data.get('status');
+               status = rec ? rec.data.value : 'unknown';
+           }
+           startBtn.setDisabled(!caps.vms['VM.PowerMgmt'] || status === 'running');
+           shutdownBtn.setDisabled(!caps.vms['VM.PowerMgmt'] || status !== 'running');
+           stopBtn.setDisabled(!caps.vms['VM.PowerMgmt'] || status === 'stopped');
+           removeBtn.setDisabled(!caps.vms['VM.Allocate'] || status !== 'stopped');
+
+           if (status === 'mounted') {
+               umountBtn.setDisabled(false);
+               umountBtn.setVisible(true);
+               stopBtn.setVisible(false);
+           } else {
+               umountBtn.setDisabled(true);
+               umountBtn.setVisible(false);
+               stopBtn.setVisible(true);
+           }
+       });
+
+       me.on('afterrender', function() {
+           me.statusStore.startUpdate();
+       });
+
+       me.on('destroy', function() {
+           me.statusStore.stopUpdate();
+       });
+    }
 });