mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-05-03 08:32:40 +00:00
427 lines
9.9 KiB
JavaScript
427 lines
9.9 KiB
JavaScript
Ext.define('PVE.node.Config', {
|
|
extend: 'PVE.panel.Config',
|
|
alias: 'widget.PVE.node.Config',
|
|
|
|
onlineHelp: 'chapter_system_administration',
|
|
|
|
initComponent: function() {
|
|
var me = this;
|
|
|
|
var nodename = me.pveSelNode.data.node;
|
|
if (!nodename) {
|
|
throw "no node name specified";
|
|
}
|
|
|
|
var caps = Ext.state.Manager.get('GuiCap');
|
|
|
|
me.statusStore = Ext.create('Proxmox.data.ObjectStore', {
|
|
url: "/api2/json/nodes/" + nodename + "/status",
|
|
interval: 5000,
|
|
});
|
|
|
|
var node_command = function(cmd) {
|
|
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('Bulk Actions'),
|
|
iconCls: 'fa fa-fw fa-ellipsis-v',
|
|
disabled: !caps.nodes['Sys.PowerMgmt'],
|
|
menu: new Ext.menu.Menu({
|
|
items: [
|
|
{
|
|
text: gettext('Bulk Start'),
|
|
iconCls: 'fa fa-fw fa-play',
|
|
handler: function() {
|
|
var win = Ext.create('PVE.window.BulkAction', {
|
|
nodename: nodename,
|
|
title: gettext('Bulk Start'),
|
|
btnText: gettext('Start'),
|
|
action: 'startall',
|
|
});
|
|
win.show();
|
|
},
|
|
},
|
|
{
|
|
text: gettext('Bulk Stop'),
|
|
iconCls: 'fa fa-fw fa-stop',
|
|
handler: function() {
|
|
var win = Ext.create('PVE.window.BulkAction', {
|
|
nodename: nodename,
|
|
title: gettext('Bulk Stop'),
|
|
btnText: gettext('Stop'),
|
|
action: 'stopall',
|
|
});
|
|
win.show();
|
|
},
|
|
},
|
|
{
|
|
text: gettext('Bulk Migrate'),
|
|
iconCls: 'fa fa-fw fa-send-o',
|
|
handler: function() {
|
|
var win = Ext.create('PVE.window.BulkAction', {
|
|
nodename: nodename,
|
|
title: gettext('Bulk Migrate'),
|
|
btnText: gettext('Migrate'),
|
|
action: 'migrateall',
|
|
});
|
|
win.show();
|
|
},
|
|
},
|
|
],
|
|
}),
|
|
});
|
|
|
|
let restartBtn = Ext.create('Proxmox.button.Button', {
|
|
text: gettext('Reboot'),
|
|
disabled: !caps.nodes['Sys.PowerMgmt'],
|
|
dangerous: true,
|
|
confirmMsg: Ext.String.format(gettext("Reboot node '{0}'?"), nodename),
|
|
handler: function() {
|
|
node_command('reboot');
|
|
},
|
|
iconCls: 'fa fa-undo',
|
|
});
|
|
|
|
var shutdownBtn = Ext.create('Proxmox.button.Button', {
|
|
text: gettext('Shutdown'),
|
|
disabled: !caps.nodes['Sys.PowerMgmt'],
|
|
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,
|
|
});
|
|
|
|
me.items = [];
|
|
|
|
Ext.apply(me, {
|
|
title: gettext('Node') + " '" + nodename + "'",
|
|
hstateid: 'nodetab',
|
|
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: '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',
|
|
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',
|
|
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',
|
|
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',
|
|
groups: ['services'],
|
|
nodename: nodename,
|
|
iconCls: 'fa fa-clock-o',
|
|
});
|
|
}
|
|
|
|
if (caps.nodes['Sys.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",
|
|
});
|
|
|
|
if (caps.nodes['Sys.Modify']) {
|
|
me.items.push({
|
|
xtype: 'proxmoxNodeAPT',
|
|
title: gettext('Updates'),
|
|
iconCls: 'fa fa-refresh',
|
|
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,
|
|
});
|
|
}
|
|
}
|
|
|
|
if (caps.nodes['Sys.Audit']) {
|
|
me.items.push(
|
|
{
|
|
xtype: 'pveFirewallRules',
|
|
iconCls: 'fa fa-shield',
|
|
title: gettext('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',
|
|
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,
|
|
},
|
|
{
|
|
xtype: 'pveLVMList',
|
|
title: 'LVM',
|
|
itemId: 'lvm',
|
|
onlineHelp: 'chapter_lvm',
|
|
iconCls: 'fa fa-square',
|
|
groups: ['storage'],
|
|
},
|
|
{
|
|
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',
|
|
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',
|
|
},
|
|
{
|
|
title: gettext('Subscription'),
|
|
iconCls: 'fa fa-support',
|
|
itemId: 'support',
|
|
xtype: 'pveNodeSubscription',
|
|
nodename: nodename,
|
|
},
|
|
);
|
|
|
|
me.callParent();
|
|
|
|
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);
|
|
});
|
|
|
|
me.on('afterrender', function() {
|
|
me.statusStore.startUpdate();
|
|
});
|
|
|
|
me.on('destroy', function() {
|
|
me.statusStore.stopUpdate();
|
|
});
|
|
},
|
|
});
|