Terraform で繰り返しを避けるにはどうすればよいですか?

Terraform で繰り返しを避けるにはどうすればよいですか?

私は Terraform を使い始めたばかりで、出発点として vSphere クラスターからリソースをインポートしていました。これは、Ansible の機能を試すためにセットアップした単純なテスト環境です。

同じことを何度も繰り返していることに気づき、もっと良い方法はないかと考えています。よく分かりませんがモジュール私が求めているものに合っており、繰り返しているリソースは同一ではないので、直線的なループが機能するかどうかはわかりません。

実際には、必要に応じて拡張/上書きできるリソースのデフォルトを設定したいと考えています。私が達成したいことを示した短い架空の例:

resource_defaults "vsphere_virtual_machine" {
  resource_pool_id = "${data.vsphere_resource_pool.pool.id}"
  datastore_id     = "${data.vsphere_datastore.datastore.id}"

  num_cpus = 2
  memory   = 1024                                                                                                      guest_id = "other3xLinux64Guest"                                                                                   
  network_interface {
    network_id = "${data.vsphere_network.network.id}"                                                                  }

  disk {
    label = "disk0"
    size  = 20
  }
}

resource "vsphere_virtual_machine" "node1" {
  name             = "terraform-test"
}

resource "vsphere_virtual_machine" "doublenet" {
  name             = "terraform-test-2"
  network_interface {
    network_id = "${data.vsphere_network.other_network.id}"
  }                                                                                                                  
}

resource "vsphere_virtual_machine" "bigdisk" {
  name             = "terraform-test-3"
  disk {
    label = "disk0"
    size  = 100
  }
}

私がやろうとしていることをどうすれば達成できるか知っている人はいますか?

更新: Terraform の経験が少し増えたので、モジュールはまさに私がやりたかったことです。パラメータを渡すことができるとは知りませんでした。機会があれば詳しく説明します。最近、似たようなことをしましたが、データ構造をモジュールに渡すことで、類似しているが異なるインスタンスを意図したとおりに構築することができました。

答え1

Terraform モジュールこれらは、重複した場合に必要なものです。これらは、よく使用するデフォルト値を持つ特定のリソースをカプセル化しており、リソースのセットを再度書き込む代わりに、最小限の入力で再利用できます。

Terraform モジュール レジストリ大規模なプロバイダー向けのいくつかの既成モジュールについて説明します。ここでは、既存のモジュールを試したり、プロバイダーがサポートされていない場合は、モジュールの使用方法と設計方法に関するより適切なイメージを作成したりできます。

関連情報