Files
smom-dbis-138/scripts/azure/list-all-resources.sh
defiQUG 1fb7266469 Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control.
- Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities.
- Created .gitmodules to include OpenZeppelin contracts as a submodule.
- Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment.
- Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks.
- Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring.
- Created scripts for resource import and usage validation across non-US regions.
- Added tests for CCIP error handling and integration to ensure robust functionality.
- Included various new files and directories for the orchestration portal and deployment scripts.
2025-12-12 14:57:48 -08:00

242 lines
8.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# List all Azure resources in the subscription using Azure CLI
# REFACTORED - Uses common libraries
# Organizes resources by type and resource group
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../lib/init.sh"
load_env --file "$SCRIPT_DIR/../../.env" ${ENV_PROFILE:+--profile "$ENV_PROFILE"}
SCRIPT_NAME="list-all-resources.sh"
SCRIPT_DESC="List all Azure resources by type and resource group, with Key Vault & AKS detail"
SCRIPT_USAGE="${SCRIPT_NAME} [--json <file>] [--help]"
SCRIPT_OPTIONS="--json <file> Also export full az resource list JSON to file\n--help Show help"
SCRIPT_REQUIREMENTS="Azure CLI (ensure_azure_cli), subscription access"
handle_help "${1:-}"
# Initialize
SUBSCRIPTION_ID="$(get_subscription_id)"
ensure_azure_cli || exit 1
set_subscription "$SUBSCRIPTION_ID" || true
CURRENT_SUB=$(az account show --query id -o tsv)
CURRENT_SUB_NAME=$(az account show --query name -o tsv)
log_section "LISTING ALL AZURE RESOURCES"
log_info "Subscription: $CURRENT_SUB_NAME"
log_info "Subscription ID: $CURRENT_SUB"
echo ""
# Get all resource groups
log_info "Getting resource groups..."
RESOURCE_GROUPS=$(az group list --query "[].name" -o tsv 2>/dev/null)
if [ -z "$RESOURCE_GROUPS" ]; then
log_warn "No resource groups found"
exit 0
fi
RG_COUNT=$(echo "$RESOURCE_GROUPS" | wc -l)
log_success "Found $RG_COUNT resource groups"
echo ""
# Resource type groups
declare -A RESOURCE_TYPES=(
["Key Vaults"]="Microsoft.KeyVault/vaults"
["Kubernetes Clusters"]="Microsoft.ContainerService/managedClusters"
["Virtual Networks"]="Microsoft.Network/virtualNetworks"
["Storage Accounts"]="Microsoft.Storage/storageAccounts"
["Application Gateways"]="Microsoft.Network/applicationGateways"
["Load Balancers"]="Microsoft.Network/loadBalancers"
["Public IPs"]="Microsoft.Network/publicIPAddresses"
["NICs"]="Microsoft.Network/networkInterfaces"
["Subnets"]="Microsoft.Network/virtualNetworks/subnets"
["Log Analytics Workspaces"]="Microsoft.OperationalInsights/workspaces"
["Virtual Machines"]="Microsoft.Compute/virtualMachines"
["Disks"]="Microsoft.Compute/disks"
["Network Security Groups"]="Microsoft.Network/networkSecurityGroups"
["Route Tables"]="Microsoft.Network/routeTables"
)
# Summary statistics
TOTAL_RESOURCES=0
declare -A TYPE_COUNTS
echo "=" | awk '{printf "%-80s\n", ""}'
echo "📊 RESOURCES BY TYPE"
echo "=" | awk '{printf "%-80s\n", ""}'
echo ""
# List resources by type
for TYPE_NAME in "${!RESOURCE_TYPES[@]}"; do
TYPE_PROVIDER="${RESOURCE_TYPES[$TYPE_NAME]}"
RESOURCES=$(az resource list --resource-type "$TYPE_PROVIDER" --query "[].{Name:name, RG:resourceGroup, Location:location}" -o tsv 2>/dev/null || true)
if [ -n "$RESOURCES" ]; then
COUNT=$(echo "$RESOURCES" | wc -l)
TYPE_COUNTS["$TYPE_NAME"]=$COUNT
TOTAL_RESOURCES=$((TOTAL_RESOURCES + COUNT))
log_info "$TYPE_NAME: $COUNT"
echo "$RESOURCES" | while IFS=$'\t' read -r name rg location; do
if [ -n "$name" ]; then
printf " %-50s | %-30s | %s\n" "$name" "$rg" "$location"
fi
done
echo ""
fi
done
echo "=" | awk '{printf "%-80s\n", ""}'
echo "📊 RESOURCES BY RESOURCE GROUP"
echo "=" | awk '{printf "%-80s\n", ""}'
echo ""
# List all resources grouped by resource group
TOTAL_BY_RG=0
for RG in $RESOURCE_GROUPS; do
log_info "Resource Group: $RG"
RG_RESOURCES=$(az resource list --resource-group "$RG" --query "[].{Name:name, Type:type, Location:location}" -o tsv 2>/dev/null || true)
if [ -n "$RG_RESOURCES" ]; then
RG_COUNT=$(echo "$RG_RESOURCES" | wc -l)
TOTAL_BY_RG=$((TOTAL_BY_RG + RG_COUNT))
echo "$RG_RESOURCES" | while IFS=$'\t' read -r name type location; do
if [ -n "$name" ]; then
TYPE_SHORT=$(echo "$type" | cut -d'/' -f2- | sed 's|/|/|')
printf " %-50s | %-40s | %s\n" "$name" "$TYPE_SHORT" "$location"
fi
done
echo ""
else
log_warn " (empty)"
echo ""
fi
done
# Get all resources (catch-all for any types not in our list)
echo "=" | awk '{printf "%-80s\n", ""}'
echo "📊 ALL RESOURCES (SUMMARY)"
echo "=" | awk '{printf "%-80s\n", ""}'
echo ""
ALL_RESOURCES=$(az resource list --query "[].{Name:name, Type:type, RG:resourceGroup, Location:location}" -o tsv 2>/dev/null || true)
if [ -n "$ALL_RESOURCES" ]; then
TOTAL_ALL=$(echo "$ALL_RESOURCES" | wc -l)
echo "Total resources: $TOTAL_ALL"
echo ""
# Count by resource type
log_info "Resources by type:"
echo "$ALL_RESOURCES" | cut -f2 | sort | uniq -c | sort -rn | head -20 | while read count type; do
TYPE_SHORT=$(echo "$type" | cut -d'/' -f2- | sed 's|/|/|')
printf " %4s %s\n" "$count" "$TYPE_SHORT"
done
echo ""
fi
echo "=" | awk '{printf "%-80s\n", ""}'
echo "📊 SUMMARY"
echo "=" | awk '{printf "%-80s\n", ""}'
echo ""
echo "Subscription: $CURRENT_SUB_NAME"
echo "Subscription ID: $CURRENT_SUB"
echo "Resource Groups: $RG_COUNT"
echo "Total Resources (by RG): $TOTAL_BY_RG"
if [ -n "$ALL_RESOURCES" ]; then
echo "Total Resources (all): $TOTAL_ALL"
fi
echo ""
# List Key Vaults separately (most important for this project)
echo "=" | awk '{printf "%-80s\n", ""}'
echo "🔐 KEY VAULTS DETAIL"
echo "=" | awk '{printf "%-80s\n", ""}'
echo ""
KEY_VAULTS=$(az keyvault list --query "[].{Name:name, RG:resourceGroup, Location:location}" -o tsv 2>/dev/null || true)
if [ -n "$KEY_VAULTS" ]; then
KV_COUNT=$(echo "$KEY_VAULTS" | wc -l)
echo "Key Vaults: $KV_COUNT"
echo ""
echo "$KEY_VAULTS" | while IFS=$'\t' read -r name rg location; do
if [ -n "$name" ]; then
echo " Key Vault: $name"
echo " Resource Group: $rg"
echo " Location: $location"
# Get secrets count
SECRETS_COUNT=$(az keyvault secret list --vault-name "$name" --query "length(@)" -o tsv 2>/dev/null || echo "0")
echo " Secrets: $SECRETS_COUNT"
# Get RBAC status
IS_RBAC=$(az keyvault show --name "$name" --query "properties.enableRbacAuthorization" -o tsv 2>/dev/null || echo "false")
echo " RBAC Enabled: $IS_RBAC"
echo ""
fi
done
else
log_warn "No Key Vaults found"
echo ""
fi
# List AKS clusters separately
echo "=" | awk '{printf "%-80s\n", ""}'
echo "☸️ KUBERNETES CLUSTERS DETAIL"
echo "=" | awk '{printf "%-80s\n", ""}'
echo ""
AKS_CLUSTERS=$(az aks list --query "[].{Name:name, RG:resourceGroup, Location:location, Version:kubernetesVersion, Status:powerState.code}" -o tsv 2>/dev/null || true)
if [ -n "$AKS_CLUSTERS" ]; then
AKS_COUNT=$(echo "$AKS_CLUSTERS" | wc -l)
echo "AKS Clusters: $AKS_COUNT"
echo ""
echo "$AKS_CLUSTERS" | while IFS=$'\t' read -r name rg location version status; do
if [ -n "$name" ]; then
echo " Cluster: $name"
echo " Resource Group: $rg"
echo " Location: $location"
echo " Kubernetes Version: $version"
echo " Status: $status"
# Get node pools
NODE_POOLS=$(az aks nodepool list --cluster-name "$name" --resource-group "$rg" --query "[].{Name:name, Count:count, VM:vmSize}" -o tsv 2>/dev/null || true)
if [ -n "$NODE_POOLS" ]; then
echo " Node Pools:"
echo "$NODE_POOLS" | while IFS=$'\t' read -r np_name np_count np_vm; do
if [ -n "$np_name" ]; then
echo " - $np_name: $np_count nodes ($np_vm)"
fi
done
fi
echo ""
fi
done
else
log_warn "No AKS clusters found"
echo ""
fi
# Export to JSON option
if [ "$1" = "--json" ]; then
OUTPUT_FILE="${2:-azure-resources-$(date +%Y%m%d-%H%M%S).json}"
echo "Exporting to JSON: $OUTPUT_FILE"
az resource list --output json > "$OUTPUT_FILE"
log_success "Exported to $OUTPUT_FILE"
echo ""
fi
log_success "Resource listing complete!"
echo ""