【发布时间】:2020-08-20 15:21:12
【问题描述】:
在 Terraform 中,我试图提出一个条件,即搜索特定键以稍后执行操作。下面是我定义的地图变量的示例。我想做的是让 Terraform “过滤”某些键并执行某些操作。任何如何实现这一点的建议都会有所帮助。
variable "volumes" {
type = map(object({
size = string
availability_zone = string
}))
default = {
"Primary" = {
size = "200"
availability_zone = "us-west-2a"
}
"PrimarySecondary" = {
size = "100"
availability_zone = "us-west-2a"
}
"Worker1" = {
size = "200"
availability_zone = "us-west-2b"
}
"Worker1Secondary" = {
size = "100"
availability_zone = "us-west-2b"
}
"Worker2" = {
size = "200"
availability_zone = "us-west-2c"
}
"Worker2Secondary" = {
size = "100"
availability_zone = "us-west-2c"
}
}
}
resource "aws_ebs_volume" "partition" {
for_each = var.volumes
availability_zone = each.value.availability_zone
size = each.value.size
tags = {
Name = each.key
}
}
resource "aws_volume_attachment" "ebs_att" {
for_each = aws_ebs_volume.partition
device_name = each.key == ("Primary" || "Worker1" || "Worker2") ? "/dev/sdf" : "/dev/sdg"
volume_id = each.value.id
instance_id = aws_instance.private[each.key].id
}
错误
Error: Invalid operand
on vpc.tf line 49, in resource "aws_volume_attachment" "ebs_att":
49: device_name = each.key == ("Primary" || "Worker1" || "Worker2") ? "/dev/sdf" : "/dev/sdg"
Unsuitable value for right operand: a bool is required.
【问题讨论】:
-
您想要达到的具体结果是什么?你能给出一个示例输出吗?或者解释一下您打算如何以更广泛的方式使用它?
-
是的。我会编辑这个问题。我正在将卷附加到 ebs 卷。对于我正在创建的分区,我需要指定一个特定的设备名称。这些设备名称取决于我拥有的卷的大小。因此,在 Terraform 中,我试图弄清楚如何过滤掉特定的键,以便为分区获取适当的设备名称。我希望这是有道理的。我会补充这个问题。
-
我希望这个问题的答案将涉及使用
if子句的forexpression,以生成一个过滤掉一些元素的新地图。如果你能准确地展示你想要的结果(即什么规则决定了一个特定的元素是否应该包含在结果中),那么写一个真实的例子会更容易。 -
哦,嘿...您在我写该评论时更新了问题。谢谢!
标签: conditional-statements terraform