PowerCLIでスクリプトを作成して、csvファイルから仮想マシンの情報を読み込み一気に仮想マシンを展開してみました。


 

(1)検証環境

仮想マシン展開検証環境図

Noホスト名その他情報備考
1kurobuti-1.kurobuti.localvSphere ESXi 5.1がインストールされている管理系が乗っているホスト
2kurobuti-2.kurobuti.localvSphere ESXi 5.1がインストールされている仮想マシンはこのホストに展開する。
3,4NFS.localデータストア名: VM(No4)VMデータストアに仮想マシンを展開する。

■検証で利用したOS/ソフト情報
項目バージョン
OSWindows 2008 R2
VMware ESXi5.1.0, 799733
vCenter Server5.1.0 880146
PowerCLI5.1.0-1012425

 

(2)本検証の説明

ここでは、PowerCLIスクリプトを作成してホスト名「kurobuti-2.kurobuti.local」とデータストア名「VM」に仮想マシンを展開していきます。
PowerCLI(shell)では、CSVをインポートすることができるので、以下のようなCSVファイルを作成します。
クローン(展開)に利用するテンプレートは作成済み(ここでは、Template-Win7が作成済み)とします。

PowerCLIをインストールされていない方は以下を参考にしてみてください。
【VMware】vSphere PowerCLI を vCenterサーバにインストールしてみた
 

2-1. CSVファイル(横に長いですが・・・。)

仮想マシン展開_CSVファイル

参考までにCSVファイルは以下からダウンロードできます。
CSVファイルのDL: VM_Creation_info.zip
 

2-2. CSVの説明

項目説明
VMName仮想マシン名および仮想マシンのホスト名
OSType仮想マシンのOSタイプ
WindowsまたはLinuxが選択できる
Templateクローン作成の元にするテンプレート名
vSphereHost仮想マシンの展開先ホスト
Datastore仮想マシンの展開先データストア
AdminFullName展開した仮想マシンOSに登録する管理者名
OrgName展開した仮想マシンOSに登録する組織名
Ipaddress展開した仮想マシンに設定するIPアドレス
Subnetmask展開した仮想マシンに設定するサブネットマスク
PrimaryDNS展開した仮想マシンに設定するプライマリDNS
SecondaryDNS展開した仮想マシンに設定するセカンダリDNS(無い場合は空白でよい)
Gateway展開した仮想マシンに設定するゲートウェイ
TimeZone展開した仮想マシンに設定するタイムゾーン
WorkGroup展開した仮想マシンに設定するワークグループ

 

(3)利用スクリプト

・ソース(仮にファイルを「Deploying_VM.ps1」とします。)

# 説明 : 本スクリプトは、csvからの情報を元に仮想マシンを作成するスクリプトである。
#

# 乱数を生成
$RANDOM = Get-Random 1000

# ファイル変数作成
$FILE = $Args[0]

# Unicodeにファイルを変換するためのファイル名を変数に格納する
# ファイル名が被らないように乱数を利用
$FILE_UNI = "$FILE.$RANDOM"

# 引数の確認
if(!$FILE) {
	Write-Host "引数にファイルを指定していません。"
	Write-Host "CSVファイルを引数で指定してください。"
	exit 1
}

# ファイルの存在確認
if(Test-Path $FILE) {
	Write-Host "$FILE の存在が確認できました。"
	} else {
	Write-Host "$FILE の存在が確認できませんでした。"
	Write-Host "処理を中断します。"
	exit 1
}

# 文字コードをUnicodeへ変換(SJISだと文字化けする)
Get-Content $FILE | Out-File $FILE_UNI -Encoding UNICODE

# vCenterサーバへ接続
Connect-VIServer -Server 'localhost' -User 'Administrator' -Password 'パスワード'

# CSV インポート
$vms = Import-CSV $FILE_UNI

