Terraform 地形条件动态块体
我有一个动态块,如下所示:Terraform 地形条件动态块体,terraform,Terraform,我有一个动态块,如下所示: dynamic "origin" { for_each = var.ordered_cache_behaviors content { domain_name = "${origin.value.s3_target}.s3.amazonaws.com" origin_id = "S3-${origin.value.s3_target
dynamic "origin" {
for_each = var.ordered_cache_behaviors
content {
domain_name = "${origin.value.s3_target}.s3.amazonaws.com"
origin_id = "S3-${origin.value.s3_target}"
}
}
我的列表定义如下:
"ordered_cache_behaviors": [
{
"path_pattern": "/my-app*",
"s3_target": "${local.default_s3_target}",
"ingress": "external"
}
]
在我的动态块中,我只想在该条件为真时渲染块origin.value.s3_target!==变量默认值\u s3\u目标值
如何以及在何处将条件添加到动态块?请注意,块的渲染由当前迭代对象的值控制,而不是在完全排除for循环的某个变量上
我想迭代所有内容并有条件地排除某些项。因此,用Javascript编写它时,它将如下所示:
for (origin in ordered_cache_behaviors) {
if (origin.s3_target !== default_s3_target) {
renderContent();
} else {
console.log('Content was skipped!');
}
}
dynamic
blockfor\u每个
参数都希望接收一个集合,该集合对于要生成的每个块都有一个元素,因此,思考问题的最佳方式是考虑生成过滤版本的var.ordered_cached_behaviors
,该版本仅包含要用于创建块的元素
过滤集合元素的常用方法是包含的。例如:
dynamic "origin" {
for_each = [
for b in var.ordered_cache_behaviors : b
if b.s3_target == var.default_s3_target
]
content {
domain_name = "${origin.value.s3_target}.s3.amazonaws.com"
origin_id = "S3-${origin.value.s3_target}"
}
}
对于表达式,该
的结果将是一个新列表,其中仅包含具有预期的s3\u目标
属性值的源元素子集。如果其中没有一个具有该值,则结果列表的长度将为零,因此Terraform将根本不生成原点块。动态块for_每个参数期望接收一个集合,该集合中每个要生成的块都有一个元素,因此,思考问题的最佳方式是考虑生成过滤版本的var.ordered_cached_behaviors
,该版本仅包含要用于创建块的元素
过滤集合元素的常用方法是包含的。例如:
dynamic "origin" {
for_each = [
for b in var.ordered_cache_behaviors : b
if b.s3_target == var.default_s3_target
]
content {
domain_name = "${origin.value.s3_target}.s3.amazonaws.com"
origin_id = "S3-${origin.value.s3_target}"
}
}
对于
表达式,该的结果将是一个新列表,其中仅包含具有预期的s3\u目标
属性值的源元素子集。如果其中没有一个具有该值,那么结果列表的长度将为零,因此Terraform将不会生成任何原点
块。非常好的解决方案,正是我想要的,谢谢!非常好的解决方案,正是我想要的,谢谢!