PowerCLI を利用して vSphere 上に仮想マシンを展開する。

# はじめに

技術検証用環境の仮想化基盤に VMWare社の ESXi を利用している。

ESXi上に仮想マシンを展開する手段の一つとして、VMWare社から提供されている VMWare PowerCLI を利用することができる。

専用クライアントツール(～vSphere 6.0)、もしくはWebブラウザを利用してGUIベースで仮想マシンを展開することも可能であるが、
VMWare PowerCLIを利用すると構成をコマンドとして保存できる等の利点があると考える。
他にも以下のような場合に有利であると考えられる。

* 同一構成の仮想マシンを複数展開したい
* 短時間で仮想マシンを展開したい

# 環境とVMWare PowerCLIの導入

## 環境

```powershell
PS> [System.Environment]::OSVersion

Platform ServicePack Version      VersionString
-------- ----------- -------      -------------
 Win32NT             10.0.14393.0 Microsoft Windows NT 10.0.14393.0

PS> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.14393.1770
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14393.1770
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
```

## PowerCLI の導入

1. 管理者権限でPowerShellを起動する。

2. 以下のコマンドを実行する。
 
```powershell
PS> Install-Module -Name VMware.PowerCLI
```

※初回実行時は「NuGetプロバイダの導入」、「信頼されていないリポジトリからのインストール」について、実行可否を聞かれる。


# PowerCLIを利用した仮想マシンの展開
以下の要領で展開する。

## vCenterサーバに接続する。

```powershell 
PS> Connect-VIServer  -Server vcenter.example.com -User <user> -Password <password>

Name                           Port  User
----                           ----  ----
vcenter.example.com            443   <user>
```

- コマンドレットリファレンス<br>
[PowerCLI Reference: Connect-VIServer](https://code.vmware.com/doc/preview?id=5975#/doc/Connect-VIServer.html)

## 仮想マシンを作成する。

```powershell
PS> $vm = New-VM -Name 001_hoge `                    # 仮想マシン(VM)名
                 -VMHost esx1 `                      # VMをホストするESXiサーバ
                 -CD `                               # CDドライブを接続
                 -Datastore datastore-1   `          # VMDKファイルを配置するデータストア名
                 -DiskGB 50 `                        # 仮想ディスクのサイズ(GB)
                 -DiskStorageFormat Thin `           # 仮想ディスクのフォーマット
                 -NumCPU 2 `                         # ソケット数
                 -CoresPerSocket 1 `                 # core数 / ソケット
                 -MemoryGB 8 `                       # メモリサイズ
                 -GuestId rhel7_64Guest `            # ゲストOSの種別(Win2016,centos7...)
                 -NetworkName net-10.128.12 `        # 接続するネットワーク名
                 -Confirm:$false                     # 確認プロンプトなしで即時実行
```

- コマンドレットリファレンス<br>
[PowerCLI Reference: New-VM](https://code.vmware.com/doc/preview?id=5975#/doc/New-VM.html)
- ゲストOSの種別について<br>
[vSphere Web Services API Reference - VirtualMachineGuestOsIdentifier](https://code.vmware.com/doc/preview?id=4206#/doc/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html)


## 仮想マシンの構成を変更する。
### 仮想NICタイプを VMXNet3 に変更する。

```powershell
PS> $vm | Get-NetworkAdapter | Set-NetworkAdapter -Type VMXNet3 -Confirm:$false
```

- コマンドレットリファレンス<br>
[PowerCLI Reference: Get-NetworkAdapter](https://code.vmware.com/doc/preview?id=5975#/doc/Get-NetworkAdapter.html)<br>
[PowerCLI Reference: Set-NetworkAdapter](https://code.vmware.com/doc/preview?id=5975#/doc/Set-NetworkAdapter.html) 


### SCSIコントローラを追加し、追加したコントローラに仮想ディスクを追加する。
- 100GB の仮想ディスクをタイプ `thin` で追加 
- 準仮想化のSCSIコントローラを追加

```powershell
PS> $vm | New-HardDisk -CapacityGB 100 -StorageFormat Thin[^1] | New-ScsiController -Type ParaVirtual -Confirm:$false
```

- コマンドレットリファレンス<br>
[PowerCLI Reference: New-HardDisk](https://code.vmware.com/doc/preview?id=5975#/doc/New-HardDisk.html)<br>
[PowerCLI Reference: New-ScsiController](https://code.vmware.com/doc/preview?id=5975#/doc/New-ScsiController.html)


### データストアにあるISOファイルをマウントさせる。

```powershell
PS> $vm | Get-CDDrive | Set-CDDrive -ISOPath "[datastore-1] Media/CentOS-7-x86_64-Minimal-1708.iso" -StartConnected $true -Confirm:$false
```

- コマンドレットリファレンス<br>
[PowerCLI Reference: Get-CDDrive](https://code.vmware.com/doc/preview?id=5975#/doc/Get-CDDrive.html)<br>
[PowerCLI Reference: Set-CDDrive](https://code.vmware.com/doc/preview?id=5975#/doc/Set-CDDrive.html)

## 仮想マシン起動

```powershell
PS> $vm | Start-VM
```

- コマンドレットリファレンス<br>
[PowerCLI Reference: Start-VM](https://code.vmware.com/doc/preview?id=5975#/doc/Start-VM.html)

## リモートコンソール起動

```powershell
PS> $vm | Open-VMConsoleWindow
```

- コマンドレットリファレンス<br>
[PowerCLI Reference: Open-VMConsoleWindow](https://code.vmware.com/doc/preview?id=5975#/doc/Open-VMConsoleWindow.html)


## vCenterサーバとの接続を切断する。

```powershell 
PS> Disconnect-VIServer
```

---
リモートコンソールまで起動したのであとは、OSインストール等、後続作業に移る。

OSインストールもkickstart(Linuxの場合)を利用して自動構成し、全自動でOS構築まで完了させることができる。

VMをテンプレートから展開する場合, linuxOSの自動インストール（kickstart）の手順もいずれ。。。