Ansible で ESXi を操作してみる[VM作成編]

# Ansible で ESXi を操作してみる[VM作成編]

# 目的
* vSphere Client からぽちぽちせずに ESXi を操作したい
* ansible を使うことで構成管理と自動化も視野に
* 最終的には VM の自動作成をしたいなと
* 初めての方は以下も先にご確認下さい
  * Ansible で ESXi を操作してみる[初期テスト]
      * http://qiita.com/hirofumihida/items/f1b5fce4322dc664d95d

# 構成 (2016/03/06 時点)
* ansible 2.0
    * mac os x el capitan
    * ubuntu 14.04

```
$ sudo pip install ansible
$ ansible --version       
ansible 2.0.1.0
$ sudo pip install pysphere
$ sudo pip show pysphere
---
Name: pysphere
Version: 0.1.7
(snip)
```
* ESXi 5.1 u3 (Freeライセンス)
    * 古いですね、すみません。わけあってこのバージョン…
    * ssh サーバを有効にする
* vSphere client 5.1.0
    * Windows10 Pro 

# リファレンス
* 以下のサイトの情報を参考にしました
 * http://www.virtxpert.com/deploying-virtual-machines-vcenter-ansible/
 * http://docs.ansible.com/ansible/vsphere_guest_module.html
* 当方、vCenter などなく無料ライセンスの ESXi ゆえ工夫というか逃げ方法を模索してみました…

# 準備

## ESXi サーバ側に OS インストール用の ISO ファイルを準備します
1. ESXi サーバへログイン
  * 実行例
<pre>
$ ESX_IPADDR='192.168.100.8'
$ ssh root@${ESX_IPADDR}
(snip)
~ #
</pre>
1. ESXi サーバ上で ISO ファイルのダウンロード
  * 今回は CentOS6.7 を準備します
<pre>
# mkdir /vmfs/volumes/datastore1/isofiles
# cd /vmfs/volumes/datastore1/isofiles
# wget http://ftp.iij.ad.jp/pub/linux/centos/6/isos/x86_64/CentOS-6.7-x86_64-minimal.iso
</pre>

## ESXi サーバの情報収集 (後ほど必要になります)
1. ホスト名の取得
<pre>
# hostname
出力例:
esxi5.local
</pre>

## Ansible の構成ファイルを準備します
### 1. 作業用ディレクトリの作成
  * ref. http://docs.ansible.com/ansible/playbooks_best_practices.html#directory-layout
<pre>
$ mkdir -p ~/ansible/esxi-test/group_vars
</pre>

### 2. Group Variable ファイルの作成
#### 2-1. 変数のセット
```
ESX_HOSTNAME='esxi5.local'  <- 上の手順でメモったホスト名
ESX_USER='root'
ESX_PASSWORD='hogehoge'  <- ssh でログイン可能なパスワード
VM_NAME='testvm01'
DATASTORE_NAME='datastore1'
ISO_PATH=${DATASTORE_NAME}/'isofiles/CentOS-6.7-x86_64-minimal.iso'
```
#### 2-2. 変数の確認
```
cat << ETX
        ESX_HOSTNAME:   ${ESX_HOSTNAME}
        ESX_USER:       ${ESX_USER}
        ESX_PASSWORD:   ${ESX_PASSWORD}
        VM_NAME:        ${VM_NAME}
        DATASTORE_NAME: ${DATASTORE_NAME}
        ISO_PATH:       ${ISO_PATH}
ETX
```
#### 2-3. 設定ファイルの作成
```
cd ~/ansible/esxi-test/group_vars
cat << EOF > all.yml
---
esx_hostname: ${ESX_HOSTNAME}
esx_ipaddr: ${ESX_IPADDR}
esx_user: ${ESX_USER}
esx_password: ${ESX_PASSWORD}
guest_vm_name: ${VM_NAME}
datastore_name: ${DATASTORE_NAME}
iso_path: ${ISO_PATH}
EOF
```
```
cat all.yml
cd ../
```
### 3. 構成ファイルの作成
```
ESX_HOST_FILE='esx-host'
cat << EOF > ${ESX_HOST_FILE}
[esxi]
    ${ESX_IPADDR}
EOF
cat ${ESX_HOST_FILE}
```
```
cat << EOF > site.yml
---
- hosts: 127.0.0.1
  connection: local
  user: root
  sudo: false
  gather_facts: false
  serial: 1
  tasks:
    - name: Deploy guest from template
      vsphere_guest:
        vcenter_hostname: "{{ esx_ipaddr }}"
        username: "{{ esx_user }}"
        password: "{{ esx_password }}"
        guest: "{{ guest_vm_name }}"
        state: powered_on
        vm_hw_version: vmx-08
        vm_extra_config:
          vcpu.hotadd: yes
          mem.hotadd:  yes
          notes: This is a test VM
        vm_disk:
          disk1:
            size_gb: 10
            type: thin
            datastore: "{{ datastore_name }}"
        vm_nic:
          nic1:
            type: vmxnet3
            network: VM Network
            network_type: standard
        vm_hardware:
          memory_mb: 1024
          num_cpus: 2
          osid: centos64Guest
          scsi: paravirtual
          vm_cdrom:
            type: "iso"
            iso_path: "{{ iso_path }}"
        esxi:
          datacenter: ha-datacenter
          hostname: "{{ esx_hostname  }}"
EOF
```
```
cat site.yml
```
## VM の Deploy
### 1. 以下のコマンドを実行します
```
ansible-playbook site.yml -i esx-host
```
```
出力例:

[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' (default). This 
feature will be removed in a future release. Deprecation warnings can be disabled by setting deprecation_warnings=False in 
ansible.cfg.

PLAY ***************************************************************************

TASK [Deploy guest from template] **********************************************
changed: [127.0.0.1]

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=1    changed=1    unreachable=0    failed=0
```
## 2. vSphere Client で VM が起動してきていたら成功です

![Screenshot 2016-03-08 03.06.54.png](https://qiita-image-store.s3.amazonaws.com/0/67892/37685004-a3eb-8284-9263-c6317b2d43fe.png)

# 終了