我正在尝试在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的细微差别确实做得很糟糕。
答案 0 :(得分:3)
Terraform函数需要用表达式语法包装以表明它不是文字值:"${}"
因此,请尝试以下操作:project_name_list = "${keys(var.project_map)}"
文档中的示例编写为好像是从terraform命令行运行的一样,它已经假定该命令是HCL表达式,并且不需要该语法。
更新
我在上面说过,表达式语法是为了证明它不是文字值。将其称为expression syntax与configuration syntax可能更准确。配置语法是第一级插值,它构成具有资源块,数据块等的terraform文件的基本结构。第二级插值级是用于生成配置所用值的表达式语法。
用这些术语来思考它可以更好地理解错误消息Unknown token
,因为terraform试图将其作为配置关键字来读取。
我将其与文字值进行了比较,因为它与文字值的位置相同。