我有一个像这样的动态块:
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}"
}
}
Run Code Online (Sandbox Code Playgroud)
我的列表定义如下:
"ordered_cache_behaviors": [
{
"path_pattern": "/my-app*",
"s3_target": "${local.default_s3_target}",
"ingress": "external"
}
]
Run Code Online (Sandbox Code Playgroud)
在我的动态块中,我只想在这个条件为真时渲染该块origin.value.s3_target !== var.default_s3_target
如何以及在何处将条件添加到动态块?请注意,块的渲染由当前迭代对象的值控制,而不是由完全排除 for 循环的某个变量控制。
我想迭代所有内容并有条件地排除某些项目。所以用 Javascript 写它看起来像这样:
for (origin in ordered_cache_behaviors) {
if (origin.s3_target !== default_s3_target) {
renderContent();
} else {
console.log('Content was skipped!');
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ins 22
block参数期望接收一个集合,其中每个要生成的块都有一个元素,因此考虑问题的最佳方法是考虑生成仅包含要用于创建块的元素的dynamic过滤版本。for_eachvar.ordered_cached_behaviors
过滤集合元素的常用方法是使用包含子句的for表达式。例如:if
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}"
}
}
Run Code Online (Sandbox Code Playgroud)
该表达式的结果for将是一个新列表,仅包含具有预期s3_target属性值的源元素子集。如果它们都没有该值,那么生成的列表将为零长度,因此 Terraform 将origin根本不会生成任何块。
| 归档时间: |
|
| 查看次数: |
26936 次 |
| 最近记录: |