first working release
This commit is contained in:
@@ -53,6 +53,12 @@ fi
|
||||
: "${PM_USER:?Missing PM_USER}"
|
||||
: "${PM_PASS:?Missing PM_PASS}"
|
||||
|
||||
# Sentri API configuration
|
||||
: "${SENTRI_URL:?Missing SENTRI_URL}"
|
||||
: "${SENTRI_TOKEN:?Missing SENTRI_TOKEN}"
|
||||
|
||||
SERVERS_JSON="[]"
|
||||
|
||||
# Authenticate
|
||||
AUTH_RESPONSE=$(curl -sk \
|
||||
--data-urlencode "username=${PM_USER}" \
|
||||
@@ -80,12 +86,18 @@ echo "Collecting VMs..."
|
||||
|
||||
VMS=$(api_get "/api2/json/cluster/resources?type=vm")
|
||||
|
||||
echo "$VMS" | jq -c '.data[]' | while read -r VM; do
|
||||
while read -r VM; do
|
||||
|
||||
VMID=$(echo "$VM" | jq -r '.vmid')
|
||||
NODE=$(echo "$VM" | jq -r '.node')
|
||||
NAME=$(echo "$VM" | jq -r '.name')
|
||||
STATUS=$(echo "$VM" | jq -r '.status')
|
||||
STATUS=$(echo "$VM" | jq -r '
|
||||
.status
|
||||
| if . == "running" then "Running"
|
||||
elif . == "stopped" then "Off"
|
||||
else "Running"
|
||||
end
|
||||
')
|
||||
CPU=$(echo "$VM" | jq -r '.maxcpu')
|
||||
MEMORY_MB=$(echo "$VM" | jq -r '.maxmem / 1024 / 1024 | floor')
|
||||
|
||||
@@ -188,7 +200,28 @@ echo "$VMS" | jq -c '.data[]' | while read -r VM; do
|
||||
|
||||
DISK_LOCATION=$(echo "$DISKCONF" | cut -d',' -f1)
|
||||
|
||||
SIZE=$(echo "$DISKCONF" | sed -n 's/.*size=\([^,]*\).*/\1/p')
|
||||
SIZE=$(echo "$DISKCONF" | sed -n 's/.*size=\([^,]*\).*/\1/p' \
|
||||
| awk '
|
||||
function ceil(x) { return (x == int(x)) ? x : int(x)+1 }
|
||||
|
||||
{
|
||||
if ($0 ~ /G$/) {
|
||||
gsub(/G/, "", $0)
|
||||
printf "%d", ceil($0)
|
||||
}
|
||||
else if ($0 ~ /M$/) {
|
||||
gsub(/M/, "", $0)
|
||||
printf "%d", ceil($0 / 1024)
|
||||
}
|
||||
else if ($0 ~ /T$/) {
|
||||
gsub(/T/, "", $0)
|
||||
printf "%d", ceil($0 * 1024)
|
||||
}
|
||||
else {
|
||||
printf "%d", $0
|
||||
}
|
||||
}
|
||||
')
|
||||
|
||||
DISKS_JSON=$(echo "$DISKS_JSON" | jq \
|
||||
--arg name "$DISKKEY" \
|
||||
@@ -212,26 +245,25 @@ echo "$VMS" | jq -c '.data[]' | while read -r VM; do
|
||||
)
|
||||
|
||||
# Build JSON
|
||||
SERVER_JSON=$(
|
||||
jq -n \
|
||||
--arg vmid "$MAC" \
|
||||
--arg vmhost "$NAME" \
|
||||
--arg power "$STATUS" \
|
||||
--arg hostname "$NAME" \
|
||||
--arg os "$OS" \
|
||||
--argjson cpu "$CPU" \
|
||||
--argjson memory "$MEMORY_MB" \
|
||||
--argjson snapshot "$SNAPSHOT_COUNT" \
|
||||
--arg description "$DESCRIPTION" \
|
||||
--argjson disks "$DISKS_JSON" \
|
||||
--argjson ipv4 "$(printf '%s\n' "${IPV4[@]}" | jq -R . | jq -s .)" \
|
||||
--argjson ipv6 "$(printf '%s\n' "${IPV6[@]}" | jq -R . | jq -s .)" \
|
||||
--argjson ipv4 "$(printf '%s\n' "${IPV4[@]:-}" | jq -R . | jq -s .)" \
|
||||
--argjson ipv6 "$(printf '%s\n' "${IPV6[@]:-}" | jq -R . | jq -s .)" \
|
||||
--arg backup "$BACKUP_ENABLED" '
|
||||
{
|
||||
"server_vm_id": $vmid,
|
||||
"server_vm_host_name": $vmhost,
|
||||
"server_power_state": $power,
|
||||
"server_state": "new",
|
||||
"server_hostname": $hostname
|
||||
}
|
||||
+
|
||||
(
|
||||
@@ -260,10 +292,48 @@ echo "$VMS" | jq -c '.data[]' | while read -r VM; do
|
||||
),
|
||||
"server_description": $description
|
||||
}
|
||||
' > "${OUTPUT_DIR}/${VMID}.json"
|
||||
')
|
||||
|
||||
done
|
||||
# Save per-VM JSON
|
||||
echo "$SERVER_JSON" > "${OUTPUT_DIR}/${VMID}.json"
|
||||
|
||||
# Add VM to combined payload
|
||||
SERVERS_JSON=$(jq -n \
|
||||
--argjson old "$SERVERS_JSON" \
|
||||
--argjson server "$SERVER_JSON" \
|
||||
'$old + [$server]')
|
||||
|
||||
done < <(
|
||||
echo "$VMS" | jq -c '.data[]? // empty'
|
||||
)
|
||||
|
||||
|
||||
FINAL_PAYLOAD=$(jq -n \
|
||||
--argjson servers "$SERVERS_JSON" '
|
||||
{
|
||||
"servers": $servers
|
||||
}
|
||||
')
|
||||
|
||||
# Save combined payload
|
||||
echo "$FINAL_PAYLOAD" | jq . > "${OUTPUT_DIR}/servers.json"
|
||||
|
||||
echo
|
||||
echo "Uploading payload to Sentri..."
|
||||
|
||||
RESPONSE=$(curl -sk \
|
||||
-X POST \
|
||||
-H "Authorization: Bearer ${SENTRI_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data "$FINAL_PAYLOAD" \
|
||||
"${SENTRI_URL}"
|
||||
)
|
||||
|
||||
echo
|
||||
echo "Sentri API response:"
|
||||
echo "$RESPONSE" | jq . || echo "$RESPONSE"
|
||||
echo "Combined payload written to:"
|
||||
echo "${OUTPUT_DIR}/servers.json"
|
||||
echo "Individual server json files written to: ${OUTPUT_DIR}/"
|
||||
echo
|
||||
echo "Done."
|
||||
echo "JSON files written to: ${OUTPUT_DIR}/"
|
||||
Reference in New Issue
Block a user