我正在使用 Terraform 0.12。我有一个返回地图列表的数据源。下面是一个例子:
[
{
"name": "abc"
"id": "123"
},
{
"name": "bcd"
"id": "345"
}
]
Run Code Online (Sandbox Code Playgroud)
如何遍历地图列表的这个数据源并查找键为“name”和值为“bcd”的地图是否存在?
这是我的数据源:
data "ibm_is_images" "custom_images" {}
locals {
isexists = "return true/false based on above condition"
}
Run Code Online (Sandbox Code Playgroud)
如果存在,我想创建一个计数为 0 的资源,否则为 1
resource "ibm_is_image" "my_image" {
count = local.isexists == "true" ? 0 : 1
}
Run Code Online (Sandbox Code Playgroud)
您可以使用该contains函数来检查是否在列表中找到了某个值。
所以现在您只需要能够将您的地图列表转换为与name键匹配的值列表。在 Terraform 0.12 中,您可以像这样使用广义 splat 运算符:
variable "foo" {
default = [
{
"name": "abc"
"id": "123"
},
{
"name": "bcd"
"id": "345"
}
]
}
output "names" {
value = var.foo[*].name
}
Run Code Online (Sandbox Code Playgroud)
应用它会得到以下输出:
names = [
"abc",
"bcd",
]
Run Code Online (Sandbox Code Playgroud)
所以,结合这一点,我们可以做到:
variable "foo" {
default = [
{
"name": "abc"
"id": "123"
},
{
"name": "bcd"
"id": "345"
}
]
}
output "names" {
value = var.foo[*].name
}
output "bcd_found" {
value = contains(var.foo[*].name, "bcd")
}
output "xyz_found" {
value = contains(var.foo[*].name, "xyz")
}
Run Code Online (Sandbox Code Playgroud)
应用此方法后,我们将得到以下结果:
bcd_found = true
names = [
"abc",
"bcd",
]
xyz_found = false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1841 次 |
| 最近记录: |