【问题标题】:How to interpolate expressions in Terraform?如何在 Terraform 中插入表达式?
【发布时间】:2019-09-30 19:43:49
【问题描述】:

我正在尝试使用 Terraform 中的 keys 表达式来获取键列表(从地图变量中)并将其分配给局部变量。这是代码sn-p:

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

【问题讨论】:

    标签: terraform terraform-provider-gcp


    【解决方案1】:

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

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

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

    更新

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

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

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

    【讨论】:

    • 试过了,但得到了这个-error parsing local value "project_name_list" at 29:22: parse error at 1:8: expected expression but found invalid sequence "$"
    • 我需要查看您更新的代码来帮助您。在外部"${}" 中是否有不必要的${}?确保你使用"${keys(var.project_map)}" 而不是"${keys(${var.project_map})}"
    • 我的错,我的表达是 project_name_list = "${keys(${var.project_map})}" 。上面的包装器工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    相关资源
    最近更新 更多