scripts/publish_azure_image.sh
Rama master · réplica de lectura del repositorio original.
#!/bin/bash
set -o pipefail
image_definition=$1
image_name=$2
# If true, publish a new gallery version when the image definition already has versions
new_gallery_version=${3:-false}
subscription_id=$AZURE_SUBSCRIPTION_ID
if [ -z "$subscription_id" ]; then
echo AZURE_SUBSCRIPTION_ID is not specified
exit 1
fi
resource_group=dstack-resources-westeurope
gallery_name=dstack_gallery_westeurope_gen2
function get_image_definition {
az sig image-definition show \
--resource-group $resource_group \
--gallery-name $gallery_name \
--gallery-image-definition $image_definition
}
# We create a separate image definition for each dstack version since
# gallery-image-version can't be in one-to-one correspondence with dstack versions
# (it has to follow semver, e.g. no rc)
function create_image_definition() {
echo Creating image definition...
az sig image-definition create \
--resource-group $resource_group \
--gallery-name $gallery_name \
--gallery-image-definition $image_definition \
--publisher dstackai \
--offer dstack \
--sku $image_definition \
--os-type Linux \
--os-state generalized \
--hyper-v-generation V2 \
--features DiskControllerTypes=SCSI,NVMe
}
function get_latest_image_version() {
az sig image-version list \
--resource-group $resource_group \
--gallery-name $gallery_name \
--gallery-image-definition $image_definition \
--query "[].name" \
--output tsv |
sort -V |
tail -1
}
function create_image_version() {
echo Creating image version $1...
az sig image-version create \
--resource-group $resource_group \
--gallery-name $gallery_name \
--gallery-image-definition $image_definition \
--gallery-image-version "$1" \
--target-regions "australiaeast" "brazilsouth" "canadacentral" "centralindia" "centralus" "eastasia" "eastus" "eastus2" "francecentral" "germanywestcentral" "japaneast" "koreacentral" "northeurope" "norwayeast" "qatarcentral" "southafricanorth" "southcentralus" "southeastasia" "swedencentral" "switzerlandnorth" "uaenorth" "uksouth" "westeurope" "westus2" "westus3" \
--replica-count 1 \
--managed-image "/subscriptions/${subscription_id}/resourceGroups/${resource_group}/providers/Microsoft.Compute/images/${image_name}"
}
get_image_definition > /dev/null || create_image_definition
latest_version=$(get_latest_image_version) || exit 1
if [ -z "$latest_version" ]; then
image_version=0.0.1
elif [ "$new_gallery_version" = true ]; then
image_version="${latest_version%.*}.$((${latest_version##*.} + 1))"
else
echo "$image_definition already has gallery version $latest_version." \
"Enable azure_new_gallery_version to publish a new one."
exit 1
fi
create_image_version $image_version