Skip to content

Instantly share code, notes, and snippets.

@vdupain
Created February 15, 2022 08:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vdupain/de75264d7e69636146c65af5b76c5cf1 to your computer and use it in GitHub Desktop.
Save vdupain/de75264d7e69636146c65af5b76c5cf1 to your computer and use it in GitHub Desktop.
#!/bin/bash
# proxvm
# Output in specifed format (default csv) all virtual machines on proxmox 4+
SERVER=srv
USERNAME=username
PASSWORD=$(<$HOME/.pve-pass-file)
FORMAT=csv
#echo Connecting to $SERVER:8006 as $USERNAME:$PASSWORD
curl -s -k -d "username=$USERNAME" --data-urlencode "password=$PASSWORD" https://$SERVER:8006/api2/json/access/ticket | jq --raw-output '.data.ticket' | sed 's/^/PVEAuthCookie=/' > /tmp/cookie
if [ "${PIPESTATUS[0]}" != "0" ]; then
echo Auth failed
exit 1
fi
function csv() {
echo $VMID, $NODE, $1, $NAME, $HWADDR, $IP
}
function start_csv() {
echo vmid,node,type,name,mac,ip
}
function end_csv() {
echo -n
}
function json() {
if [ "$2" != "0" ]; then
echo ","
fi
echo "{"
echo "\"vmid\": \"$VMID\","
echo "\"node\": \"$NODE\","
echo "\"type\": \"$1\","
echo "\"name\": \"$NAME\","
echo "\"mac\": \"$HWADDR\","
echo "\"ip\": \"$IP\""
echo -n "}"
}
function start_json() {
echo "["
}
function end_json() {
echo "]"
}
start_$FORMAT
POS=0
NODES=`curl -s -k --cookie "$(</tmp/cookie)" https://$SERVER:8006/api2/json/nodes | jq -r '.data[].node' | sort`
for NODE in `echo $NODES`; do
curl -s -k --cookie "$(</tmp/cookie)" https://$SERVER:8006/api2/json/nodes/$NODE/qemu > /tmp/proxvm-qemu.json
for VMID in `cat /tmp/proxvm-qemu.json | jq -r '.data[].vmid' | sort`; do
curl -s -k --cookie "$(</tmp/cookie)" https://$SERVER:8006/api2/json/nodes/$NODE/qemu/$VMID/config > /tmp/proxvm-$VMID.json
JSON=`cat /tmp/proxvm-qemu.json | jq -r ".data[] | select(.vmid | tonumber | contains($VMID))"`
NAME=`echo $JSON | jq -r .name`
NET=`cat /tmp/proxvm-$VMID.json | jq -r .data.net0`
HWADDR=`echo $NET | sed -re "s/[a-zA-Z0-9]+=([a-zA-Z0-9:]+),.*/\1/g"`
IPCFG=`cat /tmp/proxvm-$VMID.json | jq -r .data.ipconfig0`
IP=`echo $IPCFG | sed -re "s/ip=([0-9.]+)\/24,.*/\1/g"`
$FORMAT qemu $POS
POS=`expr $POS + 1`
done
done
end_$FORMAT
rm /tmp/proxvm-qemu.json /tmp/cookie
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment