loops - 如何在 terraform for 循环中使用 if/else 语句
问题描述
是否可以在 terraform 中执行此操作?
for i in range(10):
if var != "" and i > 2:
# Something to do
elif var != "" and i < 2:
# Something to do
else:
# Something else to do
我想要实现的是创建列表,但我需要 for 循环中的 if/else 语句。到目前为止,我取得的成就是:
for i in range(10):
if var != "":
# Something to do
解决方案
很难回答这个问题,因为您似乎已经决定了一个问题的解决方案,但您实际上并没有说明潜在的问题是什么。不过,我会尽量直接回答你的问题。
在考虑处理 Terraform 中的问题时,最好从使用其他值从表达式构造值的角度进行思考,而不是编写命令式语句来描述如何构造这些值。在这种情况下,我会尝试将您的问题分为两部分:
var
当设置为空字符串与其他情况时,做一些不同的事情。- 在构造列表的前两个元素时做一些不同的事情,但仅限于非空字符串的情况。
其中第一个听起来像一个条件表达式,因为您想根据一个条件在两个可能的结果之间进行选择:
locals {
example = (
var != "" ?
(expression for normal case) :
(expression for empty case)
)
}
您没有包含有关在“空情况”中应该发生什么的详细信息,但是由于您建议您使用命令式语言中的循环,我认为您的问题最好映射到 Terraform 中的for
表达式。
locals {
example = (
var != "" ?
(expression for normal case) :
[ for i in range(10) : (something based on i) ]
)
}
“正常情况”具有根据索引是否小于 2 执行不同操作的额外细节:
locals {
example = (
var != "" ?
[
for i in range(10) : (
i < 2 ?
(something based on i) :
(something else based on i)
)
]
[ for i in range(10) : (something based on i) ]
)
}
(您的原始问题使用i < 2
and i > 2
,而我上面的答案承认使用i < 2
and代替;我假设这种解释更有可能,但是如果您确实需要做一些特殊的事情,而这与更少的情况不同,则i >= 2
此答案将不起作用i == 2
大于或大于。)
如果没有更多关于您要解决的潜在问题的详细信息,我无法进一步回答这个问题,但是由于您似乎对 Python 很熟悉,我确实为您提供了两个通用映射,可以帮助您从 Python 进行翻译- Terraform-ish 方法的 ish 方法:
在这两种情况下,这些构造都具有相似的功能,但语法不同。如果您觉得先在 Python 中探索更舒服,那么我建议您使用这些特定的 Python 构造来构建您的解决方案,然后您应该能够将结果转换为等效的 Terraform 表达式。
推荐阅读
- google-maps - 来自 Google 表格数据的地理编码
- python - 在python中的for循环期间保存迭代次数
- swift - 删除 UITextDocumentProxy 中突出显示的文本
- github-actions - Github Action 中的作业是否已经可以访问其 repo 内容?
- python-3.x - 优化 BigQuery 资源的使用,使用 Google Dataflow 从 GCS 加载 200 万个 JSON 文件
- powerbi - 在 PowerBI 中使用卡片作为按钮
- vba - 激活相应的功能区工具选项卡
- visual-studio-code - 在 VScode Vim 中重新映射 ':w'
- jenkins - Jenkins 下一代警告插件 Checkstyle 抛出错误
- node.js - Puppeteer 中的标头与浏览器中的标头不同