11#! /bin/bash
2-
32SUBSCRIPTION_ID=" "
43LOCATION=" "
54MODELS_PARAMETER=" "
65
76while [[ $# -gt 0 ]]; do
87 case " $1 " in
9- --SubscriptionId )
8+ --subscription )
109 SUBSCRIPTION_ID=" $2 "
1110 shift 2
1211 ;;
13- --Location )
12+ --location )
1413 LOCATION=" $2 "
1514 shift 2
1615 ;;
17- --ModelsParameter )
16+ --models-parameter )
1817 MODELS_PARAMETER=" $2 "
1918 shift 2
2019 ;;
2120 * )
22- echo " ❌ ERROR: Unknown option: $1 "
21+ echo " Unknown option: $1 "
2322 exit 1
2423 ;;
2524 esac
2625done
2726
28- AIFOUNDRY_NAME=" ${AZURE_AIFOUNDRY_NAME} "
29- RESOURCE_GROUP=" ${AZURE_RESOURCE_GROUP} "
30-
31- # Validate required parameters
27+ # Verify all required parameters are provided and echo missing ones
3228MISSING_PARAMS=()
33- [[ -z " $SUBSCRIPTION_ID " ]] && MISSING_PARAMS+=(" SubscriptionId" )
34- [[ -z " $LOCATION " ]] && MISSING_PARAMS+=(" Location" )
35- [[ -z " $MODELS_PARAMETER " ]] && MISSING_PARAMS+=(" ModelsParameter" )
3629
37- if [[ ${# MISSING_PARAMS[@]} -ne 0 ]]; then
38- echo " ❌ ERROR: Missing required parameters: ${MISSING_PARAMS[*]} "
39- echo " Usage: $0 --SubscriptionId <SUBSCRIPTION_ID> --Location <LOCATION> --ModelsParameter <MODELS_PARAMETER>"
40- exit 1
30+ if [[ -z " $SUBSCRIPTION_ID " ]]; then
31+ MISSING_PARAMS+=(" subscription" )
4132fi
4233
43- # Load model definitions
44- aiModelDeployments=$( jq -c " .parameters.$MODELS_PARAMETER .value[]" ./infra/main.parameters.json 2> /dev/null)
45- if [[ $? -ne 0 || -z " $aiModelDeployments " ]]; then
46- echo " ❌ ERROR: Failed to parse main.parameters.json or missing '$MODELS_PARAMETER '"
47- exit 1
34+ if [[ -z " $LOCATION " ]]; then
35+ MISSING_PARAMS+=(" location" )
4836fi
4937
50- # Try to discover AI Foundry name if not set
51- if [[ -z " $AIFOUNDRY_NAME " && -n " $RESOURCE_GROUP " ]]; then
52- AIFOUNDRY_NAME=$( az cognitiveservices account list --resource-group " $RESOURCE_GROUP " \
53- --query " sort_by([?kind=='AIServices'], &name)[0].name" -o tsv 2> /dev/null)
38+ if [[ -z " $MODELS_PARAMETER " ]]; then
39+ MISSING_PARAMS+=(" models-parameter" )
5440fi
5541
56- # Check if AI Foundry exists
57- if [[ -n " $AIFOUNDRY_NAME " && -n " $RESOURCE_GROUP " ]]; then
58- existing=$( az cognitiveservices account show --name " $AIFOUNDRY_NAME " \
59- --resource-group " $RESOURCE_GROUP " --query " name" --output tsv 2> /dev/null)
60-
61- if [[ -n " $existing " ]]; then
62- # adding into .env
63- azd env set AZURE_AIFOUNDRY_NAME " $existing " > /dev/null
64-
65- # Check model deployments
66- existing_deployments=$( az cognitiveservices account deployment list \
67- --name " $AIFOUNDRY_NAME " \
68- --resource-group " $RESOURCE_GROUP " \
69- --query " [].name" --output tsv 2> /dev/null)
42+ if [[ ${# MISSING_PARAMS[@]} -ne 0 ]]; then
43+ echo " ❌ ERROR: Missing required parameters: ${MISSING_PARAMS[*]} "
44+ echo " Usage: $0 --subscription <SUBSCRIPTION_ID> --location <LOCATION> --models-parameter <MODELS_PARAMETER>"
45+ exit 1
46+ fi
7047
71- required_models =$( jq -r " .parameters.$MODELS_PARAMETER .value[].name " ./infra/main.parameters.json)
48+ aiModelDeployments =$( jq -c " .parameters.$MODELS_PARAMETER .value[]" ./infra/main.parameters.json)
7249
73- missing_models=()
74- for model in $required_models ; do
75- if ! grep -q -w " $model " <<< " $existing_deployments" ; then
76- missing_models+=(" $model " )
77- fi
78- done
79-
80- if [[ ${# missing_models[@]} -eq 0 ]]; then
81- echo " ℹ️ AI Foundry '$AIFOUNDRY_NAME ' exists and all required model deployments are already provisioned."
82- echo " ⏭️ Skipping quota validation."
83- exit 0
84- else
85- echo " 🔍 AI Foundry exists, but the following model deployments are missing: ${missing_models[*]} "
86- echo " ➡️ Proceeding with quota validation for missing models..."
87- fi
88- fi
50+ if [ $? -ne 0 ]; then
51+ echo " Error: Failed to parse main.parameters.json. Ensure jq is installed and the JSON file is valid."
52+ exit 1
8953fi
9054
91- # Run quota validation
9255az account set --subscription " $SUBSCRIPTION_ID "
9356echo " 🎯 Active Subscription: $( az account show --query ' [name, id]' --output tsv) "
9457
9558quotaAvailable=true
9659
9760while IFS= read -r deployment; do
98- name=${AZURE_ENV_MODEL_NAME:- $(echo " $deployment " | jq -r ' .name' )}
99- model=${AZURE_ENV_MODEL_NAME:- $(echo " $deployment " | jq -r ' .model.name' )}
100- type=${AZURE_ENV_MODEL_DEPLOYMENT_TYPE:- $(echo " $deployment " | jq -r ' .sku.name' )}
101- capacity=${AZURE_ENV_MODEL_CAPACITY:- $(echo " $deployment " | jq -r ' .sku.capacity' )}
61+ name=${AZURE_ENV_MODEL_NAME:- $(echo " $deployment " | jq -r ' .name' )}
62+ model=${AZURE_ENV_MODEL_NAME:- $(echo " $deployment " | jq -r ' .model.name' )}
63+ type=${AZURE_ENV_MODEL_DEPLOYMENT_TYPE:- $(echo " $deployment " | jq -r ' .sku.name' )}
64+ capacity=${AZURE_ENV_MODEL_CAPACITY:- $(echo " $deployment " | jq -r ' .sku.capacity' )}
10265
103- echo " "
10466 echo " 🔍 Validating model deployment: $name ..."
105- ./scripts/validate_model_quota.sh --location " $LOCATION " --model " $model " --capacity " $capacity " --deployment-type " $type "
106- exit_code=$?
67+ ./scripts/validate_model_quota.sh --location " $LOCATION " --model " $model " --capacity $capacity --deployment-type $type
10768
108- if [[ $exit_code -ne 0 ]]; then
109- if [[ $exit_code -eq 2 ]]; then
110- exit 1
111- fi
112- echo " ❌ ERROR: Quota validation failed for model deployment: $name "
113- quotaAvailable=false
69+ # Check if the script failed
70+ exit_code=$?
71+ if [ $exit_code -ne 0 ]; then
72+ if [ $exit_code -eq 2 ]; then
73+ # Skip printing any quota validation error — already handled inside the validation script
74+ exit 1
75+ fi
76+ echo " ❌ ERROR: Quota validation failed for model deployment: $name "
77+ quotaAvailable=false
11478 fi
11579done <<< " $(echo " $aiModelDeployments " )"
11680
117- if [[ " $quotaAvailable " = false ] ]; then
118- echo " ❌ ERROR: One or more model deployments failed quota validation."
119- exit 1
81+ if [ " $quotaAvailable " = false ]; then
82+ echo " ❌ ERROR: One or more model deployments failed validation."
83+ exit 1
12084else
121- echo " ✅ All model deployments passed quota validation successfully."
122- exit 0
123- fi
85+ echo " ✅ All model deployments passed quota validation successfully."
86+ exit 0
87+ fi
0 commit comments