Ansible
AnsibleDay 12

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

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

以上