1. hirofumihida

    No comment

    hirofumihida
Changes in body
Source | HTML | Preview
@@ -1,189 +1,190 @@
# Ansible で ESXi を操作してみる[VM作成編]
# 目的
* vSphere Client からぽちぽちせずに ESXi を操作したい
* ansible を使うことで構成管理と自動化も視野に
* 最終的には VM の自動作成をしたいなと
# 構成 (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='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)
# 終了