59 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			59 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}"
 |