diff --git a/proxmox/admin_scripts/affinity_maintenance.sh b/proxmox/admin_scripts/affinity_maintenance.sh new file mode 100755 index 0000000..227e807 --- /dev/null +++ b/proxmox/admin_scripts/affinity_maintenance.sh @@ -0,0 +1,51 @@ +#!/bin/bash +set -euo pipefail + +function usage() { + echo "USAGE: $0 1 -- disable all resource affinity rules" + echo "USAGE: $0 0 -- (default) attempt to re-enable all rules (including previously not enabled" + exit 64 +} + +if ! which jq >> /dev/null; then + echo "jq not found" + exit 1 +fi + +if [[ "$#" -ne 1 ]]; then + echo "ERROR: expected exactly one argument" + usage +fi + +maintenance=0 +case "$1" in + 0) + true + ;; + 1) + maintenance=1 + ;; + *) + usage + ;; +esac + +export rules="$(mktemp)" +function cleanup { + rm "$rules" +} +trap cleanup EXIT + +pvesh get /cluster/ha/rules --output-format json | jq '[ .[] | select(.affinity == "negative") | select(.type == "resource-affinity") ]' > "$rules" + +if [[ "$maintenance" == 1 ]]; then + cat "$rules" | jq -r '.[] | select(.disable == 1) | .comment' | sed 's/^/already disabled rule/g' + + cat "$rules" | jq -r '.[].rule' | while read -r rule; do + pvesh set "/cluster/ha/rules/${rule}" --type resource-affinity --disable 1 + done +else + cat "$rules" | jq -r '.[].rule' | while read -r rule; do + pvesh set "/cluster/ha/rules/${rule}" --type resource-affinity --delete disable || true + done +fi diff --git a/proxmox/admin_scripts/bashrc b/proxmox/admin_scripts/bashrc index 22a85bb..38cd0a6 100644 --- a/proxmox/admin_scripts/bashrc +++ b/proxmox/admin_scripts/bashrc @@ -71,9 +71,21 @@ function off { _off "$HOSTNAME" fi + roff + updl } +function roff { + /root/admin_scripts/affinity_maintenance.sh 1 + echo 'resource affinities: disabled' +} + +function ron { + /root/admin_scripts/affinity_maintenance.sh 0 + echo 'resource affinities: enabled' +} + function _on { ha-manager crm-command node-maintenance disable "$1" && \ echo "$1": normal mode @@ -87,9 +99,11 @@ function on { else _on "$HOSTNAME" fi + + echo 're-enable resource affinities: ron' } -alias h="echo 'avail cmds: off on | upg upgr | updl localprogress'" +alias h="echo 'avail cmds: off on roff ron | upg upgr | updl localprogress'" function localprogress () { watch ls -lh "/var/lib/vz/images/$1"