]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/node/Config.js
Revert "ui: temporary disable repo config entry"
[pve-manager.git] / www / manager6 / node / Config.js
index 2d354e5938dc79f47ed8cffb57ed1d7c568a38fe..4c54da3bc3c833c715dd66be92f03f89c5fbb48f 100644 (file)
@@ -2,6 +2,8 @@ Ext.define('PVE.node.Config', {
     extend: 'PVE.panel.Config',
     alias: 'widget.PVE.node.Config',
 
+    onlineHelp: 'chapter_system_administration',
+
     initComponent: function() {
         var me = this;
 
@@ -12,107 +14,99 @@ Ext.define('PVE.node.Config', {
 
        var caps = Ext.state.Manager.get('GuiCap');
 
-       me.statusStore = Ext.create('PVE.data.ObjectStore', {
+       me.statusStore = Ext.create('Proxmox.data.ObjectStore', {
            url: "/api2/json/nodes/" + nodename + "/status",
-           interval: 1000
+           interval: 5000,
        });
 
        var node_command = function(cmd) {
-           PVE.Utils.API2Request({
+           Proxmox.Utils.API2Request({
                params: { command: cmd },
                url: '/nodes/' + nodename + '/status',
                method: 'POST',
                waitMsgTarget: me,
                failure: function(response, opts) {
                    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
-               }
+               },
            });
        };
-       
+
        var actionBtn = Ext.create('Ext.Button', {
-           text: gettext('More'),
+           text: gettext('Bulk Actions'),
+           iconCls: 'fa fa-fw fa-ellipsis-v',
            disabled: !caps.nodes['Sys.PowerMgmt'],
            menu: new Ext.menu.Menu({
                items: [
                    {
-                       text: gettext('Start All VMs'),
-                       icon: '/pve2/images/start.png',
+                       text: gettext('Bulk Start'),
+                       iconCls: 'fa fa-fw fa-play',
                        handler: function() {
-                           var msg = Ext.String.format(gettext("Do you really want to start all Vms on  node {0}?"), nodename);
-                           Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
-                               if (btn !== 'yes') {
-                                   return;
-                               }
-                               PVE.Utils.API2Request({
-                                   params: { force: 1 },
-                                   url: '/nodes/' + nodename + '/startall',
-                                   method: 'POST',
-                                   waitMsgTarget: me,
-                                   failure: function(response, opts) {
-                                       Ext.Msg.alert('Error', response.htmlStatus);
-                                   }
-                               });
+                           var win = Ext.create('PVE.window.BulkAction', {
+                               nodename: nodename,
+                               title: gettext('Bulk Start'),
+                               btnText: gettext('Start'),
+                               action: 'startall',
                            });
-                       }
+                           win.show();
+                       },
                    },
                    {
-                       text: gettext('Stop All VMs'),
-                       icon: '/pve2/images/gtk-stop.png',
+                       text: gettext('Bulk Stop'),
+                       iconCls: 'fa fa-fw fa-stop',
                        handler: function() {
-                           var msg = Ext.String.format(gettext("Do you really want to stop all Vms on  node {0}?"), nodename);
-                           Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
-                               if (btn !== 'yes') {
-                                   return;
-                               }
-                           
-                               PVE.Utils.API2Request({
-                                   url: '/nodes/' + nodename + '/stopall',
-                                   method: 'POST',
-                                   waitMsgTarget: me,
-                                   failure: function(response, opts) {
-                                       Ext.Msg.alert('Error', response.htmlStatus);
-                                   }
-                               });
+                           var win = Ext.create('PVE.window.BulkAction', {
+                               nodename: nodename,
+                               title: gettext('Bulk Stop'),
+                               btnText: gettext('Stop'),
+                               action: 'stopall',
                            });
-                       }
+                           win.show();
+                       },
                    },
                    {
-                       text: gettext('Migrate All VMs'),
-                       icon: '/pve2/images/forward.png',
+                       text: gettext('Bulk Migrate'),
+                       iconCls: 'fa fa-fw fa-send-o',
                        handler: function() {
-                           var win = Ext.create('PVE.window.MigrateAll', {
+                           var win = Ext.create('PVE.window.BulkAction', {
                                nodename: nodename,
+                               title: gettext('Bulk Migrate'),
+                               btnText: gettext('Migrate'),
+                               action: 'migrateall',
                            });
                            win.show();
-                       }
-                   }
-               ]
-           })
-       }); 
-
-       var restartBtn = Ext.create('PVE.button.Button', {
-           text: gettext('Restart'),
+                       },
+                   },
+               ],
+           }),
+       });
+
+       let restartBtn = Ext.create('Proxmox.button.Button', {
+           text: gettext('Reboot'),
            disabled: !caps.nodes['Sys.PowerMgmt'],
-           confirmMsg: Ext.String.format(gettext("Do you really want to restart node {0}?"), nodename),
-           handler: function() { 
+           dangerous: true,
+           confirmMsg: Ext.String.format(gettext("Reboot node '{0}'?"), nodename),
+           handler: function() {
                node_command('reboot');
-           }
+           },
+           iconCls: 'fa fa-undo',
        });
 
-       var shutdownBtn = Ext.create('PVE.button.Button', {
+       var shutdownBtn = Ext.create('Proxmox.button.Button', {
            text: gettext('Shutdown'),
            disabled: !caps.nodes['Sys.PowerMgmt'],
-           confirmMsg: Ext.String.format(gettext("Do you really want to shutdown node {0}?"), nodename),
-           handler: function() { 
+           dangerous: true,
+           confirmMsg: Ext.String.format(gettext("Shutdown node '{0}'?"), nodename),
+           handler: function() {
                node_command('shutdown');
-           }
+           },
+           iconCls: 'fa fa-power-off',
        });
 
        var shellBtn = Ext.create('PVE.button.ConsoleButton', {
            disabled: !caps.nodes['Sys.Console'],
            text: gettext('Shell'),
            consoleType: 'shell',
-           nodename: nodename
+           nodename: nodename,
        });
 
        me.items = [];
@@ -120,109 +114,320 @@ Ext.define('PVE.node.Config', {
        Ext.apply(me, {
            title: gettext('Node') + " '" + nodename + "'",
            hstateid: 'nodetab',
-           defaults: { statusStore: me.statusStore },
-           tbar: [ restartBtn, shutdownBtn, shellBtn, actionBtn]
+           defaults: {
+               statusStore: me.statusStore,
+           },
+           tbar: [restartBtn, shutdownBtn, shellBtn, actionBtn],
        });
 
        if (caps.nodes['Sys.Audit']) {
            me.items.push(
                {
+                   xtype: 'pveNodeSummary',
                    title: gettext('Summary'),
+                   iconCls: 'fa fa-book',
                    itemId: 'summary',
-                   xtype: 'pveNodeSummary'
                },
                {
-                   title: gettext('Services'),
+                   xtype: 'pveNotesView',
+                   title: gettext('Notes'),
+                   iconCls: 'fa fa-sticky-note-o',
+                   itemId: 'notes',
+               },
+           );
+       }
+
+       if (caps.nodes['Sys.Console']) {
+           me.items.push(
+               {
+                   xtype: 'pveNoVncConsole',
+                   title: gettext('Shell'),
+                   iconCls: 'fa fa-terminal',
+                   itemId: 'jsconsole',
+                   consoleType: 'shell',
+                   xtermjs: true,
+                   nodename: nodename,
+               },
+           );
+       }
+
+       if (caps.nodes['Sys.Audit']) {
+           me.items.push(
+               {
+                   xtype: 'proxmoxNodeServiceView',
+                   title: gettext('System'),
+                   iconCls: 'fa fa-cogs',
                    itemId: 'services',
-                   xtype: 'pveNodeServiceView',
+                   expandedOnInit: true,
+                   restartCommand: 'reload', // avoid disruptions
+                   startOnlyServices: {
+                       'pveproxy': true,
+                       'pvedaemon': true,
+                       'pve-cluster': true,
+                   },
+                   nodename: nodename,
+                   onlineHelp: 'pve_service_daemons',
                },
                {
+                   xtype: 'proxmoxNodeNetworkView',
                    title: gettext('Network'),
+                   iconCls: 'fa fa-exchange',
                    itemId: 'network',
-                   xtype: 'pveNodeNetworkView'
+                   showApplyBtn: true,
+                   groups: ['services'],
+                   nodename: nodename,
+                   onlineHelp: 'sysadmin_network_configuration',
+               },
+               {
+                   xtype: 'pveCertificatesView',
+                   title: gettext('Certificates'),
+                   iconCls: 'fa fa-certificate',
+                   itemId: 'certificates',
+                   groups: ['services'],
+                   nodename: nodename,
                },
                {
+                   xtype: 'proxmoxNodeDNSView',
                    title: gettext('DNS'),
+                   iconCls: 'fa fa-globe',
+                   groups: ['services'],
                    itemId: 'dns',
-                   xtype: 'pveNodeDNSView'
+                   nodename: nodename,
+                   onlineHelp: 'sysadmin_network_configuration',
+               },
+               {
+                   xtype: 'proxmoxNodeHostsView',
+                   title: gettext('Hosts'),
+                   iconCls: 'fa fa-globe',
+                   groups: ['services'],
+                   itemId: 'hosts',
+                   nodename: nodename,
+                   onlineHelp: 'sysadmin_network_configuration',
                },
                {
+                   xtype: 'proxmoxNodeTimeView',
                    title: gettext('Time'),
                    itemId: 'time',
-                   xtype: 'pveNodeTimeView'
-               }
-           );
+                   groups: ['services'],
+                   nodename: nodename,
+                   iconCls: 'fa fa-clock-o',
+               });
        }
 
        if (caps.nodes['Sys.Syslog']) {
-           me.items.push(
-               {
-                   title: 'Syslog',
-                   itemId: 'syslog',
-                   xtype: 'pveLogView',
-                   url: "/api2/extjs/nodes/" + nodename + "/syslog"
-               }
-           );
-       }
+           me.items.push({
+               xtype: 'proxmoxJournalView',
+               title: 'Syslog',
+               iconCls: 'fa fa-list',
+               groups: ['services'],
+               disabled: !caps.nodes['Sys.Syslog'],
+               itemId: 'syslog',
+               url: "/api2/extjs/nodes/" + nodename + "/journal",
+           });
 
-       me.items.push(
-           {
-               title: gettext('Task History'),
-               itemId: 'tasks',
-               xtype: 'pveNodeTasks'
+           if (caps.nodes['Sys.Modify']) {
+               me.items.push({
+                   xtype: 'proxmoxNodeAPT',
+                   title: gettext('Updates'),
+                   iconCls: 'fa fa-refresh',
+                   expandedOnInit: true,
+                   disabled: !caps.nodes['Sys.Console'],
+                   // do we want to link to system updates instead?
+                   itemId: 'apt',
+                   upgradeBtn: {
+                       xtype: 'pveConsoleButton',
+                       disabled: Proxmox.UserName !== 'root@pam',
+                       text: gettext('Upgrade'),
+                       consoleType: 'upgrade',
+                       nodename: nodename,
+                   },
+                   nodename: nodename,
+               });
+
+               me.items.push({
+                   xtype: 'proxmoxNodeAPTRepositories',
+                   title: gettext('Repositories'),
+                   iconCls: 'fa fa-files-o',
+                   itemId: 'aptrepositories',
+                   nodename: nodename,
+                   groups: ['apt'],
+               });
            }
-       );
+       }
 
-       if (caps.nodes['Sys.Console']) {
+       if (caps.nodes['Sys.Audit']) {
            me.items.push(
                {
-                   xtype: 'pveFirewallPanel',
+                   xtype: 'pveFirewallRules',
+                   iconCls: 'fa fa-shield',
                    title: gettext('Firewall'),
-                   base_url: '/nodes/' + nodename + '/firewall',
+                   allow_iface: true,
+                   base_url: '/nodes/' + nodename + '/firewall/rules',
+                   list_refs_url: '/cluster/firewall/refs',
+                   itemId: 'firewall',
+               },
+               {
+                   xtype: 'pveFirewallOptions',
+                   title: gettext('Options'),
+                   iconCls: 'fa fa-gear',
+                   onlineHelp: 'pve_firewall_host_specific_configuration',
+                   groups: ['firewall'],
+                   base_url: '/nodes/' + nodename + '/firewall/options',
                    fwtype: 'node',
-                   phstateid: me.hstateid,
-                   itemId: 'firewall'
+                   itemId: 'firewall-options',
+               });
+       }
+
+
+       if (caps.nodes['Sys.Audit']) {
+           me.items.push(
+               {
+                   xtype: 'pmxDiskList',
+                   title: gettext('Disks'),
+                   itemId: 'storage',
+                   expandedOnInit: true,
+                   iconCls: 'fa fa-hdd-o',
+                   nodename: nodename,
+                   includePartitions: true,
+                   supportsWipeDisk: true,
                },
                {
-                   title: gettext('Updates'),
-                   itemId: 'apt',
-                   xtype: 'pveNodeAPT',
-                   nodename: nodename
+                   xtype: 'pveLVMList',
+                   title: 'LVM',
+                   itemId: 'lvm',
+                   onlineHelp: 'chapter_lvm',
+                   iconCls: 'fa fa-square',
+                   groups: ['storage'],
                },
                {
-                   title: gettext('Console'),
-                   itemId: 'console',
-                   xtype: 'pveNoVncConsole',
-                   consoleType: 'shell',
-                   nodename: nodename
+                   xtype: 'pveLVMThinList',
+                   title: 'LVM-Thin',
+                   itemId: 'lvmthin',
+                   onlineHelp: 'chapter_lvm',
+                   iconCls: 'fa fa-square-o',
+                   groups: ['storage'],
+               },
+               {
+                   xtype: 'pveDirectoryList',
+                   title: Proxmox.Utils.directoryText,
+                   itemId: 'directory',
+                   onlineHelp: 'chapter_storage',
+                   iconCls: 'fa fa-folder',
+                   groups: ['storage'],
+               },
+               {
+                   title: 'ZFS',
+                   itemId: 'zfs',
+                   onlineHelp: 'chapter_zfs',
+                   iconCls: 'fa fa-th-large',
+                   groups: ['storage'],
+                   xtype: 'pveZFSList',
                },
                {
+                   xtype: 'pveNodeCephStatus',
                    title: 'Ceph',
                    itemId: 'ceph',
-                   xtype: 'pveNodeCeph',
-                   phstateid: me.hstateid,
-                   nodename: nodename
-               }
+                   iconCls: 'fa fa-ceph',
+               },
+               {
+                   xtype: 'pveNodeCephConfigCrush',
+                   title: gettext('Configuration'),
+                   iconCls: 'fa fa-gear',
+                   groups: ['ceph'],
+                   itemId: 'ceph-config',
+               },
+               {
+                   xtype: 'pveNodeCephMonMgr',
+                   title: gettext('Monitor'),
+                   iconCls: 'fa fa-tv',
+                   groups: ['ceph'],
+                   itemId: 'ceph-monlist',
+               },
+               {
+                   xtype: 'pveNodeCephOsdTree',
+                   title: 'OSD',
+                   iconCls: 'fa fa-hdd-o',
+                   groups: ['ceph'],
+                   itemId: 'ceph-osdtree',
+               },
+               {
+                   xtype: 'pveNodeCephFSPanel',
+                   title: 'CephFS',
+                   iconCls: 'fa fa-folder',
+                   groups: ['ceph'],
+                   nodename: nodename,
+                   itemId: 'ceph-cephfspanel',
+               },
+               {
+                   xtype: 'pveNodeCephPoolList',
+                   title: 'Pools',
+                   iconCls: 'fa fa-sitemap',
+                   groups: ['ceph'],
+                   itemId: 'ceph-pools',
+               },
+               {
+                   xtype: 'pveReplicaView',
+                   iconCls: 'fa fa-retweet',
+                   title: gettext('Replication'),
+                   itemId: 'replication',
+               },
            );
        }
 
+       if (caps.nodes['Sys.Syslog']) {
+           me.items.push(
+               {
+                   xtype: 'proxmoxLogView',
+                   title: gettext('Log'),
+                   iconCls: 'fa fa-list',
+                   groups: ['firewall'],
+                   onlineHelp: 'chapter_pve_firewall',
+                   url: '/api2/extjs/nodes/' + nodename + '/firewall/log',
+                   itemId: 'firewall-fwlog',
+               },
+               {
+                   xtype: 'cephLogView',
+                   title: gettext('Log'),
+                   itemId: 'ceph-log',
+                   iconCls: 'fa fa-list',
+                   groups: ['ceph'],
+                   onlineHelp: 'chapter_pveceph',
+                   url: "/api2/extjs/nodes/" + nodename + "/ceph/log",
+                   nodename: nodename,
+               });
+       }
+
        me.items.push(
+           {
+               title: gettext('Task History'),
+               iconCls: 'fa fa-list',
+               itemId: 'tasks',
+               nodename: nodename,
+               xtype: 'proxmoxNodeTasks',
+               extraFilter: [
+                   {
+                       xtype: 'pveGuestIDSelector',
+                       fieldLabel: gettext('VMID'),
+                       allowBlank: true,
+                       name: 'vmid',
+                   },
+               ],
+           },
            {
                title: gettext('Subscription'),
+               iconCls: 'fa fa-support',
                itemId: 'support',
                xtype: 'pveNodeSubscription',
-               nodename: nodename
-           }
+               nodename: nodename,
+           },
        );
 
        me.callParent();
 
-       me.statusStore.on('load', function(s, records, success) {
-           var uptimerec = s.data.get('uptime');
-           var powermgmt = uptimerec ? uptimerec.data.value : false;
-           if (!caps.nodes['Sys.PowerMgmt']) {
-               powermgmt = false;
-           }
+       me.mon(me.statusStore, 'load', function(store, records, success) {
+           let uptimerec = store.data.get('uptime');
+           let powermgmt = caps.nodes['Sys.PowerMgmt'] && uptimerec && uptimerec.data.value;
+
            restartBtn.setDisabled(!powermgmt);
            shutdownBtn.setDisabled(!powermgmt);
            shellBtn.setDisabled(!powermgmt);
@@ -235,5 +440,5 @@ Ext.define('PVE.node.Config', {
        me.on('destroy', function() {
            me.statusStore.stopUpdate();
        });
-    }
+    },
 });