Signed-off-by: Thomas Skinner <tho...@atskinner.net> --- www/manager6/ha/StatusView.js | 85 +++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+)
diff --git a/www/manager6/ha/StatusView.js b/www/manager6/ha/StatusView.js index 50ad8e84..79e12df5 100644 --- a/www/manager6/ha/StatusView.js +++ b/www/manager6/ha/StatusView.js @@ -41,12 +41,58 @@ Ext.define( }, }); + let sm = Ext.create('Ext.selection.RowModel', {}); + + let caps = Ext.state.Manager.get('GuiCap'); + + var node_maintenance_disable = function (disable) { + let rec = sm.getSelection()[0]; + if (!rec || rec.data.type !== "lrm") { + return; + } + let nodename = rec.get('node'); + let enableText = disable ? 'Disable' : 'Enable'; + let msg = Ext.String.format(gettext("{0} maintenance mode on node '{1}'?"), enableText, nodename); + Ext.Msg.confirm(gettext('Confirm'), msg, (btn) => { + if (btn === 'yes') { + Proxmox.Utils.API2Request({ + params: { disable: disable ? 1 : 0 }, + url: '/cluster/ha/nodes/' + nodename + '/maintenance', + method: 'POST', + waitMsgTarget: me, + failure: function (response, opts) { + Ext.Msg.alert(gettext('Error'), response.htmlStatus); + }, + }); + } + }); + }; + Ext.apply(me, { store: store, + selModel: sm, stateful: false, viewConfig: { trackOver: false, }, + tbar: [ + { + text: gettext('Enable Maintenance Mode'), + itemId: 'enableMaintBtn', + disabled: true, + handler: function () { + node_maintenance_disable(false); + }, + }, + { + text: gettext('Disable Maintenance Mode'), + itemId: 'disableMaintBtn', + disabled: true, + handler: function () { + node_maintenance_disable(true); + }, + }, + ], columns: [ { header: gettext('Type'), @@ -60,12 +106,50 @@ Ext.define( dataIndex: 'status', }, ], + listeners: { + beforeselect: function (tree, record, index, eopts) { + if (!caps.nodes['Sys.Console']) { + return; + } + let enableMaintBtnDisable = true; + let disableMaintBtnDisable = true; + if (record && record.data.type === "lrm") { + if (record.data.lrm_mode && record.data.lrm_mode === 'maintenance') { + disableMaintBtnDisable = false; + } else { + enableMaintBtnDisable = false; + } + } + me.down('#enableMaintBtn').setDisabled(enableMaintBtnDisable); + me.down('#disableMaintBtn').setDisabled(disableMaintBtnDisable); + }, + } }); me.callParent(); me.on('activate', me.rstore.startUpdate); me.on('destroy', me.rstore.stopUpdate); + + me.mon(me.rstore, 'load', function (curstore, results) { + let rec = sm.getSelection()[0]; + if (!rec || rec.data.type !== "lrm") { + return; + } + for (const { data } of results) { + switch (data.type) { + case 'lrm': + if (rec.data.node === data.node) { + let inMaint = rec.data.lrm_mode === 'maintenance'; + me.down('#enableMaintBtn').setDisabled(inMaint); + me.down('#disableMaintBtn').setDisabled(!inMaint); + } + break; + default: + break; + } + } + }); }, }, function () { @@ -88,6 +172,7 @@ Ext.define( 'type', 'crm_state', 'request_state', + 'lrm_mode', { name: 'vname', convert: function (value, record) { -- 2.47.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel