Ansible TowerとESXiでVMクローンの自動化をしてみた

自分は仕事でVMware vSphere APIとAnsible Towerを使って自動化の開発をしてたりしているのですが、ふとvCenterを使わずにESXi単体とAnsible TowerでVMのクローンを作る自動化が出来たら面白いかもしれないと思いちょっとやってみました。

環境

項目 バージョン
ESXi 6.7.0 8169922
Ansible Tower 3.4.2
Ansible 2.7.8

事前準備

  • ESXiのSSHを有効化しておく必要があります

Ansibleモジュールについて

コミュニティにある標準モジュールでは、今回やりたいことが出来そうになかったので以下のモジュールを作りました。

vmware_guest_register_operation

このモジュールは、vmx(vmtx)ファイルのパスを指定してESXiにVMを登録したり登録解除したりすることが出来るモジュールです。

vmware_guest_powered_on_operation_question

このモジュールは、ソースとなるVMをコピーしたものに対して電源ONをすると質問される回答を自動でしてくれるモジュールです。

VMクローン方法

Playbook

今回使うPlaybookです。

vm_password はVaultで暗号化してコピペするか直書きしてください。

タスク説明

Get datastore infomation

マウントしているデータストアの情報を取得します。
datastore_path 変数にデータストアのパスを自動設定するために vmware_datastore_facts で情報を取得します。

Set datastore path variable

datastore_path にデータストアのフルパスを設定します。

Create a directory to store virtual machines

作成するVMを保存するためのディレクトリを作成します。

Copy vmdk file(Multiple file support)

クローン元のvmdkをクローン先のvmdkにリネームして保存します。
複数のvmdkに対応しています。

Copy vmx file

クローン元のvmxファイル(VM構成ファイル)をクローン先のディレクトリにリネームして保存します。

Replace vmx file parameter

vmxファイルで変更する必要があるパラメータを置換します。

Register VM to inventory

対象のESXiにコピーしたVMを自動でインベントリに登録します。
path オプションにはESXiのWebUIから確認できるVMが保存されているパスを指定します。

VM power operation

インベントリに登録したVMを起動します。
普通に起動するとVMがコピーされたか移動したか?の質問がされてしまうので、このモジュールでは自動で回答しています。

Ansible Tower設定

ここではSCMタイプを手動で作るので、以下のようにプロジェクトを用意します。

プロジェクトの設定は以下のようにしました。

テンプレートは以下のようにしました。

インベントリーにはESXiホストを登録しています。
テンプレートに設定している追加変数は以下の通りです。

パラメーター 説明
source_vm クローン元になるVM名
esxi_hostname クローンしたVMを登録するESXi名(WebClientで確認できるもの)
vm_hostname SSHで接続するESXi
vm_username ESXiにログインするユーザー名
datastore マウントしているデータストア名
clone_vms クローンするVM名(複数クローンする事を想定してリストで定義)
disk_type ディスクタイプの zeroedthick thin eagerzeroedthick を指定

クローン実行

以下は、例ですがクローンした時の動画です。(設定しているパラメーターは上記と一部違います)

ESXi single clone vm demo from sky_joker on Vimeo.

後は、クローンしたVMに対して vmware_vm_shell などを使ってOSの設定をすれば出来上がりかと思います。

これってどう言うシーンで使うの?

うーん、エンタープライズであればvCenterは普通にあると思うので、例えばESXi単体で複数のVMを使うような検証環境を作るシーンとかですかね。
自宅環境とかだと便利かもしれない…

Leave a Reply

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください