Skip to content

Instantly share code, notes, and snippets.

@adamrushuk
Last active September 23, 2022 07:54
Show Gist options
  • Save adamrushuk/3dabe2e45e1a6e0b29cc3d622476382a to your computer and use it in GitHub Desktop.
Save adamrushuk/3dabe2e45e1a6e0b29cc3d622476382a to your computer and use it in GitHub Desktop.
AKS Disk Detach Wait Scripts
# get disk for aks to check attachment state during disk expansion
# vars
$subscriptionName = ""
$aksClusterName = ""
$aksClusterResourceGroupName = ""
$pvcName = ""
# login
Connect-AzAccount -UseDeviceAuthentication
Get-AzContext
Set-AzContext -Subscription $subscriptionName
# get cluster and associated "node resource group" (where resources live)
$aksCluster = Get-AzAksCluster -Name $aksClusterName -ResourceGroupName $aksClusterResourceGroupName
$diskResourceGroupName = $aksCluster.NodeResourceGroup
# get disk associated with AKS PVC name
$aksDisk = Get-AzDisk -ResourceGroupName $diskResourceGroupName | Where-Object { $_.Tags['kubernetes.io-created-for-pvc-name'] -eq $pvcName }
# wait for disk state to detach
$timer = [Diagnostics.Stopwatch]::StartNew()
do {
$disk = Get-AzDisk -ResourceGroupName $diskResourceGroupName -DiskName $aksDisk.Name
$disk | Select-Object DiskState, DiskSizeGB, Name, @{L = "PvcName"; E = { $_.Tags['kubernetes.io-created-for-pvc-name'] } }
Start-Sleep -Seconds 10
} while ($disk.DiskState -eq "Attached")
$timer.Stop()
Write-Host "Disk took [$($timer.Elapsed.Minutes)m$($timer.Elapsed.Seconds)s] to change states"
# full disk info
$disk | Select-Object DiskState, DiskSizeGB, Name, @{L = "PvcName"; E = { $_.Tags['kubernetes.io-created-for-pvc-name'] } }
#!/usr/bin/env bash
# Waits for an AKS disk to report "Unattached"
# vars
SUBSCRIPTION_NAME=""
AKS_CLUSTER_RESOURCEGROUP_NAME=""
AKS_CLUSTER_NAME=""
PVC_NAME=""
# login
az login
az account set --subscription "$SUBSCRIPTION_NAME"
# get cluster and associated "node resource group" (where resources live)
DISK_RESOURCEGROUP_NAME=$(az aks show --name "$AKS_CLUSTER_NAME" --resource-group "$AKS_CLUSTER_RESOURCEGROUP_NAME" --query "nodeResourceGroup" --output tsv)
# define reusable function
get_disk_info() {
az disk list --resource-group "$DISK_RESOURCEGROUP_NAME" --query "[?tags.\"kubernetes.io-created-for-pvc-name\" == '$PVC_NAME' ].{state:diskState, diskSizeGb:diskSizeGb, name:name, pvcname:tags.\"kubernetes.io-created-for-pvc-name\"}" --output table
}
# get disk associated with AKS PVC name
echo 'Waiting for disk to become "Unattached"...'
get_disk_info
# wait for disk state to detach
START_TIME=$SECONDS
while true; do
# get disk info
DISK_OUTPUT=$(get_disk_info)
# check disk state
if echo "$DISK_OUTPUT" | grep Attached; then
sleep 10
elif echo "$DISK_OUTPUT" | grep Unattached; then
echo "Disk is now Unattached."
break
fi
done
ELAPSED_TIME=$(($SECONDS - $START_TIME))
echo "Disk took [$(($ELAPSED_TIME / 60))m$(($ELAPSED_TIME % 60))s] to change states"
# final disk info
get_disk_info
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment