58 lines
1.5 KiB
Bash
Executable file
58 lines
1.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
set -x
|
|
|
|
image_nix="${1:-"./examples/basic/image.nix"}"
|
|
|
|
nix-build "${image_nix}" --out-link "azure"
|
|
|
|
group="nixos-images"
|
|
location="westus2"
|
|
img_name="nixos-image"
|
|
img_file="$(readlink -f ./azure/disk.vhd)"
|
|
|
|
if ! az group show -n "${group}" &>/dev/null; then
|
|
az group create --name "${group}" --location "${location}"
|
|
fi
|
|
|
|
# note: the disk access token song/dance is tedious
|
|
# but allows us to upload direct to a disk image
|
|
# thereby avoid storage accounts (and naming them) entirely!
|
|
if ! az disk show -g "${group}" -n "${img_name}" &>/dev/null; then
|
|
bytes="$(stat -c %s ${img_file})"
|
|
size="30"
|
|
az disk create \
|
|
--resource-group "${group}" \
|
|
--name "${img_name}" \
|
|
--for-upload true --upload-size-bytes "${bytes}"
|
|
|
|
timeout=$(( 60 * 60 )) # disk access token timeout
|
|
sasurl="$(\
|
|
az disk grant-access \
|
|
--access-level Write \
|
|
--resource-group "${group}" \
|
|
--name "${img_name}" \
|
|
--duration-in-seconds ${timeout} \
|
|
| jq -r '.accessSas'
|
|
)"
|
|
|
|
azcopy copy "${img_file}" "${sasurl}" \
|
|
--blob-type PageBlob
|
|
|
|
az disk revoke-access \
|
|
--resource-group "${group}" \
|
|
--name "${img_name}"
|
|
fi
|
|
|
|
if ! az image show -g "${group}" -n "${img_name}" &>/dev/null; then
|
|
diskid="$(az disk show -g "${group}" -n "${img_name}" -o json | jq -r .id)"
|
|
|
|
az image create \
|
|
--resource-group "${group}" \
|
|
--name "${img_name}" \
|
|
--source "${diskid}" \
|
|
--os-type "linux" >/dev/null
|
|
fi
|
|
|
|
imageid="$(az image show -g "${group}" -n "${img_name}" -o json | jq -r .id)"
|
|
echo "${imageid}"
|