Skip to content

Instantly share code, notes, and snippets.

@colemickens
Created April 23, 2018 04:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save colemickens/c1a07800a0f0ff9feabb00b251e1c594 to your computer and use it in GitHub Desktop.
Save colemickens/c1a07800a0f0ff9feabb00b251e1c594 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
F="${HOME}/.secretz/azure.sh"; [[ -f "${F}" ]] && source "${F}"
set -x
set -euo pipefail
#SOURCE="https://nixos.blob.core.windows.net/images/nixos-image-16.03.847.8688c17-x86_64-linux.vhd"
#TARGET="nixos-image-azure-16.03.847.8688c17-x86_64-linux.vhd"
SOURCE="https://nixos.blob.core.windows.net/images/nixos-unstable-nixops.vhd"
TARGET="nixos-unstable-nixops-20180423.vhd"
PREFIX="colemick-nixosdev2"
RG="${PREFIX}-rg"
VNET="${PREFIX}-vnet"
DISK="${TARGET}-disk"
VM="${PREFIX}-vm"
LOCATION="westus2"
#STORAGE="${PREFIX//-/}strg"
STORAGE="${PREFIX//-/}"
CONTAINER="${PREFIX}"
STORAGE_TYPE="Standard_LRS"
SSH_PUBLIC_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDIQzt+Rqt683Cjk6gLFpKe7khngqqVq5+McULxlGDmsFBUuXv4AM89GSuaEilV1UBbGizNqm/6ss3/dB3HrYbelFv4KuHe6sceX1jwj3ADJG+rqOPYrHM7LZQYFzDmD6xCIQOdiMrWBLHSTPIvKXVhArQbyMcrpz3q3jz3jskDyJC9H2Hs/LllqGaBpEuJ6hGftcbNejlUbMqLd8xp5LLqrCkKz9ddJI9EKzy1JVuZEryP3uOxzLVFEqd0bzZxh+UJFH6UN5ncDPz2nAl5EOd/zruUtyfegVa34Fav53Axx8BHRqulpbzSbSc4yJxoyzJWTeapXFvOWgwSftddTjnmEFPY5cw8wRkEPH04i7Mxhrsq6geXHVrtITyQrt7BxacStVurorAaSpqKrKIOcj+GUNngxNiOHJEETLSWXf/5bYz7bXmybmMGAVfn0971ABJAPh9ue0ZwN9bjyYMOkQQYRJ3DcJ9DPfZCAji2QegZEFbFbLrcCwk+zrFVB7F0ZY1u0h8gNiKJlLLNPt8f/1I2HgXTfZ7xKHqZjDcp4vMync6plg2gV1G3KyYov5MP4Hz9JThy4H5aZmHwZFq/p6u1yi7e6VmoSDoJB7VCvjVKUKVXu7qYADqMhI3cmQsFCJyeMJ5mljij9nJUF9nSVIO7SaeKEJ26wZl//KIxauzobw=="
export AZURE_CONFIG_DIR="$(mktemp -d)"
trap "rm -rf ${AZURE_CONFIG_DIR}" EXIT
# LOGIN
az login --service-principal --username="${AZURE_USERNAME}" --password="${AZURE_PASSWORD}" --tenant="${AZURE_TENANT_ID}"
az account set --subscription="${AZURE_SUBSCRIPTION_ID}"
# RESOURCE GROUP
T="$(az group show -n "${RG}")"
if [[ -z "${T}" ]] ; then
az group create -n "${RG}" -l "${LOCATION}"
fi
# VNET
if ! az network vnet show -n "${VNET}" -g "${RG}" &>/dev/null ; then
az network vnet create -n "${VNET}" -g "${RG}"
fi
# STORAGE ACCOUNT (needed to stage the NixOS bootstrap VHD into a MD)
if ! az storage account show -n "${STORAGE}" -g "${RG}" &>/dev/null ; then
az storage account create -n "${STORAGE}" -g "${RG}" --sku "${STORAGE_TYPE}"
fi
export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n "${STORAGE}" -g "${RG}" --query connectionString --output tsv)
# STORAGE CONTAINER
if ! az storage container show -n "${CONTAINER}" -g "${RG}" &>/dev/null ; then
az storage container create -n "${CONTAINER}"
fi
# DISK BLOB COPY
T="$(az storage blob show -c "${CONTAINER}" -n "${TARGET}")"
if [[ -z "${T}" ]] ; then
az storage blob copy start -u "${SOURCE}" -c "${CONTAINER}" -b "${TARGET}"
fi
set +x
while [ $(az storage blob show -c "${CONTAINER}" -n "${TARGET}" | jq .properties.copy.status| tr -d '"') == "pending" ]; do
progress=$(az storage blob show -c "${CONTAINER}" -n "${TARGET}" | jq -r .properties.copy.progress)
done_count=$(echo $progress | sed 's,\([0-9]*\)/\([0-9]*\),\1,g')
total_count=$(echo $progress | sed 's,\([0-9]*\)/\([0-9]*\),\2,g')
progress_percent=$((100 * $done_count / $total_count))
echo -ne "Copying: $progress ($progress_percent %)" && echo -ne "%\033[0K\r" && sleep 5
done
set -x
export BLOB="$(az storage blob url -c "${CONTAINER}" -n "${TARGET}" -o tsv)"
# MANAGED DISK
#T="$(az disk show -n "${DISK}" -g "${RG}")"
#if [[ -z "${T}" ]] ; then
# az disk create --debug -n "${DISK}" -g "${RG}" --source "${BLOB}" --sku "${STORAGE_TYPE}"
#fi
# VM
if ! az vm get-instance-view -n "${VM}" -g "${RG}" &>/dev/null ; then
az vm create \
--name="${VM}" \
--resource-group="${RG}" \
--os-type=linux \
--ssh-key-value="${SSH_PUBLIC_KEY}" \
--image="${BLOB}" --use-unmanaged-disk
#--image="${DISK}"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment