Files
2026-02-23 12:47:42 +06:00

59 lines
2.3 KiB
Bash

#!/bin/bash
CUSTOMER_FILE="${1:-customers.txt}"
OUT="${2:-openstack_customer_report.csv}"
command -v openstack >/dev/null 2>&1 || { echo "ERROR: openstack CLI not found"; exit 1; }
command -v jq >/dev/null 2>&1 || { echo "ERROR: jq not found. Install: sudo apt-get install -y jq"; exit 1; }
echo "Customer Name,project name,Project id,Instance name,Instance id,Volume name,volume id,vol size,Projects storage Allocation,Number of volu" > "$OUT"
PROJ_JSON="$(openstack project list -f json)"
while IFS= read -r CUSTOMER; do
[[ -z "${CUSTOMER// }" ]] && continue
PROJECT_NAME="$(echo "$PROJ_JSON" | jq -r --arg p "$CUSTOMER" '.[] | select(.Name|test($p;"i")) | .Name' | head -n1)"
PROJECT_ID="$(echo "$PROJ_JSON" | jq -r --arg p "$CUSTOMER" '.[] | select(.Name|test($p;"i")) | .ID' | head -n1)"
echo $PROJECT_NAME
echo $PROJECT_ID
if [[ -z "${PROJECT_ID:-}" || "$PROJECT_ID" == "null" ]]; then
echo "\"$CUSTOMER\"-> Project Not Found"
continue
fi
echo "checkpoint 1"
QUOTA_JSON="$(openstack quota show "$PROJECT_ID" -f json)"
QUOTA_GB="$(echo "$QUOTA_JSON" | jq -r '.[] | select(.Resource=="gigabytes") | .Limit' | head -n1)"
QUOTA_VOL="$(echo "$QUOTA_JSON" | jq -r '.[] | select(.Resource=="volumes") | .Limit' | head -n1)"
QUOTA_GB="${QUOTA_GB:-NA}"
QUOTA_VOL="${QUOTA_VOL:-NA}"
echo "checkpoint 2"
INST_MAP="$(openstack server list --all-projects --project "$PROJECT_ID" -f value -c ID -c Name 2>/dev/null || true)"
echo "checkpoint 3"
openstack volume list --all-projects --project "$PROJECT_ID" -f value -c ID -c Name -c Size 2>/dev/null | \
while read -r VOL_ID VOL_NAME VOL_SIZE; do
ATT_JSON="$(openstack volume show "$VOL_ID" -f json -c attachments 2>/dev/null || echo '{"attachments": []}')"
INSTANCE_ID="$(echo "$ATT_JSON" | jq -r '.attachments[0].server_id // ""')"
echo $ATT_JSON
echo "checkpoint 4"
INSTANCE_NAME=""
if [[ -n "${INSTANCE_ID:-}" ]]; then
echo "checkpoint 5"
INSTANCE_NAME="$(echo "$INST_MAP" | awk -v id="$INSTANCE_ID" '$1==id{print $2; exit}')"
INSTANCE_NAME="${INSTANCE_NAME:-UNKNOWN}"
fi
echo "checkpoint 6"
echo "\"$CUSTOMER\",\"$PROJECT_NAME\",\"$PROJECT_ID\",\"$INSTANCE_NAME\",\"$INSTANCE_ID\",\"$VOL_NAME\",\"$VOL_ID\",\"$VOL_SIZE\",\"$QUOTA_GB\",\"$QUOTA_VOL\"" >> "$OUT"
done
done < "$CUSTOMER_FILE"
echo "Done: $OUT"
echo "Done"