【问题标题】:Terraform syntax for putting json as value in a map用于将 json 作为值放入地图的 Terraform 语法
【发布时间】:2021-01-31 10:02:59
【问题描述】:

我是 terraform 的新手。我有一个 json 对象,我需要将其设置为 terraform 地图中的值,以便以 json 作为值创建资源。

.tf 文件在该部分中如下所示:

...

      config_overrides = {
        override_1      = "True"
        override_2      = '{"key1":"val1","key2":"val2"}' #this is the json object
    }

...

但是,terraform lint 命令terraform lint -check 在 json 对象上失败。

$ terraform fmt -check

Error: Invalid character

  on myterraform.tf line 28, in resource <<resource name>> :
  28:         override_2 = '{"key1":"val1","key2":"val2"}'

Single quotes are not valid. Use double quotes (") to enclose strings.


Error: Invalid expression

  on myterraform.tf line 28, in resource <<resource name>>:
  28:         override_2 = '{"key1":"val1","key2":"val2"}'

Expected the start of an expression, but found an invalid expression token.

我尝试了许多不同的变体,但无法让 linter 接受它。请指教。

【问题讨论】:

    标签: terraform terraform-provider-gcp


    【解决方案1】:

    您将需要在值 ' 中使用 \ 不起作用。

    config_overrides = {
      override_1 = "True"
      override_2 = "{\"key1\":\"val1\",\"key2\":\"val2\"}"
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用Terraform's jsonencode function,这样 Terraform 自己负责生成 JSON,您只需要担心数据结构:

        override_2 = jsonencode({
          "key1": "val1",
          "key2": "val2",
        })
      

      Terraform 的对象表达式语法恰好与 JSON 的类似,因此这里 jsonencode 的参数看起来很像它将转换为的 JSON 字符串,但这实际上只是一个普通的 Terraform 表达式,因此您可以包含任何Terraform expression constructs 在那里。例如:

        override_2 = jsonencode({
          "key1": "val1",
          "key2": var.any_variable,
        })
      

      【讨论】:

        猜你喜欢
        • 2018-02-12
        • 1970-01-01
        • 2022-08-20
        • 1970-01-01
        • 2020-10-17
        • 2022-01-09
        • 2019-12-07
        • 1970-01-01
        • 2018-06-22
        相关资源
        最近更新 更多