Contents
Ansibleを使ってVMware vSphereの検証環境を自動で作れるか試してみました。
やりたかったこと
VMwareの検証環境を準備するには、vCenter Server Appliance(VCSA)をデプロイしたりESXiインストールしたり色々と大変です。
作ったコードの動作確認用として、vCenter Simulatorがあるのですが、シミュレーター側に実装されているところまでしかテストできなかったのが課題でした。
そこで、今回はVCSAとネストしたESXiのVMのテンプレートを作っておきAnsibleを使って自動でVCSAとESXiの展開から登録までやってみました。
イメージは以下の図のようなことをします。
環境
項目 | バージョン | 補足 |
---|---|---|
Ansible | 2.9.6 | |
VCSA | 6.7.0 | テンプレート、基盤 |
ESXi | 6.7.0 | テンプレート、基盤 |
事前準備
- 通常の手順でVCSAをデプロイする
- デプロイした後、シャットダウンして任意の名前でスナップショットを作成する
- ESXi用のVMを作成する
- VMを作成した後、通常の手順でESXiをインストールする
- インストール後、シャットダウンして任意の名前でスナップショットを作成する
ここでは、リンククローンを使って検証環境を作ることを前提としているのでスナップショット作成が必要です。
リンククローンを使う目的は、時間短縮のためです。(フルクローンの場合、ストレージによってクローンするのに時間がかかりすぎるため)
Playbook
作成したPlaybookは以下の物です。
パラメーター説明
基盤パラメーター
以下のパラメーターは検証環境を作る基盤のvCenter情報です。
パラメーター | 説明 |
---|---|
vcenter_hostname | vCenterのホスト又はIP |
vcenter_username | vCenterへログインするユーザー名 |
vcenter_password | vCenterアカウントのパスワード |
datacenter | 検証環境を作るデータセンター名 |
cluster | 検証環境を作るクラスター名 |
folder | 県諸環境を作るフォルダー名 |
クローン用のESXiパラメーター
以下のパラメーターはESXi VMテンプレートの情報です。
パラメーター | 説明 |
---|---|
esxi_template | 作成したESXi VMのテンプレート名 |
esxi_snapshot | 作成したESXi VMのスナップショット名 |
esxi_guest_user | 作成したESXi VMのユーザー(root)名 |
esxi_guest_password | 作成したESXi VMのユーザーのパスワード |
datastore.name | 作成したESXi VMが認識しているシステムディスクのデータストア名 |
datastore.vmfs_device_name | 作成したESXi VMが認識しているデータストアの識別子 |
esxi_hosts.name | テンプレートから作成するESXi VM名 |
esxi_hosts.networks.name | 作成するESXi VMに紐付けるポートグループ名 |
esxi_hosts.networks.vmk | IPを設定するVMKernel名(vmk0) |
esxi_hosts.networks.ip | 作成したESXi VMのVMKernelに設定するIP |
esxi_hosts.networks.netmask | 作成したESXi VMのVMKernelに設定するIPのネットマスク |
esxi_hosts.networks.gateway | 作成したESXi VMに設定するデフォルトゲートウェイ |
esxi_hosts
はリストで指定します。(同時に複数構築可能)
vmfs_device_name
はデータストアの識別子(naaやmpxなどから始まる)を指定します。
例えば以下の識別子です。
ここでのPlaybokはESXiテンプレートのデータストアは1つのみしか想定していません。データストアを指定する理由はデータストアのUUIDが被るためvCenterへ登録する時にエラーが発生します。そのため、一旦削除して再登録してUUIDをリセットする必要があります。
esxi_hots.networks
は必要なvNIC分指定します。
クローン用のVCSAパラメーター
以下のパラメーターはVCSA VMテンプレートの情報です。
パラメーター | 説明 |
---|---|
vcenter_template | 作成したVCSAのテンプレート名 |
vcenter_name | テンプレートから作成するVCSA名 |
vcenter_snapshot | 作成したVCSAのスナップショット名 |
vcenter_guest_user | 作成したVCSAゲストOSのユーザー名(root) |
vcenter_guest_password | 作成したVCSAゲストOSユーザーのパスワード |
networks.before_ip | VCSAを作成した時に設定したIPアドレス |
networks.before_gateway | VCSAを作成した時に設定したゲートウェイ |
networks.after_ip | テンプレートから作成したVCSAに設定するIP |
networks.after_gateway | テンプレートから作成したVCSAに設定するゲートウェイ |
after_vcenter_hostname | 作成したVCSAに設定するホスト名 |
unique_id | 任意のvCenter Server ID |
今回はVCSAのゲートウェイ設定変更までやっていません。(ただ、タスクに追加すればいいだけなんですが…)
unique_id
がよく分からない場合は vCenter Server のランタイム設定の構成 を確認してください。
最終処理のパラメーター
パラメーター | 説明 |
---|---|
test_datacenter_name | 検証環境に作成するデータセンター名 |
Playbookの実行
今回はESXiを2台作ってVCSAに登録してみます。
以下はサンプルパラメーターです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
(snip) datastore: name: datastore1 vmfs_device_name: "mpx.vmhba0:C0:T0:L0" esxi_hosts: - name: esxi-test01 networks: - name: VM Network vmk: vmk0 ip: 192.168.1.40 netmask: 255.255.255.0 gateway: 192.168.1.254 - name: VM Network - name: VM Network - name: esxi-test02 networks: - name: VM Network vmk: vmk0 ip: 192.168.1.41 netmask: 255.255.255.0 gateway: 192.168.1.254 - name: VM Network - name: VM Network (snip) vcenter_name: vcenter-test (snip) after_vcenter_hostname: 192.168.1.200 unique_id: 50 # Test params # Datacenter name to create on VCSA test_datacenter_name: DC (snip) |
実行します。
1 2 |
(venv) [root@localhost infra_ci]# ansible-playbook vmware_prepare.yml |
完了すればこんな感じで環境が出来上がります。
以下は検証用で作成した vcenter-test
にログインした結果です。
VCSAとESXiをクローンして自動登録まで出来ました 🙂
これをもう少し最適化してリファクタすればRole化できて使い回しができそう 🙂