Ansible: vSphere Guest モジュールについてのまとめ
- Ansible Advent Calendar 2017 12/12(火) 向けの記事になります。
目的
- (すでにご存じの方々も多いかと思いますが...)
- 初学者向けの vSphere Guset 関連モジュールとサンプルコードの紹介
- 最初に戸惑うことがないように。。
- 過去にいくつか書いたもののまとめ
- 最後にこのネタで書いてからこれまでの差分など
対象
以下にリンクされているモジュールを対象とします。
アジェンダ
- vSphere Guest 用モジュールの解説
- 1.1. 大きく2種類ある
- 1.2. 違い、いい点、悪い点
- 1.3. 現状でのベストプラクティスは?
- 使ってみる
- 2.1 サンプルコード
- それでもエラーが出たときは?
1. vSphere Guest 用モジュールの解説
1.1. 大きく2種類ある
2017/12/11 現在、以下の2つの Guest 用モジュールを利用できます。
- vsphere_guest http://docs.ansible.com/ansible/latest/vsphere_guest_module.html
- vmware_guest http://docs.ansible.com/ansible/latest/vmware_guest_module.html
1.2. 違い、いい点、悪い点
- いずれかの選択判断材料となりそうな要素を書き出してみます。
モジュール名 | vsphere_guest | vmware_guest |
---|---|---|
依存する Python モジュール | pysphere | PyVmomi |
Python モジュールメインテナー | 個人 かつ すでに開発を辞めている | VMware社 > "http://vmware.github.io/pyvmomi/" |
vCenter要否 | なくても使えるWorkAroundあり(※1) | vCenter必要(※2) |
StandAlone ESXi 可否 | 可(※1) | 不可(※2) |
モジュール ステータス(※3) | preview | preview |
- ※1 esxi パラメーターに "ha-datacenter" を使う
- ※2 Stand Alone ESXi について明文化されたオプションがない
- ※3 http://docs.ansible.com/ansible/latest/dev_guide/developing_modules_documenting.html#fields
1.3. 現状でのベストプラクティスは?
- ESXi をスタンドアロンで使っている場合は vsphere_guest 一択にならざるをえないと思います
- vCenter がある場合は可能な限り vmware_guest を使いつつ、vmware_guest 利用に問題が生じるような場合に(一時的な)WorkAroundとし限定的に vsphere_guest を利用していくのが良いと思われます
2. 使ってみる
- i. [vmware_guset を使って] CentOS6.9 をテンプレートからデプロイし 60G の Disk を追加、メモリを 4G にして電源 ON
- ii. [vsphere_guest を使って] DHCP でアサインされた IPアドレス を表示させます
実行環境
バージョン | |
---|---|
vSphere | 5.5 |
ansible | 2.3.3.0 (stable-2.3 797d999513) |
pyshpere | 0.1.7 |
pyvmomi | 6.5.0.2017.5.post1 |
ディレクトリ構成
│ site.yml
│
├─group_vars
│ all.yml
│
└─roles
├─centos6.9-base
│ └─tasks
│ main.yml
│
└─gather-vm-info
└─tasks
main.yml
2.1 サンプルコード
./site.yml
---
- name: vm deploy test
hosts: localhost
gather_facts: false
connection: local
roles:
- centos6.9-base
- gather-vm-info
./group_vars/all.yml
---
vc_datacenter: datacenter01
vc_hostname: 192.168.0.91
esxhost: esxi01.local
vc_datastore: 'esxi01:datastore1'
admin_username: admin@vsphere.local
admin_password: hogefuga
vc_network: 'VM Network Private01'
vc_template_c69: Temp_CentOS6.9_x86_64
guest_vm_name: centos6.9-test999
- ※サンプル簡素化のためにパスワードを直書きしてますが ansible vault を使って暗号化しましょう
./roles/centos6.9-base/tasks/main.yml
---
- name: create centos6.9 base
vmware_guest:
datacenter: "{{ vc_datacenter }}"
hostname: "{{ vc_hostname }}"
username: "{{ admin_username }}"
password: "{{ admin_password }}"
esxi_hostname: "{{ esxhost }}"
validate_certs: no
name: "{{ guest_vm_name }}"
state: poweredon
# force: yes
template: "{{ vc_template_c69 }}"
disk:
- size_gb: 40
type: thin
datastore: "{{ vc_datastore }}"
- size_gb: 60
type: thin
datastore: "{{ vc_datastore }}"
hardware:
memory_mb: 4096
num_cpus: 2
wait_for_ip_address: yes
./roles/gather-vm-info/tasks/main.yml
---
- name: gather vm info
vsphere_guest:
vcenter_hostname: "{{ vc_hostname }}"
username: "{{ admin_username }}"
password: "{{ admin_password }}"
validate_certs: no
guest: "{{ guest_vm_name }}"
vmware_guest_facts: yes
register: var
- debug: msg="{{var.ansible_facts.hw_eth0.ipaddresses[0]}}"
- コマンド出力結果サンプル
$ ansible-playbook site.yml
[WARNING]: Host file not found: /etc/ansible/hosts
[WARNING]: provided hosts list is empty, only localhost is available
PLAY [vm deploy test] ***********************************************************************************
TASK [centos6.9-base : create centos6.9 base] ***********************************************************
changed: [localhost]
TASK [gather-vm-info : gather vm info] ******************************************************************
ok: [localhost]
TASK [gather-vm-info : debug] ***************************************************************************
ok: [localhost] => {
"msg": "192.168.100.100"
}
PLAY RECAP **********************************************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0
3. それでもエラーが出たときは?
- 既知の問題で議論されている可能性もあります。
- 以下のようなキーワードでググりましょう
site://github.com/ansible fault.NicSettingMismatch.summary
- vmware_guest の場合は VMware 側に情報があることもあります。
site://communities.vmware.com fault.NicSettingMismatch.summary