【发布时间】:2017-08-11 14:27:45
【问题描述】:
假设我需要在 terraform 中配置大量 vpc 子网。每个子网都有一个 cidr、一个名称和一个可用区。因此,在其他配置管理工具中,我会执行以下操作:
[
{
"name":"subnet1",
"cidr":"10.0.0.1/24",
"az":"us-west-1a"
},
{
"name":"subnet2",
"cidr":"10.0.0.2/24",
"az":"us-west-1b"
}
]
然后遍历那个数组。
据我所知,Terraform 没有数组/对象的概念。因此,对于单个属性的数组,我只使用一个列表项:
subnets: ["10.0.0.1/24","10.0.0.2/24"]
但这不允许我命名或放置我想要的子网。 我知道我也可以在 Terraform 中使用多个列表,例如:
subnet_names: ["subnet1", "subnet2"]
subnets: ["10.0.0.1/24","10.0.0.2/24"]
subnet_az: ["us-west-1a", "us-west-1b"]
但这让我觉得混乱且违反直觉。我看到的最后一个选项是将所有内容混合成一个丑陋的字符串列表,然后在 Terraform 中将它们分开:
things: ["subnet1__10.0.0.1/24__us-west-1a","subnet2__10.0.0.2/24__us-west-2a"]
但这太丑了。
如何在 Terraform 中处理数组/对象类型的重复?现在我刚刚明确定义了我所有的东西,这导致一个简单的 vpc 定义长达 300 行:-(
【问题讨论】:
-
在这里找到方法:blog.gruntwork.io/…
-
Terraform 文档有一个简单的计数示例,它与您正在寻找的内容接近。 terraform.io/docs/configuration/…
-
恕我直言,我仍然无法使用对象完全控制我的配置。
标签: terraform