概要
GUI から複数仮想マシンのスナップショットを撮るのがだるいので、自動化する。
1. 環境構築
VMWare 公式で、 SDK 的なパッケージである PowerCLI が PowerShell モジュールとして提供されている。
Nix Flake を使う場合は、まずは Powershell を devshell に入れる。
flake.nix
{
description = "PowerCLI";
inputs = {
nixpkgs = { url = "github:NixOS/nixpkgs/nixpkgs-unstable"; };
flake-utils = { url = "github:numtide/flake-utils"; };
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
inherit (nixpkgs.lib) optional;
pkgs = import nixpkgs { inherit system; };
in
{
devShell = pkgs.mkShell {
buildInputs = with pkgs; [
powershell
];
};
});
}
または、以下のように nix-shell で一発でやってもいい。
nix-shell -p powershell
PowerShell 環境に入れたら、 PowerCLI モジュールをインストールする。
Install-Module -Name VMware.PowerCLI -AllowClobber
2. スクリプトを実行する。
以下スクリプトを適当な場所に配置する。
Connect-VIServer -Server "<vCenter のアドレス>"
$vmList = "<スナップショットを撮りたい VM の名前>", "<スナップショットを撮りたい VM の名前>", ...
foreach ($vmName in $vmList) {
New-Snapshot -VM $vmName -Name "<スナップショットの名前>" -Description "<スナップショットの説明>" -Quiesce -Memory
Write-Output "Snapshot created for $vmName."
}
Disconnect-VIServer -Server "<vCenter のアドレス>" -Confirm:$false
<vCenter のアドレス>、<スナップショットを撮りたい VM の名前>、<スナップショットの名前>、<スナップショットの説明> の部分を書き換える。
そしたら実行する。
$ pwsh ./snapshot.ps1
Specify Credential
Please specify server credential
User: XXX
Password for user XXX: *****
Name Port User
---- ---- ----
vCenter のアドレス 443 XXX
WARNING: The 'Quiesced' property of Snapshot type is deprecated and will be removed in a future release.
WARNING: The 'Quiesced' property of Snapshot type is deprecated and will be removed in a future release.
WARNING: The 'Parent' property of Snapshot type is deprecated. Use the 'ParentSnapshot' property instead.
Description : 自分で書いた説明
Created : 1/01/2023 0:00:00AM
Quiesced : False
PowerState : PoweredOn
VM : XXX
VMId : VirtualMachine-vm-XXX
Parent :
ParentSnapshotId :
ParentSnapshot :
Children :
SizeMB : XXX
SizeGB : XXX
IsCurrent : True
IsReplaySupported : False
ExtensionData : VMware.Vim.VirtualMachineSnapshotTree
Id : VirtualMachineSnapshot-snapshot-XXX
Name : XXX
Uid : XXX
Snapshot created for vm-name.
Description : 自分で書いた説明
Created : 1/01/2023 0:00:00AM
Quiesced : False
PowerState : PoweredOn
VM : XXX
VMId : VirtualMachine-vm-XXX
Parent :
ParentSnapshotId :
ParentSnapshot :
Children :
SizeMB : XXX
SizeGB : XXX
IsCurrent : True
IsReplaySupported : False
ExtensionData : VMware.Vim.VirtualMachineSnapshotTree
Id : VirtualMachineSnapshot-snapshot-XXX
Name : XXX
Uid : XXX
Snapshot created for vm-name.
仮想マシンのアクションから、ちゃんとスナップショットが作成されていることを確認する。
おわり。