set -euo pipefail set -x # optional: keep for debugging # ------------------------------------------------------------------ # Determine the directory that contains this script (handles symlinks) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # Load the .env file that lives beside the script set -a # automatically export assignments source "${SCRIPT_DIR}/.env" set +a # ------------------------------------------------------------------ echo "ADDR = ${ADDR}" echo "USERNAME = ${USERNAME}" echo "PASSWORD = ${PASSWORD}" # ---- login ---- login=$(curl -s -k -d "username=${USERNAME}&password=${PASSWORD}" \ "https://${ADDR}:8006/api2/json/access/ticket") echo "=== LOGIN RESPONSE ===" echo "$login" echo "======================" # Extract ticket & CSRF TICKET=$(echo "$login" | grep -o '"ticket":"[^"]*' | cut -d'"' -f4) CSRF=$(echo "$login" | grep -o '"CSRFPreventionToken":"[^"]*' | cut -d'"' -f4) echo "Ticket: $TICKET" echo "CSRF : $CSRF" echo "-------------------" if [[ -n "$TICKET" && -n "$CSRF" ]]; then vmlist=$(curl -s -k -b "PVEAuthCookie=${TICKET}" \ -H "CSRFPreventionToken: ${CSRF}" \ "https://${ADDR}:8006/api2/json/cluster/resources?type=vm") echo "=== VM LIST RAW ===" echo "$vmlist" echo "====================" if command -v jq >/dev/null 2>&1; then echo "=== VM LIST FORMATTED ===" echo "$vmlist" | jq . fi else echo "Login failed – no ticket/CSRF token." fi