はじめに
仕事で使いそうなもんでサクッと作った。
要件
- 可用性セットでグルーピングされたVMに対してサイズ変更をするので、全部のVMを電源OFFにしてからリサイズを行う
- ある程度VMの状態がわかるように都度、"HOST名","電源状態","VMサイズ"が確認できるようにしてる
- 動き出したら止まらない、というのは困るので都度Enterキーを押すまで待機、って処理をはさみました
- Azure VirtuhalMachineでの利用を前提にしてる
スクリプトはコチラ
# Define variables
$resource_group_name = "pro-nabehiro-001"
$vm_names = @("nbfr151v", "nbfr152v")
$vm_size = "Standard_B1ls"
# Define a function to get the VM data
function Get-VMData {
param (
[string]$vm_name,
[string]$resource_group_name
)
$powerstate = az vm get-instance-view --name $vm_name --resource-group $resource_group_name --query "{host: name, powerstate: instanceView.statuses[1].displayStatus}" -o tsv
$vm_name_size = az vm show --name $vm_name --resource-group $resource_group_name --query "{size: hardwareProfile.vmSize}" -o tsv
$powerstate + "`t" + $vm_name_size
}
# Show VMs
foreach($vm_name in $vm_names) {
Get-VMData -vm_name $vm_name -resource_group_name $resource_group_name
}
Read-Host "Press Enter to continue. next:stop vms"
# Stop VMs
Write-Host "Stop VMs"
$vm_ids = foreach ($vm_name in $vm_names) {
az vm deallocate --name $vm_name --resource-group $resource_group_name --no-wait | Out-Null
az vm show --name $vm_name --resource-group $resource_group_name --query 'id' -o tsv
}
az vm wait --ids $vm_ids --updated | Out-Null
# Show VMs
foreach($vm_name in $vm_names) {
Get-VMData -vm_name $vm_name -resource_group_name $resource_group_name
}
Read-Host "Press Enter to continue. next:resize vms"
# Resize VMs
Write-Host "Resize VMs"
foreach($vm_name in $vm_names) {
az vm resize --name $vm_name --resource-group $resource_group_name --size $vm_size --no-wait | Out-Null
}
az vm wait --ids $vm_ids --updated | Out-Null
# Show VMs
foreach($vm_name in $vm_names) {
Get-VMData -vm_name $vm_name -resource_group_name $resource_group_name
}
Read-Host "Press Enter to continue. next:start vms"
# Start VMs
Write-Host "Start VMs"
foreach($vm_name in $vm_names) {
az vm start --name $vm_name --resource-group $resource_group_name --no-wait | Out-Null
}
az vm wait --ids $vm_ids --updated | Out-Null
# Show VMs
foreach($vm_name in $vm_names) {
Get-VMData -vm_name $vm_name -resource_group_name $resource_group_name
}
Write-Host "Finished!"