假设我们有一个名为
var
的局部变量,我们想将其作为 in put 变量传递给子模块,该怎么做?
module "mod1" {
source = "..."
var = local.var
}
或
module "mod1" {
source = "..."
var = "${local.var}"
}
我们为什么选择第二种方法?据我所知,如果我们使用局部变量的值构建另一个字符串,则构造
${local.var}
很有用。然而var = "${local.var}"
有什么意义呢?
A
${ ... }
序列是一个插值,它计算标记之间给出的表达式,如果需要,将结果转换为字符串,然后将其插入到最终字符串中:
"Hello, ${var.name}!"
在您的情况下,使用插值是没有意义的,因为结果是相同的。此外,额外的字符
"${ ... }"
使代码的可读性稍差。
您可以通过运行 terraform fmt 快速删除 Terraform 配置文件中的冗余插值,它应用 Terraform 语言样式约定的子集,以及针对 可读性的其他细微调整(例如修复缩进)。
考虑以下 Terraform 代码:
module "mod1" {
source = "..."
var = "${local.var}"
}
运行
terraform fmt -diff
代码将更改为:
module "mod1" {
source = "..."
var = local.var
}
命令输出:
main.tf
--- old/main.tf
+++ new/main.tf
@@ -1,5 +1,5 @@
module "mod1" {
source = "..."
- var = "${local.var}"
+ var = local.var
}
\ No newline at end of file
考虑使用
-recursive
来处理子目录中的文件。请参阅文档了解更多详细信息。