vm.gowatana.jp

NEOにほんごVMware(仮)

Terraform で NSX セグメントに vSphere 仮想マシンを接続してみる。

Terraform で NSX のオーバーレイ セグメントを作成して、クローン作成した vSphere の仮想マシンを接続してみます。

 

今回の環境

今回も、下記の NSX ラボを利用しています。

 

Terraform の NSX オーバーレイ セグメント作成には、下記投稿にある .tf ファイルを作成してあります。

 

作成した .tf ファイル

今回は、下記の Terraform Providier を利用しています。

  • vmware/nsxt: NSX のセグメントを作成
  • hashicorp/vsphere: vSphere を操作(仮想マシンを作成)
  • hashicorp/time: 待機処理で利用

 

前回作成したファイルのうち、login.tf ファイルには vCenter Server へのログイン情報を追記しておきます。(9~14行)

gist.github.com

 

今回は、下記のような .tf ファイルを追加作成してあります。

vm-with-nsx-segment.tf

  • 仮想マシンの作成では、vsphere_virtual_machine リソースを利用します。
  • 11~38行目: 仮想マシン作成の準備として、vSphere の各種インベントリ オブジェクトを取得しています。
  • 25~33行目: 前回に作成した NSX セグメントに対応する vSphere ポートグループを vsphere_network データソースで取得しています。セグメントは、作成時に指定したリソースの表示名(nsxt_policy_fixed_segment.segment1.display_name)をもとに取得。
  • 40~71行目: 仮想マシン「vm05」をクローン作成して、前回作成した NSX セグメントに接続します。
  • 61行目: 今回はリンク クローンで作成しています。
  • 66行目: ゲスト OS のホスト名にも、vm05 を設定します。
  • 73~76行目: DHCP で設定された IP アドレスを取得します。

gist.github.com

 

クローン元 仮想マシンの準備

今回はリンク クローンを実行するので、クローン元にする仮想マシンに、スナップショットを作成しておきます。ちなみに、複数のスナップショットを作成してあるとエラーになります。

 

Terraform の実行

あらたに Terraform Providier を追加するため、terraform init を実行します。これで、hashicorp/vsphere と hashicorp/time がインストールされます。

$ terraform init

 

terraform plan → terraform apply を実行して、仮想マシンを作成します。

$ terraform apply -auto-approve

 

処理が問題なく成功すると、最後に DHCP で設定された IP アドレスが表示されます。

ちなみに、output の value を vsphere_virtual_machine.vm.default_ip_address にすると、1番目の IP アドレス(例では 172.16.3.100)を取得できます。

 

仮想マシンが作成、起動されて、NSX セグメントに接続されました。そして NSX DHCP でアドレスが設定されています。

 

ちなみに、本来であれば terraform apply を再実行しても何も起きないことが望ましいですが、現状では vsphere_virtual_machine リソースの ept_rvi_mode と hv_mode が変更されたように認識されてしまい、仮想マシン停止 → 再設定が実行されてしまいます。

 

仮想マシンと NSX セグメントを削除する場合は、terraform destroy を実行します。

$ terraform destroy -auto-approve

 

仮想マシン削除と NSX セグメント削除のタイミングがあわず、下記のようなエラーが表示されますが、この場合は terraform destroy を再実行すると成功します。

Error: Failed to delete Segment da8188bd-a4a8-4c2d-9739-0858804ebc75: Segment path=[/infra/tier-1s/t1-gw-21/segments/da8188bd-a4a8-4c2d-9739-0858804ebc75] has 1 VMs or VIFs attached. Disconnect all VMs and VIFs before deleting a segment. (code 503040)

 

以上、Terraform で仮想マシンを作成して NSX セグメントに接続してみる話でした。