vm.gowatana.jp

NEOにほんごVMware(仮)

VMware Cloud Director 10.4 を Ansible で操作してみる。Part-03 vApp 作成時の仮想マシン設定変更 Tips

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 に追加するための仮想マシンを作成しておきます。

  1. Photon OS の OVA をアップロードして、仮想マシンを 1台だけ含む vApp テンプレート(photon-ova-01)を作成。
  2. photon-ova-01 から、パワーオンしないで vApp を作成する。この vApp に含まれる仮想マシンでは下記の設定をしておく。 
    1. 仮想マシン名を、わかりやすく「photon-vm-01」にしておく。
    2. 「photon-vm-01」の vNIC をすべて削除しておく。
  3. 仮想マシン「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

gist.github.com

 

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 を作成してみる話でした。