# 仮想マシンの作成ループ処理開始
foreach ($vm in $vms) {

	# 必要な情報を変数へ格納
	$VMName = $vm.VMName
	$OSType = $vm.OSType
	$Template = Get-Template $vm.Template
	$vSphereHost = Get-VMHost $vm.vSphereHost
	$Datastore = Get-Datastore $vm.Datastore
	$AdminFullName = $vm.AdminFullName
	$OrganizationName = $vm.OrgName
	$Ipaddress = $vm.Ipaddress
	$Subnetmask = $vm.Subnetmask
	$PrimaryDNS = $vm.PrimaryDNS
	$SecondaryDNS = $VM.SecondaryDNS
	$Gateway = $vm.Gateway
	$TimeZone = $vm.TimeZone
	$WorkGroup = $vm.WorkGroup

	# OSの基本情報設定
	$custSpec = New-OSCustomizationSpec -Type NonPersistent -OSType $OSType -OrgName $OrganizationName -FullName $AdminFullName `
	 -Workgroup $WorkGroup -TimeZone $TimeZone -ChangeSid

	# ネットワークの設定
	$custSpec | Get-OSCustomizationNicMapping | Set-OSCustomizationNicMapping -IpMode UseStaticIP `
	-IpAddress $Ipaddress -SubnetMask $Subnetmask -Dns $PrimaryDNS,$SecondaryDNS -DefaultGateway $Gateway

	# 仮想マシンの作成
	New-VM -Name $VMName -OSCustomizationSpec $custSpec `
	-Template $Template -VMHost $vSphereHost -Datastore $Datastore -RunAsync

}

# vCenterサーバから切断
Disconnect-VIServer -Confirm:$false

# Unicodeに変換したファイルを削除
Remove-Item $FILE_UNI

※34行目は各自の環境のものに変更してください。
注意: 本スクリプトで展開した仮想マシンは、sysprepが実行されます。また、展開後の仮想マシンは自動で起動しません。


スクリプトの中で実行されているコマンドについては、参考文献の「5. VMware vSphere PowerCLI Overview」で確認してください。
 

(4)仮想マシンの展開方法

4-1. CSVを作成、またはダウンロード

ここでは、以下のようにします。
ファイル名: VM_Creation_info.csv
保存先:
C:\Users\管理者ユーザー\Desktop\VMware

中身を修正してください。
 

4-2. 仮想マシン展開スクリプトを作成

ここでは、以下のようにします。
スクリプトファイル名: Deploying_VM.ps1
保存先: C:\Users\管理者ユーザー\Desktop\VMware
 

4-3. スクリプトを実行

スクリプトの引数に展開仮想マシン情報が書かれたCSVファイルを指定してください。

・スクリプト実行

PowerCLI C:\Users\administrator.KUROBUTI\Desktop\VMware> .\Deploying_VM.ps1 .\VM_Creation_info.csv

これで、CSVに書かれている仮想マシン分だけ展開されます:)
一気に展開したい場合などはスクリプトを利用すれば便利ですね。

展開後は、手動で仮想マシンの電源を付けてください。
自動で再構築が実行されます。
再構築実行後にログインして設定が問題無いか確認します。全部見るのはしんどいので1台でよしとするか何か他の方法で全台確認するか決める必要がありますが・・・。
 

4-4. 展開後の確認(例)

・管理者や組織名は問題無いか?
確認_1
レジストリから確認すればいいんですが、めんどくさいのでここではメモ帳のバージョンで確認(ぇ

・ネットワークは設定されているか?
確認_2
 

参考文献

1. CSVを利用した展開方法参考元(英語)
2. 展開した仮想マシンの固定IP設定方法(英語)
3. PowerShellで文字コードを変換してファイルに出力する方法
4. SJISのテキストファイルをUNICODEに変換する
5. VMware vSphere PowerCLI Overview
6. vSphere PowerCLI Documentation


5月 19, 2013 at 3:56 pm by 黒ぶちメガネ
Category: VMware