mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
ci: implement SKU capacity & quota validation for mshv workflow
Prevent `SkuNotAvailable` errors for mshv workflow by checking capacity restrictions for each location. Enhance the VM provisioning logic to validate resource availibility before deployment. Signed-off-by: Aastha Rawat <aastharawat@microsoft.com>
This commit is contained in:
committed by
Rob Bradford
parent
62c8f71287
commit
14717a94a3
42
.github/workflows/mshv-infra.yaml
vendored
42
.github/workflows/mshv-infra.yaml
vendored
@@ -87,22 +87,52 @@ jobs:
|
|||||||
SUPPORTED_LOCATIONS=$(echo "$STORAGE_ACCOUNT_PATHS" | jq -r 'to_entries[] | .key')
|
SUPPORTED_LOCATIONS=$(echo "$STORAGE_ACCOUNT_PATHS" | jq -r 'to_entries[] | .key')
|
||||||
|
|
||||||
for location in $SUPPORTED_LOCATIONS; do
|
for location in $SUPPORTED_LOCATIONS; do
|
||||||
family=$(az vm list-skus --size "$SKU" --location "$location" --resource-type "virtualMachines" --query '[0].family' -o tsv)
|
echo "Checking SKU availability for $SKU in $location..."
|
||||||
|
sku_info=$(az vm list-skus --size "$SKU" --location "$location" --resource-type "virtualMachines" -o json)
|
||||||
|
|
||||||
|
if [[ "$(echo "$sku_info" | jq 'length')" -eq 0 ]]; then
|
||||||
|
echo "SKU $SKU is not available in $location"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
family=$(echo "$sku_info" | jq -r '.[0].family // empty')
|
||||||
if [[ -z "$family" ]]; then
|
if [[ -z "$family" ]]; then
|
||||||
echo "Cannot determine VM family for SKU: $SKU in $location"
|
echo "Cannot determine VM family for SKU: $SKU in $location"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
remaining=$(az vm list-usage --location "$location" --query "[?name.value=='$family'] | [0]" -o json |
|
restrictions=$(echo "$sku_info" | jq '.[0].restrictions // []')
|
||||||
jq '(.limit | tonumber) - (.currentValue | tonumber) >= ($ARGS.positional[0] | tonumber)' --jsonargs "$vcpu")
|
if [[ "$(echo "$restrictions" | jq 'length')" -gt 0 ]]; then
|
||||||
if [[ "$remaining" = true ]]; then
|
echo "SKU $SKU has provisioning restrictions in $location:"
|
||||||
echo "Sufficient quota found in $location"
|
echo "$restrictions" | jq -r '.[] | "- \(.type): \(.reasonCode // \"unknown\") \(.displayText // \"\")"'
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
usage=$(az vm list-usage --location "$location" -o json)
|
||||||
|
usage_item=$(echo "$usage" | jq --arg family "$family" '
|
||||||
|
([.[] | select(.name.value | test($family; "i"))] +
|
||||||
|
[.[] | select(.name.value | test("vcpus|cores"; "i"))])
|
||||||
|
| first // empty
|
||||||
|
')
|
||||||
|
|
||||||
|
if [[ -z "$usage_item" || "$usage_item" == "null" ]]; then
|
||||||
|
echo "Failed to determine vCPU quota for $location"
|
||||||
|
echo "Available usage metric names in $location:"
|
||||||
|
echo "$usage" | jq -r '.[].name.value'
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
available_vcpus=$(echo "$usage_item" | jq '(.limit | tonumber) - (.currentValue | tonumber)')
|
||||||
|
if [[ "$available_vcpus" -ge "$vcpu" ]]; then
|
||||||
|
echo "Found location $location with available capacity and quota ($available_vcpus vCPUs available)"
|
||||||
echo "location=$location" >> "$GITHUB_OUTPUT"
|
echo "location=$location" >> "$GITHUB_OUTPUT"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Not enough vCPU quota in $location: $available_vcpus available, need $vcpu"
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "No location found with sufficient vCPU quota for SKU: $SKU"
|
echo "No location found with sufficient vCPU quota and SKU capacity for SKU: $SKU"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
- name: Create Resource Group
|
- name: Create Resource Group
|
||||||
|
|||||||
Reference in New Issue
Block a user