RedHat OpenShift環境を作るためのansible hostsファイルがすごく難解。
おかげでいろんなhostsファイル記述を実験する羽目に・・・
仮想マシンテンプレートを作ったあと、仮想マシンのカスタマイズ仕様を元にデプロイするだけとは言え、マスタ2台、インフラノード2台、ノード2台とかを毎回作り直すのが面倒。
簡略化するためにPowerCLIを使って一括作成できるようなスクリプトを作成した。
$vcenter="testvcenter" # 接続先vCenterホスト名 or IPアドレス $vcenterusername="administrator@vsphere.local" # vCenterユーザ名 $vcenterpassword="test" # vCenterパスワード $vmtemplatename="rhel7-os311" # 仮想マシンテンプレート名 $vmcustomizespec="rhel7-base" # 仮想マシンのカスタマイズ仕様名 $datastore="vsphere10" # デプロイ先データストア $esxserver="172.17.44.10" # デプロイ先ESXiサーバ $subnetmask="255.255.0.0" # 仮想マシンのサブネット $defaultgw="172.17.0.1" # 仮想マシンのデフォルトゲートウェイ connect-vcenter -Server $vcenter -User $vcenterusername -Password $vcenterpassword -WarningAction 0 deployvm -vmname "master221" -ipaddr "172.17.44.221" -cpu 4 -memory 16 deployvm -vmname "master222" -ipaddr "172.17.44.222" -cpu 4 -memory 16 deployvm -vmname "infra-node223" -ipaddr "172.17.44.223" -cpu 2 -memory 8 deployvm -vmname "node224" -ipaddr "172.17.44.224" -cpu 2 -memory 8 deployvm -vmname "node225" -ipaddr "172.17.44.225" -cpu 2 -memory 8 Disconnect-VIServer -Confirm:$false ########################################### ### 関数名: connect-vcenter ### 役割: 指定したvCenterサーバに接続 ### 入力: 「-Server vCenterサーバ名」 ### 「-User ユーザ名」 ### 「-Password パスワード」 ### 「-Credential パスワードの暗号化文字列」 ### 「-Password」か「-Credential」かは排他指定 ### 注意: パイプライン処理不可 ########################################### function connect-vcenter{ param( [Parameter(ValueFromPipeline=$false,Mandatory=$false)][string]$Server, [Parameter(ValueFromPipeline=$false,Mandatory=$false)][string]$User, [Parameter(ValueFromPipeline=$false,Mandatory=$false)][string]$Password, [Parameter(ValueFromPipeline=$false,Mandatory=$false)][SecureString]$Credential ) # $global:DefaultVIServers が存在している場合はすでにvCenterに接続されているので処理を飛ばす # vROpsと異なり接続がなくなったら変数もなくなるようだが、念のためこちらも接続中のユーザ名があることを確認 if([String]::IsNullOrEmpty($global:DefaultVIServers.User)){ Try { if($Credential){ $pscredential=New-Object System.Management.Automation.PSCredential($User,$Credential) Connect-VIServer -Server $Server -Credential $pscredential -WarningAction 0 | Out-Null if($? -eq $false){ throw } }else{ Connect-VIServer -Server $Server -User $User -Password $Password -WarningAction 0 | Out-Null if($? -eq $false){ throw } } } Catch { Write-Host "vCenterサーバへの接続に失敗しました" Write-Host $Error[0] exit 1 } } return } ########################################### ### 関数名: deployvm ### 役割: 仮想マシンテンプレートから仮想マシンをデプロイ ### 入力: 「-vmname 仮想マシンホスト名」 ### 「-ipaddr IPアドレス」 ### 「-cpu CPU数」 ### 「-memory メモリ容量」 ### 注意: 簡略化のため、下記の前提がある ### デプロイ先のESXiサーバを、グローバル変数 $esxserver で指定していること ### デプロイ先のデータストアを、グローバル変数 $datastore で指定していること ### 仮想マシンテンプレートを、グローバル変数 $vmtemplatename で指定していること(作成済みであること) ### 仮想マシンのカスタマイズ仕様を、グローバル変数 $vmcustomizespec で指定していること(作成済みであること) ### グローバル変数で仮想マシンのサブネットマスク $subnetmask とデフォルトゲートウェイ $defaultgw を指定していること ########################################### function deployvm{ Param( [Parameter(ValueFromPipeline=$false,Mandatory=$false)][string]$vmname, [Parameter(ValueFromPipeline=$false,Mandatory=$false)][string]$ipaddr, [Parameter(ValueFromPipeline=$false,Mandatory=$false)][int]$cpu, [Parameter(ValueFromPipeline=$false,Mandatory=$false)][int]$memory ) Get-OSCustomizationSpec $vmcustomizespec | New-OSCustomizationSpec -Name vmtemp -Type NonPersistent Get-OSCustomizationNicMapping vmtemp | Set-OSCustomizationNicMapping -IpMode UseStaticIP -IpAddress $ipaddr -SubnetMask $subnetmask -DefaultGateway $defaultgw Get-OSCustomizationSpec vmtemp | Set-OSCustomizationSpec -NamingScheme vm New-VM -Name $vmname -VMHost $esxserver -Template $vmtemplatename -OSCustomizationSpec vmtemp -Datastore $datastore -Confirm:$false Set-VM -VM $vmname -MemoryGB $memory -NumCpu $cpu -Confirm:$false Start-VM -VM $vmname -Confirm:$false Remove-OSCustomizationSpec vmtemp -Confirm:$false }
なお、vCenterへの接続部分がごっつい関数にしてあるのは、他で使ったものの流用であるためです。
deployvmで行っていることの詳細については「PowerShellを使ってVMwareのテンプレートからデプロイで「既存のカスタマイズ仕様を使用してカスタマイズする」を行う方法」を参照のこと。