59 lines
2.1 KiB
Bash
59 lines
2.1 KiB
Bash
#! /bin/bash
|
|
|
|
#set -e
|
|
|
|
NETBOX_URL=""
|
|
NETBOX_AUTH_TOKEN=""
|
|
MAILTO=""
|
|
SUBJECT="PVE and NetBox mismatch"
|
|
|
|
curl -s -X GET "$NETBOX_URL/api/virtualization/virtual-machines/" \
|
|
-H "Authorization: Token $NETBOX_AUTH_TOKEN" \
|
|
-H 'Accept: application/json' | \
|
|
jq -r '
|
|
[
|
|
.results[] |
|
|
{
|
|
VMID: .custom_fields.VMID,
|
|
status: (.status.value |
|
|
gsub("active"; "running") |
|
|
gsub("offline"; "stopped")),
|
|
name: .name
|
|
}
|
|
] |
|
|
sort_by(.VMID) |
|
|
map([.VMID, .status, .name]) |
|
|
(["VMID", "Status", "Name"]) as $header |
|
|
$header, .[] |
|
|
@csv' | \
|
|
tr -d '"' > /tmp/netbox-status.csv
|
|
|
|
/usr/sbin/pct list | awk 'NR==1 {print "VMID,Status,Name"} NR>1 {print $1","$2","$3}' > /tmp/pve-status.csv
|
|
/usr/sbin/qm list | awk 'NR>1 {print $1","$3","$2}' OFS="," >> /tmp/pve-status.csv
|
|
|
|
diff -C 0 /tmp/pve-status.csv /tmp/netbox-status.csv > /tmp/diff_result.txt
|
|
EXIT_STATUS=$?
|
|
|
|
if [ $EXIT_STATUS -eq 1 ]; then
|
|
for host in $(diff -C 0 /tmp/pve-status.csv /tmp/netbox-status.csv | grep '^- ' | awk -F ',' '{sub(/^- /, ""); print $1; }'); do
|
|
if [[ ${host:0:1} -eq 1 ]]; then
|
|
echo "Resources for $host:" >> /tmp/new-host-resources.txt
|
|
/usr/sbin/pct config $host | grep -E '^hostname|^cores|^memory|^rootfs|^net' >> /tmp/new-host-resources.txt
|
|
echo >> /tmp/new-host-resources.txt
|
|
elif [[ ${host:0:1} -eq 2 ]]; then
|
|
echo "Resources for $host:" >> /tmp/new-host-resources.txt
|
|
/usr/sbin/qm config $host | grep -E '^name|^cores|^memory|^scsi[0-9]|^net' >> /tmp/new-host-resources.txt
|
|
echo >> /tmp/new-host-resources.txt
|
|
fi
|
|
done
|
|
|
|
if [ -f /tmp/new-host-resources.txt ]; then
|
|
awk 'FNR==1 && NR!=1 {print ""; print "Here is a list of hosts missing from NetBox together with their information:"}; {print}' /tmp/diff_result.txt /tmp/new-host-resources.txt > /tmp/mail.txt
|
|
else
|
|
cp /tmp/diff_result.txt /tmp/mail.txt
|
|
fi
|
|
mail -s "$SUBJECT" "$MAILTO" < /tmp/mail.txt
|
|
fi
|
|
|
|
rm -f /tmp/pve-status.csv /tmp/netbox-status.csv /tmp/diff_result.txt /tmp/new-host-resources.txt /tmp/mail.txt
|