繁体   English   中英

通过 azure cli 并行解除分配和调整 VM 的大小

[英]Deallocate and resize VM's in-parallel via azure cli

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

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

只要停止在每个 VM 上完成的操作,就应该进行调整大小操作。 如何让该命令等到最后一个命令(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 conversion\n"
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 start\n"
fi
done < $filename

在 VM 中安装的东西越多,释放它所需的时间就越多。 而且我认为您的目的是在执行此操作之前调整 VM 的大小并取消分配 VM。 所以我认为你可以使用参数--no-wait直接释放所有虚拟机,然后检查使用 while 循环,在 while 循环中检查虚拟机状态是否等于释放,如果是,则调整虚拟机的大小,如果没有,检查下一个。 如果调整所有 VM 的大小,则退出 while 循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM