#!/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"