Edited at
AnsibleDay 12

Ansible: vSphere Guest モジュールについてのまとめ

More than 1 year has passed since last update.


Ansible: vSphere Guest モジュールについてのまとめ


  • Ansible Advent Calendar 2017 12/12(火) 向けの記事になります。


目的


  • (すでにご存じの方々も多いかと思いますが...)

  • 初学者向けの vSphere Guset 関連モジュールとサンプルコードの紹介


    • 最初に戸惑うことがないように。。



  • 過去にいくつか書いたもののまとめ

  • 最後にこのネタで書いてからこれまでの差分など


対象

以下にリンクされているモジュールを対象とします。


アジェンダ


  1. vSphere Guest 用モジュールの解説


    • 1.1. 大きく2種類ある

    • 1.2. 違い、いい点、悪い点

    • 1.3. 現状でのベストプラクティスは?



  2. 使ってみる


    • 2.1 サンプルコード



  3. それでもエラーが出たときは?


1. vSphere Guest 用モジュールの解説


1.1. 大きく2種類ある

2017/12/11 現在、以下の2つの Guest 用モジュールを利用できます。


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.3. 現状でのベストプラクティスは?


  1. ESXi をスタンドアロンで使っている場合は vsphere_guest 一択にならざるをえないと思います

  2. 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


以上