我该如何避免使用 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 模块注册表涵盖了一些针对较大提供商的预制模块,您可以在其中尝试一些现有的模块,或者 - 如果您的提供商不受支持 - 为如何使用和设计模块开发更好的图片。

相关内容