#!/usr/bin/env bash set -euo pipefail if [ -z "${CONFIG_FILE-}" ] && [ -f "${CONFIG_FILE-}" ]; then . "${CONFIG_FILE}" fi POSITIONAL_ARGS=() while [[ $# -gt 0 ]]; do case $1 in -n|--name) AZURE_VM_NAME="$2" shift # past argument shift # past value ;; -*|--*) echo "Unknown option $1" exit 1 ;; *) POSITIONAL_ARGS+=("$1") # save positional arg shift # past argument ;; esac done set -- "${POSITIONAL_ARGS[@]}" # restore positional parameters AZ_VM_INFO=$(az vm show --name "${AZURE_VM_NAME}" --resource-group "${AZURE_RESOURCE_GROUP_NAME}" -o json) NIC=$(echo "${AZ_VM_INFO}" | jq -r '.networkProfile.networkInterfaces[0].id') NIC_INFO=$(az network nic show --ids "${NIC}" -o json) PUBIP=$(echo "${NIC_INFO}" | jq -r '.ipConfigurations[0].publicIpAddress.id') NSG=$(echo "${NIC_INFO}" | jq -r '.networkSecurityGroup.id') SUBNET=$(echo "${NIC_INFO}" | jq -r '.ipConfigurations[0].subnet.id') VNET=$(echo $SUBNET | sed 's#/subnets/.*##') DISK=$(echo "${AZ_VM_INFO}" | jq -r '.storageProfile.osDisk.managedDisk.id') delete_vm () { az vm delete -y --name "${AZURE_VM_NAME}" \ --resource-group "${AZURE_RESOURCE_GROUP_NAME}" || true } delete_vnet () { az network vnet delete --ids "${VNET}" || true } delete_subnet () { az network vnet subnet delete --ids "${SUBNET}" || true } delete_nsg () { az network nsg delete --ids "${NSG}" || true } delete_pubip () { az network public-ip delete --ids "${PUBIP}" || true } delete_disk () { az disk delete -y --ids "${DISK}" || true } delete_nic () { az network nic delete --ids "${NIC}" || true } delete_vm delete_disk delete_nic delete_nsg delete_subnet delete_vnet delete_pubip