调用模块上下文中 var="${local.var}" 和 var=local.var 之间的区别

问题描述 投票:0回答:1

假设我们有一个名为

var
的局部变量,我们想将其作为 in put 变量传递给子模块,该怎么做?

module "mod1" {
  source = "..."
  var = local.var
}

module "mod1" {
  source = "..."
  var = "${local.var}"
}

我们为什么选择第二种方法?据我所知,如果我们使用局部变量的值构建另一个字符串,则构造

${local.var}
很有用。然而
var = "${local.var}"
有什么意义呢?

terraform
1个回答
0
投票

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
来处理子目录中的文件。请参阅文档了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.