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