-
Notifications
You must be signed in to change notification settings - Fork 42
/
Copy pathcheckquota.sh
97 lines (78 loc) · 3.2 KB
/
checkquota.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/bash
# List of Azure regions to check for quota (update as needed)
IFS=', ' read -ra REGIONS <<< "$AZURE_REGIONS"
SUBSCRIPTION_ID="${AZURE_SUBSCRIPTION_ID}"
GPT_MIN_CAPACITY="${GPT_MIN_CAPACITY}"
TEXT_EMBEDDING_MIN_CAPACITY="${TEXT_EMBEDDING_MIN_CAPACITY}"
AZURE_CLIENT_ID="${AZURE_CLIENT_ID}"
AZURE_TENANT_ID="${AZURE_TENANT_ID}"
AZURE_CLIENT_SECRET="${AZURE_CLIENT_SECRET}"
# Authenticate using Managed Identity
echo "Authentication using Managed Identity..."
if ! az login --service-principal -u "$AZURE_CLIENT_ID" -p "$AZURE_CLIENT_SECRET" --tenant "$AZURE_TENANT_ID"; then
echo "❌ Error: Failed to login using Managed Identity."
exit 1
fi
echo "🔄 Validating required environment variables..."
if [[ -z "$SUBSCRIPTION_ID" || -z "$GPT_MIN_CAPACITY" || -z "$TEXT_EMBEDDING_MIN_CAPACITY" || -z "$REGIONS" ]]; then
echo "❌ ERROR: Missing required environment variables."
exit 1
fi
echo "🔄 Setting Azure subscription..."
if ! az account set --subscription "$SUBSCRIPTION_ID"; then
echo "❌ ERROR: Invalid subscription ID or insufficient permissions."
exit 1
fi
echo "✅ Azure subscription set successfully."
# Define models and their minimum required capacities
declare -A MIN_CAPACITY=(
["OpenAI.Standard.gpt-4o"]=$GPT_MIN_CAPACITY
["OpenAI.Standard.text-embedding-ada-002"]=$TEXT_EMBEDDING_MIN_CAPACITY
)
VALID_REGION=""
for REGION in "${REGIONS[@]}"; do
echo "----------------------------------------"
echo "🔍 Checking region: $REGION"
QUOTA_INFO=$(az cognitiveservices usage list --location "$REGION" --output json)
if [ -z "$QUOTA_INFO" ]; then
echo "⚠️ WARNING: Failed to retrieve quota for region $REGION. Skipping."
continue
fi
INSUFFICIENT_QUOTA=false
for MODEL in "${!MIN_CAPACITY[@]}"; do
MODEL_INFO=$(echo "$QUOTA_INFO" | awk -v model="\"value\": \"$MODEL\"" '
BEGIN { RS="},"; FS="," }
$0 ~ model { print $0 }
')
if [ -z "$MODEL_INFO" ]; then
echo "⚠️ WARNING: No quota information found for model: $MODEL in $REGION. Skipping."
continue
fi
CURRENT_VALUE=$(echo "$MODEL_INFO" | awk -F': ' '/"currentValue"/ {print $2}' | tr -d ',' | tr -d ' ')
LIMIT=$(echo "$MODEL_INFO" | awk -F': ' '/"limit"/ {print $2}' | tr -d ',' | tr -d ' ')
CURRENT_VALUE=${CURRENT_VALUE:-0}
LIMIT=${LIMIT:-0}
CURRENT_VALUE=$(echo "$CURRENT_VALUE" | cut -d'.' -f1)
LIMIT=$(echo "$LIMIT" | cut -d'.' -f1)
AVAILABLE=$((LIMIT - CURRENT_VALUE))
echo "✅ Model: $MODEL | Used: $CURRENT_VALUE | Limit: $LIMIT | Available: $AVAILABLE"
if [ "$AVAILABLE" -lt "${MIN_CAPACITY[$MODEL]}" ]; then
echo "❌ ERROR: $MODEL in $REGION has insufficient quota."
INSUFFICIENT_QUOTA=true
break
fi
done
if [ "$INSUFFICIENT_QUOTA" = false ]; then
VALID_REGION="$REGION"
break
fi
done
if [ -z "$VALID_REGION" ]; then
echo "❌ No region with sufficient quota found. Blocking deployment."
echo "QUOTA_FAILED=true" >> "$GITHUB_ENV"
exit 0
else
echo "✅ Suggested Region: $VALID_REGION"
echo "VALID_REGION=$VALID_REGION" >> "$GITHUB_ENV"
exit 0
fi