Hi Damien,
As of v5.7.0, this is how it works:
1) Multiple UPSes / groups
You can attach actions either directly to individual UPS devices, or to a group.
- UPS-level actions are evaluated per UPS, independently.
- Group-level actions are evaluated across all members after a full poll cycle.
The important bit is: group thresholds are
not aggregated. There is no lowest/highest/average battery calculation across the group.
Instead, each group action evaluates each member UPS against that action’s own thresholds:
- redundant
- power-change logic treats the group as “on battery” only when all member UPSes are on battery
- threshold-based actions fire only when all member UPSes are on battery and below that action’s thresholds
- nonRedundant
- power-change logic treats the group as “on battery” when any member UPS is on battery
- threshold-based actions fire when any member UPS is on battery and below that action’s thresholds
So for your examples:
- If one UPS is on battery and the other is still on mains:
- direct UPS actions on that affected UPS can still trigger based on that UPS alone
- a redundant group action will not trigger yet
- a nonRedundant group action can trigger once that affected UPS crosses the configured threshold
- If both UPSes are on battery:
- redundant waits until both are below the group action threshold
- nonRedundant fires as soon as either one is below the group action threshold
So the behavior depends on where you attach the action:
- on the UPS = standalone/per-UPS logic
- on the group = group mode logic
For a dual-UPS redundant host, I would usually recommend:
- put alerting actions on the individual UPSes if you want
- put the actual Proxmox shutdown + host shutdown on the group in redundant mode
One extra safety behavior: destructive group actions (proxmox, shutdown) are suppressed if a required group member is unreachable, so it does not make a shutdown decision on partial data.
2) Proxmox clusters / HA
NUPST is still node-local, not a cluster-wide coordinator.
What it does:
- shuts down the VMs and LXCs on the local node
- waits for graceful shutdown
- force-stops remaining guests if configured
- then the host shutdown action can run after that
What changed for HA-managed guests:
- there is now an HA-aware mode: proxmoxHaPolicy: "haStop"
- in that mode, HA-managed guests are told to go to stopped through the Proxmox HA layer instead of only sending plain qm/pct shutdown
That is the correct path if you want HA-managed guests to stop cleanly without HA treating them as failed and trying to move/restart them elsewhere.
What it still does
not do:
- no cluster-wide shutdown orchestration
- no global HA disable
- no coordination between hosts beyond “each host handles itself”
So for a 2-node cluster, the intended setup is:
- run NUPST on both nodes
- use proxmoxHaPolicy: "haStop" on the Proxmox action
- place the Proxmox action before the host shutdown action
That way each node stops its own HA/non-HA guests properly, then shuts itself down, rather than trying to evacuate workloads during a power event.
If you think parts of this should be solved differently, feel free to start a discussion about how things should be and why. We want to make nupst better for everyone.
Regards,
Phil