Ansible から vSphere ゲスト(仮想マシン)を操作するモジュールを使って仮想マシンを作成する際、電源の状態は state
の定義を利用して制御します。 しかし、from_template
を使ってテンプレートからクローンを実行した際は state
を使って電源状態を制御することが出来ません。 from_template
を使った場合の電源状態は(state
では無く)power_on_after_clone
を使います。
state の引数
state
は下記の引数を取りえます。 但し前述の通り、from_template
を使った場合は state
が使えません。 実際に from_template
と state
を同時に指定するとエラーになります。
- present
- powered_off
- absent
- powered_on
- restarted
- reconfigured
power_on_after_clone の引数
power_on_after_clone
は下記の引数を取りえます。 from_template
する場合は (state
では無く) こちらの power_on_after_clone
を使います。
- yes
- no
yes
を指定した場合は電源オンに、no
を指定した場合は電源オフになります。
Ansible モジュールの実装を見てみる
Ansible から仮想マシンを操作する部分のソースコードは vphere_guest.py で公開されています。 from_template
に関連する部分は以下のように定義されています。
elif from_template:
deploy_template(
vsphere_client=viserver,
esxi=esxi,
resource_pool=resource_pool,
guest=guest,
template_src=template_src,
module=module,
cluster_name=cluster,
snapshot_to_clone=snapshot_to_clone,
power_on_after_clone=power_on_after_clone,
vm_extra_config=vm_extra_config
)
尚、state
と from_template
を排他にするよう、定義しているのは以下部分のようです。
mutually_exclusive=[['state', 'vmware_guest_facts'],['state', 'from_template']],
利用例
テンプレートから仮想マシンを作成しつつ、Inventory 中の power_on_after_clone
変数で電源状態を制御するサンプルは以下の通りです。
playbook
---
- hosts: all
gather_facts: false
connection: local
user: remote
sudo: true
tasks:
- vsphere_guest:
validate_certs: false
vcenter_hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_user }}"
password: "{{ vcenter_pass }}"
guest: "{{ inventory_hostname }}"
power_on_after_clone: "{{ power_on_after_clone }}"
from_template: yes
template_src: "{{ template }}"
cluster: "{{ cluster }}"
vm_extra_config:
folder: "{{ folder }}"
notes: "{{ notes }}"
esxi:
datacenter: "{{ datacenter }}"
hostname: "{{ esxi_host }}"
inventory
VM-1 ~ 3
という 3 台の仮想マシンを作成します。
[vms]
VM-[1:3]
[vms:vars]
vcenter_hostname = '10.0.0.100'
vcenter_user = 'administrator@vsphere.local'
vcenter_pass = 'password'
cluster = 'Cluster'
datacenter = 'Datacenter'
esxi_host = '10.0.0.101'
folder = 'Folder'
notes = 'Created by Ansible'
power_on_after_clone = 'no'
template = 'CentOS7_template'
コメント