如何避免在 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 模組註冊表涵蓋了一些針對大型提供者的預製模組,您可以在其中嘗試一些現有的模組,或者 - 如果您的提供者不受支援 - 開發一個更好的圖片來說明如何使用和設計模組。

相關內容