如何在Terraform中插入表达式?

时间:2019-05-13 20:11:10

标签: terraform terraform-provider-gcp

我正在尝试在Terraform中使用keys表达式来获取键列表(来自映射变量)并将其分配给局部变量。这是代码段:

 locals {
 project_name_list = keys(${var.project_map})
 }

但是,出现以下错误:

Unknown token: 29:22 IDENT keys

我在这里错过了什么吗?我在任何地方都找不到该表达式的示例。尽管很糟糕,但即使是官方文档也无济于事-https://www.terraform.io/docs/configuration/functions/keys.html

HashiCorp在为初学者在其网站上详细介绍Terraform的细微差别确实做得很糟糕。

1 个答案:

答案 0 :(得分:3)

Terraform函数需要用表达式语法包装以表明它不是文字值:"${}"

因此,请尝试以下操作:project_name_list = "${keys(var.project_map)}"

文档中的示例编写为好像是从terraform命令行运行的一样,它已经假定该命令是HCL表达式,并且不需要该语法。

更新

我在上面说过,表达式语法是为了证明它不是文字值。将其称为expression syntaxconfiguration syntax可能更准确。配置语法是第一级插值,它构成具有资源块,数据块等的terraform文件的基本结构。第二级插值级是用于生成配置所用值的表达式语法。

用这些术语来思考它可以更好地理解错误消息Unknown token,因为terraform试图将其作为配置关键字来读取。

我将其与文字值进行了比较,因为它与文字值的位置相同。