Files
ansible/proxmox/admin_scripts/affinity_maintenance.sh

52 lines
1.1 KiB
Bash
Executable File

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