VMware Cloud Director 10.4(VCD)で、Ansible を使用して vApp 作成と削除を試してみます。今回は、vApp 作成時に仮想マシンの NIC 設定を変更して、ゲスト OS のカスタマイズを実施してみます。
前回はこちら。今回も、引き続き自宅ラボ環境を使用しています。
今回の内容です。
今回の vApp 作成
今回は、Ansible を利用して下記の投稿と同様の vApp を作成してみます。
作成する vApp の概要です。
- vApp の中で通信できる、隔離されたネットワーク(vApp ネットワーク)を用意する。この vApp は外部のネットワークとは接続しないが、vApp 内部の仮想マシン同士では通信可能。
- Photon OS 4.0(Linux)で、「ゲスト OS のカスタマイズ」を利用して 2台の仮想マシンを作成する。
- vm01: root パスワードを自動生成する。
- vm02: root パスワードは VMware1! に設定して、iptables は停止/無効化。
ただし、今回の VCD / Ansible 実行環境では、実際に Playbook を実行してみると、いくつか Ansible モジュールがうまく機能しない操作がありました。
- vApp テンプレートから vcd_vapp モジュールで vApp を作成した際に、その中の仮想マシンで「ゲスト OS のカスタマイズ」が作動しない。空の vApp を作成してから仮想マシンを追加すれば作動する。
- 仮想マシンの vNIC の設定(ネットワークや IP アドレスの設定など)が、vcd_vapp_vm_nic モジュールで変更できない。vNIC の作成と同時であれば設定できる。
そのため、環境や手順でいくらか調整してあります。
1. vApp テンプレートの準備
上記の問題を回避できるように、vApp テンプレートの仮想マシンで準備をしておきます。以前の vApp 作成でも使用した Photon OS 4.0 の OVA から、下記のように空の vApp に追加するための仮想マシンを作成しておきます。
- Photon OS の OVA をアップロードして、仮想マシンを 1台だけ含む vApp テンプレート(photon-ova-01)を作成。
- photon-ova-01 から、パワーオンしないで vApp を作成する。この vApp に含まれる仮想マシンでは下記の設定をしておく。
- 仮想マシン名を、わかりやすく「photon-vm-01」にしておく。
- 「photon-vm-01」の vNIC をすべて削除しておく。
- 仮想マシン「photon-vm-01」の含まれる vApp から、vApp テンプレート「photon-ova-02」を作成する。
これて、vNIC がない仮想マシンを含む、vApp テンプレートが用意できます。
- vApp テンプレート: photon-ova-02
- 仮想マシン: photon-vm-01(NIC なし)
2. Playbook の準備
vcd_~ モジュールを使用して、vApp「vapp-03」を作成する Ansible のタスクを用意していきます。
2-1. vApp の作成
まず、空の vApp を作成しておきます。このあと、vApp テンプレートから仮想マシンを作成して設定変更するので、この時点では vApp を停止したままにしておきます。
- deploy: false
- power_on: false
- name: create vapp-03 vcd_vapp: vdc: "org-vdc-01" vapp_name: "vapp-03" description: "created by ansible" deploy: false power_on: false state: "present"
2-2. vApp ネットワークの作成
vApp ネットワーク「vapp-isolate-nw-01」を作成します。
- name: create vApp network vcd_vapp_network: vapp: "vapp-03" vdc: "org-vdc-01" network: "vapp-isolate-nw-01" network_cidr: "10.0.0.1/24" is_guest_vlan_allowed: false state: "present"
2-3. 仮想マシンの作成
vApp に、仮想マシンを作成します。冒頭で用意した vApp テンプレートの仮想マシンをソースとしています。
- source_catalog_name: "catalog-01"
- source_template_name: "photon-ova-02"
- source_vm_name : "photon-vm-01"
仮想マシンの NIC は削除してあるので、まだ network は指定しません。
そして、まだ仮想マシンも停止したままにしておきます。
- power_on: false
- deploy: false
vm01 では、ゲスト OS のカスタマイズで root パスワードを自動生成します。
- vmpassword_auto: true
vm02 では、root パスワードを指定して、カスタム スクリプトで iptables を停止 & 無効化します。
- vmpassword: "VMware1!"
- cust_script: systemctl コマンドを記載
- name: create vm01 from vApp template vcd_vapp_vm: source_vdc: "org-vdc-01" source_catalog_name: "catalog-01" source_template_name: "photon-ova-02" source_vm_name : "photon-vm-01" target_vdc: "org-vdc-01" target_vapp: "vapp-03" target_vm_name: "vm01" hostname: "vm01" vmpassword_auto: "true" vmpassword_reset: "false" power_on: "false" deploy: "false" all_eulas_accepted: "true" state: "present" - name: create vm02 from vApp template vcd_vapp_vm: source_vdc: "org-vdc-01" source_catalog_name: "catalog-01" source_template_name: "photon-ova-02" source_vm_name : "photon-vm-01" target_vdc: "org-vdc-01" target_vapp: "vapp-03" target_vm_name: "vm02" hostname: "vm02" vmpassword: "VMware1!" vmpassword_auto: "false" vmpassword_reset: "false" power_on: "false" deploy: "false" all_eulas_accepted: "true" cust_script: | systemctl stop iptables systemctl disable iptables state: "present"
2-4. vNIC の作成
仮想マシン vm01 と vm02 に、vApp ネットワークに接続して、IP アドレスをマニュアル指定した vNIC を作成します。
- network: "vapp-isolate-nw-01"
- ip_allocation_mode: "MANUAL"
- ip_address: vApp ネットワークのネットワーク アドレスから IP アドレスを指定
ちなみに、このタスクは冪等性がなく、再実行するともう1つ NIC が作成されてしまいます。
- name: create vm nic vcd_vapp_vm_nic: vdc: "org-vdc-01" vapp: "vapp-03" vm_name: "{{ item.name }}" nics: - nic_id: 0 is_primary: true network: "vapp-isolate-nw-01" ip_allocation_mode: "MANUAL" ip_address: "{{ item.ip }}" is_connected: true adapter_type: "VMXNET3" state: "present" with_items: - { name: vm01, ip: 10.0.0.21 } - { name: vm02, ip: 10.0.0.22 }
2-5. vApp の起動
最後に、vApp を起動します。
- operation: "poweron"
- name: power on vApp vcd_vapp: vdc: "org-vdc-01" vapp_name: "vapp-03" operation: "poweron"
2-6. Playbook の作成
これまでの内容をふまえて、下記のような Playbook を作成します。
demo_create_vapp_vapp-03.yml
3. Playbook の実行
作成した Playbook を実行します。
# ansible-playbook demo_create_vapp_vapp-03.yml
少し待つと、vApp、vApp ネットワーク、仮想マシンが作成されるはずです。
仮想マシンは 2つ作成されます。
それぞれの仮想マシンで、Playbook で指定したネットワーク設定が反映されています。
vm01 では、「ゲスト OS のカスタマイズ」で root ユーザのパスワードが自動生成されています。仮想マシン コンソールから、自動生成されたパスワードでログインできるはずです。
vm02 では、root ユーザのパスワードが VMware1! に設定され、iptables が無効化されるスクリプトが設定されているはずです。
以上、Ansible で VCD に vApp を作成してみる話でした。
つづきはこちら。