【図解】初めてのAnsibleからVMware ESXiを操作する

# 概要

AnsibleからVMwareを操作する手順を残したいと思います。

# 背景

社内ではVMware ESXi（無償ライセンス）を検証環境として常用しているが、環境作成が都度手動だったので、Ansibleで自動構築できるように検証しました。
ただし、残念なことに無償ライセンスではAPI経由(Ansible経由)で仮想マシンの作成、更新などの操作（※参照は可能）を行うことができません。有償もしくは評価ライセンスであれば以下の構成で一連の操作は実現可能です。また、[VMUG Advantage](https://www.vmug.com/membership/vmug-advantage-membership)に加入することで、非商用利用であれば$200/年でライセンスを取得できますので、上記のような社内テスト専用環境にはピッタリです。

# 前提条件

- Ansibleが使える
- VMwareで仮想マシンを作ったことがある
- Windows環境

# 構成図

AnsibleなどのAPI経由からVMware ESXiを操作するためには、vCenterを経由する必要があります。EXSiのライセンスによっては直接ESXiを操作できるらしいが、今回はベターにvCenter経由で構成しました。
なお、筐体の都合上vCenterをVMware Workstation上に載せていますが、筐体に余裕があれば、完全独立した筐体で構成して頂いても問題ありません。
ちなみにvCenterは何かというと複数のVMware ESXiなどを集中管理するためのプラットフォームになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/f6db32f1-bcc9-a7ea-6e83-7b55d779392e.png)

# 手順

簡単な流れとして、以下のようになります。

1. ESXiをインスコ
2. vCenterをインスコ&初期設定
3. vCenterにESXiを登録
4. Ansibleから操作

※以下の操作でMy VMwareからISOファイルを取得することになりますが、ブラウザによっては「Content Not Available」と表示され、ダウンロードできないこと（拡張機能と干渉しているのかも）がありますので、Chromeのシークレットモードでアクセスすると問題なくダウンロードできるようになります。

## 重要

下記ではESXiやvCenterなどには便利上IPで接続していますが、**FQDN**で接続することをお勧めします。
DHCPでIPが変わっても正常に動作できるようになります。


## 1. VMware ESXi(vSphere Hypervisor)のインストール

