0

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

 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 的细微差别方面确实做得很差。

4

1 回答 1

3

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

所以试试这个:project_name_list = "${keys(var.project_map)}"

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

更新

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

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

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

于 2019-05-13T20:15:28.347 回答