* [pve-devel] [PATCH SERIES docs/ha-manager/manager v2] close #6144: add ui button + api for node maintenance mode
@ 2025-09-20 18:20 Thomas Skinner
2025-09-20 18:20 ` [pve-devel] [PATCH ha-manager v2 1/1] add additional api field for lrm_mode in status check Thomas Skinner
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Thomas Skinner @ 2025-09-20 18:20 UTC (permalink / raw)
To: pve-devel; +Cc: Thomas Skinner
Continued work on node maintenance mode button in UI.
Changes since V1:
- Code refactoring/reformatting
- Clarity in docs
- Remove redundant GET API for maintenance status
- Change button UI to dropdown menu with icons
docs:
Thomas Skinner (1):
add docs for maintenance mode buttons in UI
ha-manager.adoc | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
ha-manager:
Thomas Skinner (1):
add additional api field for lrm_mode in status check
src/PVE/API2/HA/Status.pm | 7 +++++++
1 file changed, 7 insertions(+)
manager:
Thomas Skinner (2):
add api setter for node maintenance mode
add UI for node maintenance enable/disable
PVE/API2/Nodes.pm | 38 +++++++++++++++
www/manager6/ha/StatusView.js | 92 +++++++++++++++++++++++++++++++++++
2 files changed, 130 insertions(+)
--
2.47.2
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* [pve-devel] [PATCH ha-manager v2 1/1] add additional api field for lrm_mode in status check
2025-09-20 18:20 [pve-devel] [PATCH SERIES docs/ha-manager/manager v2] close #6144: add ui button + api for node maintenance mode Thomas Skinner
@ 2025-09-20 18:20 ` Thomas Skinner
2025-09-20 18:20 ` [pve-devel] [PATCH manager v2 1/2] add api setter for node maintenance mode Thomas Skinner
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Thomas Skinner @ 2025-09-20 18:20 UTC (permalink / raw)
To: pve-devel; +Cc: Thomas Skinner
Signed-off-by: Thomas Skinner <thomas@atskinner.net>
---
src/PVE/API2/HA/Status.pm | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/PVE/API2/HA/Status.pm b/src/PVE/API2/HA/Status.pm
index 6e13c2c..f168637 100644
--- a/src/PVE/API2/HA/Status.pm
+++ b/src/PVE/API2/HA/Status.pm
@@ -104,6 +104,11 @@ __PACKAGE__->register_method({
type => "integer",
optional => 1,
},
+ lrm_mode => {
+ description => "For type 'lrm'. Mode as reported by the LRM.",
+ type => "string",
+ optional => 1,
+ },
crm_state => {
description => "For type 'service'. Service state as seen by the CRM.",
type => "string",
@@ -216,6 +221,7 @@ __PACKAGE__->register_method({
type => 'lrm',
node => $node,
status => "$node (unable to read lrm status)",
+ lrm_mode => 'unknown',
};
} else {
my $status_str = &$timestamp_to_status($ctime, $lrm_status->{timestamp});
@@ -246,6 +252,7 @@ __PACKAGE__->register_method({
node => $node,
status => $status_text,
timestamp => $lrm_status->{timestamp},
+ lrm_mode => $lrm_mode // "unknown",
};
}
}
--
2.47.2
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* [pve-devel] [PATCH manager v2 1/2] add api setter for node maintenance mode
2025-09-20 18:20 [pve-devel] [PATCH SERIES docs/ha-manager/manager v2] close #6144: add ui button + api for node maintenance mode Thomas Skinner
2025-09-20 18:20 ` [pve-devel] [PATCH ha-manager v2 1/1] add additional api field for lrm_mode in status check Thomas Skinner
@ 2025-09-20 18:20 ` Thomas Skinner
2025-09-20 18:20 ` [pve-devel] [PATCH docs v2 1/1] add docs for maintenance mode buttons in UI Thomas Skinner
2025-09-20 18:20 ` [pve-devel] [PATCH manager v2 2/2] add UI for node maintenance enable/disable Thomas Skinner
3 siblings, 0 replies; 5+ messages in thread
From: Thomas Skinner @ 2025-09-20 18:20 UTC (permalink / raw)
To: pve-devel; +Cc: Thomas Skinner
Signed-off-by: Thomas Skinner <thomas@atskinner.net>
---
PVE/API2/Nodes.pm | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/PVE/API2/Nodes.pm b/PVE/API2/Nodes.pm
index 48898045..3f31ac6c 100644
--- a/PVE/API2/Nodes.pm
+++ b/PVE/API2/Nodes.pm
@@ -275,6 +275,7 @@ __PACKAGE__->register_method({
{ name => 'hosts' },
{ name => 'journal' },
{ name => 'lxc' },
+ { name => 'maintenance' },
{ name => 'migrateall' },
{ name => 'netstat' },
{ name => 'network' },
@@ -2663,6 +2664,43 @@ __PACKAGE__->register_method({
},
});
+__PACKAGE__->register_method({
+ name => 'maintenance_set',
+ protected => 1,
+ path => 'maintenance',
+ method => 'PUT',
+ description =>
+ "Set the maintenance parameters for the node. Currently only supports HA maintenance mode for the LRM on a node.",
+ permissions => {
+ check => ['perm', '/', ['Sys.Console']],
+ },
+ parameters => {
+ additionalProperties => 0,
+ properties => {
+ node => get_standard_option('pve-node'),
+ 'maintenance-mode' => {
+ description => "Enables or disabled maintenance mode for the HA LRM.",
+ type => 'string',
+ enum => ['enable', 'disable'],
+ },
+ },
+ },
+ returns => { type => 'null' },
+ code => sub {
+ my ($param) = @_;
+
+ PVE::Cluster::check_node_exists($param->{node});
+
+ my $cmd =
+ $param->{'maintenance-mode'} eq 'enable'
+ ? 'enable-node-maintenance'
+ : 'disable-node-maintenance';
+ PVE::HA::Config::queue_crm_commands("$cmd $param->{node}");
+
+ return undef;
+ },
+});
+
# bash completion helper
sub complete_templet_repo {
--
2.47.2
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* [pve-devel] [PATCH docs v2 1/1] add docs for maintenance mode buttons in UI
2025-09-20 18:20 [pve-devel] [PATCH SERIES docs/ha-manager/manager v2] close #6144: add ui button + api for node maintenance mode Thomas Skinner
2025-09-20 18:20 ` [pve-devel] [PATCH ha-manager v2 1/1] add additional api field for lrm_mode in status check Thomas Skinner
2025-09-20 18:20 ` [pve-devel] [PATCH manager v2 1/2] add api setter for node maintenance mode Thomas Skinner
@ 2025-09-20 18:20 ` Thomas Skinner
2025-09-20 18:20 ` [pve-devel] [PATCH manager v2 2/2] add UI for node maintenance enable/disable Thomas Skinner
3 siblings, 0 replies; 5+ messages in thread
From: Thomas Skinner @ 2025-09-20 18:20 UTC (permalink / raw)
To: pve-devel; +Cc: Thomas Skinner
Signed-off-by: Thomas Skinner <thomas@atskinner.net>
---
ha-manager.adoc | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/ha-manager.adoc b/ha-manager.adoc
index ea477cc..2b7c6a5 100644
--- a/ha-manager.adoc
+++ b/ha-manager.adoc
@@ -1112,10 +1112,19 @@ During each migration, the original node will be recorded in the HA managers'
state, so that the service can be moved back again automatically once the
maintenance mode is disabled and the node is back online.
-Currently you can enabled or disable the maintenance mode using the ha-manager
-CLI tool.
+Maintenance mode can be enabled or disabled in the HA status panel in
+the {pve} web UI or by using the ha-manager CLI tool.
.Enabling maintenance mode for a node
+
+_Using the web UI_
+
+Navigate to the Datacenter view, then select HA from the menu to show the HA
+status panel. Select the lrm node that you want to enable maintenance mode for,
+then click the Maintenance Mode button from the toolbar and select Enable.
+
+_Using the CLI_
+
----
# ha-manager crm-command node-maintenance enable NODENAME
----
@@ -1142,6 +1151,15 @@ but only if it is either manually deactivated using the `ha-manager` CLI or if
the manager-status is manually cleared.
.Disabling maintenance mode for a node
+
+_Using the web UI_
+
+Navigate to the Datacenter view, then select HA from the menu to show the HA
+status panel. Select the lrm node that you want to disable maintenance mode for,
+then click the Maintenance Mode button on the toolbar and select Disable.
+
+_Using the CLI_
+
----
# ha-manager crm-command node-maintenance disable NODENAME
----
--
2.47.2
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
^ permalink raw reply [flat|nested] 5+ messages in thread
* [pve-devel] [PATCH manager v2 2/2] add UI for node maintenance enable/disable
2025-09-20 18:20 [pve-devel] [PATCH SERIES docs/ha-manager/manager v2] close #6144: add ui button + api for node maintenance mode Thomas Skinner
` (2 preceding siblings ...)
2025-09-20 18:20 ` [pve-devel] [PATCH docs v2 1/1] add docs for maintenance mode buttons in UI Thomas Skinner
@ 2025-09-20 18:20 ` Thomas Skinner
3 siblings, 0 replies; 5+ messages in thread
From: Thomas Skinner @ 2025-09-20 18:20 UTC (permalink / raw)
To: pve-devel; +Cc: Thomas Skinner
Signed-off-by: Thomas Skinner <thomas@atskinner.net>
---
www/manager6/ha/StatusView.js | 92 +++++++++++++++++++++++++++++++++++
1 file changed, 92 insertions(+)
diff --git a/www/manager6/ha/StatusView.js b/www/manager6/ha/StatusView.js
index 50ad8e84..4163f637 100644
--- a/www/manager6/ha/StatusView.js
+++ b/www/manager6/ha/StatusView.js
@@ -41,12 +41,75 @@ Ext.define(
},
});
+ let sm = Ext.create('Ext.selection.RowModel', {});
+
+ let caps = Ext.state.Manager.get('GuiCap');
+
+ let setNodeMaintenance = function (setEnabled) {
+ let rec = sm.getSelection()[0];
+ if (!rec || rec.data.type !== 'lrm') {
+ return;
+ }
+ let nodeName = rec.get('node');
+ let enableText = setEnabled ? 'Enable' : 'Disable';
+ 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: { 'maintenance-mode': setEnabled ? 'enable' : 'disable' },
+ url: '/nodes/' + nodeName + '/maintenance',
+ method: 'PUT',
+ waitMsgTarget: me,
+ failure: function (response, opts) {
+ Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+ },
+ });
+ }
+ });
+ };
+
+ let setMaintenanceButtonStates = function (isLRM, isMaintenance) {
+ me.down('#nodeMaintenanceMenu').setDisabled(!(caps.nodes['Sys.Console'] && isLRM));
+ me.down('#nodeMaintenanceEnableBtn').setDisabled(isMaintenance);
+ me.down('#nodeMaintenanceDisableBtn').setDisabled(!isMaintenance);
+ };
+
Ext.apply(me, {
store: store,
+ selModel: sm,
stateful: false,
viewConfig: {
trackOver: false,
},
+ tbar: [
+ {
+ text: gettext('Maintenance Mode'),
+ itemId: 'nodeMaintenanceMenu',
+ disabled: true,
+ menu: new Ext.menu.Menu({
+ items: [
+ {
+ text: gettext('Enable'),
+ itemId: 'nodeMaintenanceEnableBtn',
+ iconCls: 'fa fa-wrench',
+ disabled: true,
+ handler: () => setNodeMaintenance(true),
+ },
+ {
+ text: gettext('Disable'),
+ itemId: 'nodeMaintenanceDisableBtn',
+ iconCls: 'fa fa-check',
+ disabled: true,
+ handler: () => setNodeMaintenance(false),
+ },
+ ],
+ }),
+ },
+ ],
columns: [
{
header: gettext('Type'),
@@ -60,12 +123,40 @@ Ext.define(
dataIndex: 'status',
},
],
+ listeners: {
+ beforeselect: function (tree, record, index, eopts) {
+ if (record) {
+ let isLRM = record.data.type === 'lrm';
+ let isMaintenance = record.data.lrm_mode === 'maintenance';
+ setMaintenanceButtonStates(isLRM, isMaintenance);
+ }
+ },
+ },
});
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 isMaintenance = rec.data.lrm_mode === 'maintenance';
+ setMaintenanceButtonStates(true, isMaintenance);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ });
},
},
function () {
@@ -88,6 +179,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
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-09-20 18:28 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-09-20 18:20 [pve-devel] [PATCH SERIES docs/ha-manager/manager v2] close #6144: add ui button + api for node maintenance mode Thomas Skinner
2025-09-20 18:20 ` [pve-devel] [PATCH ha-manager v2 1/1] add additional api field for lrm_mode in status check Thomas Skinner
2025-09-20 18:20 ` [pve-devel] [PATCH manager v2 1/2] add api setter for node maintenance mode Thomas Skinner
2025-09-20 18:20 ` [pve-devel] [PATCH docs v2 1/1] add docs for maintenance mode buttons in UI Thomas Skinner
2025-09-20 18:20 ` [pve-devel] [PATCH manager v2 2/2] add UI for node maintenance enable/disable Thomas Skinner
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.