Ansibleのvsphere_guestモジュールでESXiに新しいVMを作る

#概要
会社の研修でAnsible＋Jenkins＋Gitを使って、検証環境の自動デプロイを実現しようとしています、何度かつまずきながらもESXiに新しいVMをデプロイすることは成功しました。
備忘録代わりにアウトプットしようと思います。

##環境
- contolloer
Centos7
Ansible2.6

- ESXi
  ESXi 5.5

- target
  Centos7

##モジュール選定
そもそもESXiに対してのAnsibleモジュールは大きく分けて2種類ありました。
vsphere_guestとvmware_guestです。

違いは以下
vsphere_guest
　無償版でも使用可能
　※Ansible2.9で削除予定のモジュール

vmware_guest
　API経由で実施するため(無償版では使用不可)
　※Ansible公式の推奨モジュール

今回は無償版のESXiのためvsphere_guestを選定

##Playbook

```deploy.yml
- hosts: localhost
  connection: local  ←Ansible自身にPlaybookを実行する。

  tasks:
    - name: Deploy_VM
      vsphere_guest:
        vcenter_hostname: "{{ hostname }}"　←ESXiのIPアドレス
        username: "{{ username }}"　　　　　←ESXiログイン時のユーザ名
        password: "{{ password }}"　　　　　←ESXiログイン時のパスワード
        guest: "{{ guest }}"　　　　　　　　←作成するVMの名前
        state: powered_on　　　　　　　　　　←作ったVMステータス設定(今回はパワーオン)
        validate_certs: no　　　　　　　　　←初回SSH接続時の確認をとばす
        esxi:
          datacenter: ha-datacenter　　　　←スタンドアロンの場合固定値
          hostname: localhost.localdomain　←ESXiに設定しているホスト名

        vm_extra_config:
          notes: This is a test VM
        vm_disk:
          disk1:
            size_gb: "{{ size_gb }}"
            type: thin
            datastore: datastore1
        vm_nic:
          nic1:
            type: vmxnet3
            network: VM Network 1
            network_type: standard
          nic2:
            type: vmxnet3
            network: VM Network
            network_type: standard
          nic3:
            type: vmxnet3
            network: VM Network 2
            network_type: standard
            
        vm_hardware:
          memory_mb: "{{ memory_mb }}"
          num_cpus: "{{ num_cpus }}"
          osid: rhel6_64Guest　　　　　　　←ESXiのバージョンによって微妙に異なるので注意
          scsi: paravirtual
          vm_cdrom:
            type: "iso"
            iso_path: "{{ iso_path }}"


```

今回はJenkinsと連携させるために直接書き込まず変数で与える形でPlaybook作っています。
実行対象のESXiはSSHの許可を事前に行っておいてください。
あとisoファイルはESXi側に置いとく必要もあります。

##直面した課題
上記のPlaybookでなんとかdeployすることができたんですが、CentosのインストールはGUIで行わないといけないことに気づき困ってしまいました。。
自動デプロイなのにて、、
①AnsibleでVm作成
②ESXiに入り手動でインストール　←んな、馬鹿な！
ってことでうまくできないかといろいろ調べまして、Kickstartを使ってisoをいじくり、CLIにて勝手にインストールしてくれるようにしました(中身は割愛しますが、nicにDHCPの設定いれてCLIで自動インストールしてくれるようにしただけです)

##実行
最終的にはJenkinsと連携させる

```
+ ansible-playbook -i Y.Y.Y.Y Deploy_VM.yml --vault-password-file=../passwd --extra-vars=hostname=Y.Y.Y.Y --extra-vars=username=root --extra-vars=password=XXXXX --extra-vars=guest=Web2 --extra-vars=size_gb=7 --extra-vars=memory_mb=2048 --extra-vars=num_cpus=1 --extra-vars=iso_path=datastore1/ISO/CentOS-7_Auto.iso
 [WARNING]: Unable to parse /var/lib/jenkins/workspace/Deploy_VM/Y.Y.Y.Y
as an inventory source
 [WARNING]: No inventory was parsed, only implicit localhost is available
 [WARNING]: provided hosts list is empty, only localhost is available. Note
that the implicit localhost does not match 'all'
[DEPRECATION WARNING]: vsphere_guest is kept for backwards compatibility but 
usage is discouraged. The module documentation details page may explain more 
about this rationale.. This feature will be removed in a future release. 
Deprecation warnings can be disabled by setting deprecation_warnings=False in 
ansible.cfg.

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Deploy_VM] ***************************************************************
[DEPRECATION WARNING]: The 'vsphere_guest' module has been deprecated. Use 
'vmware_guest' instead.. This feature will be removed in version 2.9. 
Deprecation warnings can be disabled by setting deprecation_warnings=False in 
ansible.cfg.
changed: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0   
```

DEPRECATION WARNINGが表示されversion2.9で使えなくなるよーと警告されますが、無視無視
ansible.cfgを編集すれば消せますが、気にしない気にしない。
ipアドレスはマスクしとります

##終わりに
今までESXiに触る機会がなく初めての挑戦だったため、ひっじょーに苦戦しました。
苦戦の記録はとくに残していませんが、えらい時間がかかりました。

このあとは作ったVMに対してPlaybookを実行しサーバを完成させていく作業のため、あまり苦戦はしませんでした。

終わり