1. インストール用のISOファイルを取得するためには[My VMware](https://my.vmware.com/jp/web/vmware/login)のアカウントが必要になりますので、アカウントの登録またはログインします。
2. [ダウンロードセンター(ログイン後にリンク)](https://my.vmware.com/en/group/vmware/downloads/#all_products)から[VMware vSphere Hypervisor (ESXi)](https://my.vmware.com/jp/group/vmware/evalcenter?p=free-esxi6)をダウンロードします。
3. ダウンロードしたISOファイルをCD/DVDに焼くか[ブート可能なUSBメモリ](https://komo-jp.hatenablog.com/entry/2018/06/19/125032)を作成します。
4. VMware ESXiのインストールし、IP、DNS設定などを済ます。

## 2. VMware vCenter Server Appliance(以下VCSAとする)のインストール

※今回の構成はVCSAをVMware Workstationに載せていますが、Workstationの導入手順は割愛します。
※VMware ESXiにインストールする場合も基本同じ手順になりますので、適宜読み替えてください。
※vCenterにはいくつかのライセンス体系？があるようです。公式の仮想マシンを用いるタイプは仮想アプライアンスと呼ばれています。
ライセンスも異なるようなのですが、まだ理解できていないので割愛します。

1. 同じくMy VMwareから[VMware-VCSA-all-6.7.0-xxxx.iso](https://my.vmware.com/group/vmware/downloads/details?downloadGroup=VC67U3G&productId=742)を取得します。
2. iso内の`\DVD\vcsa\VMware-vCenter-Server-Appliance-6.7.0.xxxxx-xxxxx_OVF10.ova`を抽出します。  
  Windows 10であればツールを使わずにISOファイルを展開できるので、そのままドラッグ&ドロップで抽出できます。
3. 前述で抽出したovaを元にVCSA用の仮想マシンを作成します。
  ※isoファイル内の`\DVD\vcsa-ui-installer\win32\installer.exe`でESXiに直接インストールすることもできます。
　ただし、インストール先の性能要件の確認があり、それに満たしていない場合はインストールできません。
　なお、下記のように**ovaから作成する場合は性能に満たしていなくてもインストールできます。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/70c232a8-66fb-308d-5b94-6609a375b555.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/c01dc8b3-84c3-c024-198e-770514bc3508.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/0be65bf2-dcc3-9353-b096-0d2997cd661a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/60892e38-2c4c-fafc-33ab-523d5c426d18.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/395a2785-58dc-925d-d10d-59a1a2d7f309.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/402f964c-d2da-b475-10d9-368ec3d1f73f.png)
vCenterのインストールが始まりますので、しばらくお待ちください。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/e9916a63-542c-5e8b-85ea-7024df09415e.png)  
IP（IPv6を無効）とDNSを設定し、ポート5480が表示されたら完了です。
**※英語キーボードになっているので、記号の入力はご注意を！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/827cecbd-6c53-1c4c-6d63-bfd1bee15f11.png)

4. VCSAの設定
表示されたURLにアクセスし、VCSAを設定していきます。
DNSがなくても`https://IPアドレス:5480`でアクセスできます。
アクセスできない場合は、仮想マシンのネットワークアダプタの設定（ブリッジのアダプタ）を見直してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/3cd0afdb-1e5c-317e-9575-4e69609518e7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/08f28fb1-28ad-abcb-810a-c3fb70d3c8be.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/5f18683d-4240-1968-d565-58798ba7243a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/c4fef0d7-0efd-32a0-a279-b25db2d94403.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/7e3b5791-8cdb-6e3a-ae9b-2047df91e92b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/9995c336-fd6a-cfcb-6f9e-9e72d24f7b96.png)

しばらく時間かかりますので、お待ちください。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/291f35d8-0c99-b03c-9041-f0b10c6fe037.png)

## 3. vCenterにVMware ESXiを登録

VMware ESXiに無償ライセンスを適用している場合は、評価ライセンスもしくは有償ライセンスに変更してください。
無償ライセンスでは連携ができません。

VMware ESXi Clientと同じくWebブラウザからコンソールにアクセスすることができます。
**※ポート5480は必要ないのでご注意ください！**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/7c767d92-2c28-6825-f92d-93a5830c208d.png)
なお、仮想アプライアンスそのものの設定を変更したい場合は、`:5480`でアクセスして設定変更してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/ab8652ea-ad87-e9c4-f457-d525849190d5.png)

SSO設定時に設定したadministratorのPWとドメイン名でログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/7d1fee4c-decb-e772-76f7-c939d8a4ae74.png)

評価ライセンスを適用している場合は、画像内上部のようにライセンス期限切れに関するメッセージが表示されますが、検証中なのでそのまま無視で問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/8d061754-fdf9-07e8-16c8-8b17a545aa4a.png)

vCenterで管理対象を論理的に束ねるためにデータセンターを作成する必要があります。
データセンター名は「DC1」とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/4f2d5323-24fa-945f-04ed-cd6a5c517313.png)

EXSiをDC1に登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/fcdb539b-2f71-3261-66ec-bb4affb760c2.png)

ESXiのIPアドレスかホスト名を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/8e9f50e3-2b4e-413b-01be-00b01eaafb40.png)

ESXiのrootアカウント情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/7a6731f2-721f-67ad-a64c-a779a09a91d5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/0c7e4105-0fd0-0d7b-e98a-cf9bba8b3e14.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/e3d546ac-2d33-1944-a7a1-bf22a5b58232.png)

購入済みのライセンスがある場合はそれを選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/24b7e5d4-f09a-1329-63d7-308c2d5a8d9c.png)

