#!/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