通过 Azure CLI 并行解除分配 VM 并调整其大小



我想从azure cli的一个资源组中对选定的VM执行调整大小操作。按顺序运行的取消分配操作需要更长的时间。

如果我想使用no-wait&sleep,因为我不知道每个VM释放需要多长时间,我需要60或100秒。在它尝试执行大小调整后,我立即收到错误消息Previous stop-deallocate operation on vm did not complete yet。我想并行运行VM释放VM1停止、VM2停止、VM3停止等等……通过发送并行取消分配命令,我可以最大限度地减少总体执行时间。

只要在每个虚拟机上停止操作,就应该进行调整大小操作。如何使该命令等待到最后一个命令(VM解除分配(成功。

#!/bin/bash
rg=westeurope-v02
vm=$p
filename='az.txt'
vmsku=standard_E16ds_v4
echo "nDeallocating VM"
while read p; do
vmstate=$(az vm get-instance-view --name $p --resource-group $rg --query instanceView.statuses[1] --output table | grep "VM running" | awk '{print $3" "$4}')
if [[ ${vmstate} == "VM running" ]]; then
    echo "VM $p is running ...attempting deallocate now !!"
    deallocate=$(az vm deallocate -g $rg -n $p) &
    echo "VM $p is $vmstate" 
    if [[ ${vmstate} == "VM deallocated" ]] || [[ ${vmstate} == "VM stopped" ]]; then
        echo "$vm has deallocated successfully..."
        echo "--------------------------------------------------"
    else    
        echo "$vm is still deallocating..."
        echo "waiting for 30 seconds"
        sleep 30 # want to make some condition here so that resizing should not go successfully
    fi
fi
done < $filename
echo "n Resizing VM n"
while read p; do
echo "Attempting to resize VM to $vmsku" 
vmsku=$(az vm resize --resource-group $rg  --name $p --size "Standard_E16ds_v4")
vmsize=$(az vm show -g $rg -n $p --query hardwareProfile.vmSize -o tsv)
if [[ ${vmsize} == "standard_E16ds_v4" ]]; then
    echo "VM class successfully converted to $vmsize for $p"
fi
done < $filename
echo "n Starting VM post SKU conversionn"
while read p; do
echo "Attempting to start $p with $vmsize"
postconv=$(az vm start -g $rg -n $p)
if [[ ${postconv} -eq 0 ]]; then
    echo "VM $p started successfully...n"
else
    echo "VM $p failed to startn"
fi
done < $filename

你在虚拟机中安装的东西越多,你需要花费更多的时间来解除分配。我认为你的目的是调整虚拟机的大小,并在执行之前解除分配虚拟机。所以我认为你可以使用参数--no-wait直接解除分配所有虚拟机,然后使用while循环检查,在while循环中,如果它等于解除分配,你会检查虚拟机的状态,如果是,调整虚拟机的大小,如果没有,请检查下一个。如果调整所有VM的大小,则退出while循环。

最新更新