検証のため、ひとまず「無効」とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/b15d8b2c-06bf-27f0-18cd-d332eb1783f2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/94a7172e-8b99-22b7-8feb-a7376e4ccdd7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/29d70b48-cf45-9898-bde1-532636a090e6.png)

追加したESXiホストが表示されたら完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/3a00a2f6-795b-3fa7-5d29-3a15b4bff7fd.png)

## Ansibleから操作

手持ちにAnsibleの実行環境があれば、そのままお使いください。
なければDockerベースですが[こちらのコード](https://github.com/comefigo/docker-ansible)でAnsibleの実行環境を作成してください。
[VSCode Remote-Containers](https://code.visualstudio.com/docs/remote/containers)に対応していますので、「Remote-Containers: Reopen Folder in Container」で簡単に起動できます。
起動後下記のvmware.ymlの各種変数(`vars:`配下)を環境に合わせ修正し、実行すればCentOSベースの仮想マシンが作成されます。

```yaml:vmware.yml
- hosts: all
  gather_facts: false
  vars:
    # vCenterのIPもしくはFQDN
    vcenter_hostname: "192.168.1.69"
    # vCenterのユーザ名
    vcenter_username: "administrator@vsphere.local"
    # vCenterのPW
    vcenter_password: ""
    # ESXiのホストIPもしくはFQDN
    esxi_hostname: "192.168.1.110"
    # 前述で作成したデータセンター名
    datacenter_name: "DC1"
    # ESXiのデータストア名
    datastore_name: "datastore1"
  tasks:
  - name: Provide information about vCenter
    vmware_about_info:
      hostname: "{{ vcenter_hostname }}"
      username: "{{ vcenter_username }}"
      password: "{{ vcenter_password }}"
      validate_certs: false
    delegate_to: localhost
    register: cluster_info

  - debug:
      var: cluster_info

  # メモリ: 2GB
  # CPU: 2コア
  # ディスクサイズ: 10GB
  - name: Create a virtual machine on given ESXi hostname
    vmware_guest:
      hostname: "{{ vcenter_hostname }}"
      username: "{{ vcenter_username }}"
      password: "{{ vcenter_password }}"
      datacenter: "{{ datacenter_name }}"
      validate_certs: no
      folder: "/{{ datacenter_name }}/vm/"
      name: test_vm_0001
      state: poweredon
      guest_id: centos64Guest
      esxi_hostname: "{{ esxi_hostname }}"
      disk:
        - size_gb: 10
          type: thin
          datastore: "{{ datastore_name }}"
      hardware:
        memory_mb: 2048
        num_cpus: 2
        scsi: paravirtual
        boot_firmware: "bios"
      # device type:
      # https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-AF9E24A8-2CFA-447B-AC83-35D563119667.html
      networks:
        - name: VM Network
          start_connected: true
          device_type: vmxnet3
      # ブート時にISOを読み込む場合はISOファイルのパス
      # 下記のサンプルは予めESXiのデータストアにアップロードされたISOファイルを用いるものです。
      cdrom:
        type: iso
        iso_path: "[{{ datastore_name }}] iso/CentOS-8.2.2004-x86_64-minimal.iso"
    register: deploy_vm

  - debug:
      var: deploy_vm
```

```shell
> ansible-playbook -i hosts.conf vmware.yml
```

実行後は以下のようにゲストマシンが作成され、パワーオンになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30522/64f7b88e-5a75-450a-67b1-c1e93904961c.png)

今回はここまで。
この後のOSの自動インストール、ミドルウェアの導入などはSSH繋げて、CLIで全部やっていくイメージになるかと思います。
こんな感じ「[Ansible Tower による VMware vSphere 環境の自動化 Part5 （仮想マシンの作成編）](https://rheb.hatenablog.com/entry/ansible_tower_vmware_part5)」

# 参考ページ

- [VMware vSphere 6.5 vCenter Server のインストール手順について解説](https://go-journey.club/archives/2883)
- [無償版ESXi6.7にvCenter Server Appliance6.7をインストールしてみる](https://qiita.com/Higemal/items/3dc7d286547eee25d154)