【问题标题】:Convert string or array to map in Terraform?将字符串或数组转换为 Terraform 中的映射?
【发布时间】:2019-06-14 19:05:14
【问题描述】:

Terraform v0.10.7 AWS 提供商版本 = "~> 1.54.0"

是否有任何示例如何在 Terraform 中将字符串或列表转换为地图?

我们正在像这样设置 Consul 键/值存储:

consul kv put common/rules/alb/service1 name=service1,port=80,hcproto=http,hcport=80

我可以正确访问键和值,现在我正在尝试将值用作 Terraform 中的地图:

data "consul_key_prefix" "common" {
  path_prefix = "common/rules"
}

output "common"{
value = "${jsonencode(lookup(var.CommonRules,element(keys(var.CommonRules),1))) }"
}

$ terraform 输出

common = "{name=service1,port=80,hcproto=http,hcport=80}"

但是当我尝试将其作为地图访问时,它不起作用:

output "common"{
value = "${lookup(jsonencode(lookup(var.CommonRules,element(keys(var.CommonRules),1))),"name") }"
}

$ terraform 输出

(没有回应)

我在这里尝试了一些东西 - 例如。拆分这些值并再次将它们加入一个列表,然后运行“地图”功能,但它也不起作用:

$ terraform 输出

common = [
    name,
    service1,
    port,
    80,
    hcproto,
    http,
    hcport,
    80
]

然后尝试创建该列表的地图:

output "common2" {
value = "${map(split(",",join(",",split("=",lookup(var.CommonRules,element(keys(var.CommonRules),1))))))}"
}

但它也不起作用。

所以我的问题是 - 有没有人有他将字符串(或列表)翻译成地图的工作示例?

提前致谢。

【问题讨论】:

  • 您是否尝试过使用this question 中定义的external 数据源。看起来如果您在 external 数据源中 echo 输出来自 consul_key_prefix 数据源的输出,则其输出将是基于其 json 输出的映射。
  • 是的,它可以与外部数据源一起使用,谢谢,但是对于这个我想看看是否有任何方法可以只使用 Terraform,但看起来 Terraform

标签: terraform terraform-provider-aws


【解决方案1】:

即将推出的 Terraform 中的jsondecode 函数v0.12 将成为解决此问题的工具。

jsondecode function github issue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-30
    • 2021-10-03
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多