在Terraform中从CSV构造地图列表

时间:2018-08-16 15:52:05

标签: terraform

我有以下变量

variable "whitelisted_ips" {   
    default = "xx.xxx.xx.x/21,xxx.xx.xxx.x/20"
}

在一些需要使用CIDRS列表的地方使用以下

cidr_blocks = ["${split(",", var.whitelisted_ips)}"]

一切正常。

我想重用这些值,并得到以下结构(表示为JSON以使您有所了解)

waf_ips = [
    { value = "xx.xxx.xx.x/21", type="IPV4"},
    { value = "xxx.xx.xxx.x/20", type="IPV4"},
]

所以我想从字符串创建一个地图列表(IPV4是硬编码的,并在每一行重复)。

如果我将当前的JSON馈送到aws_waf_rule并将其视为列表,则它会成功,但是我宁愿不重复tfvars文件中的数据,因为它是相同的,并且我想重用该字符串分隔的列表。

1 个答案:

答案 0 :(得分:0)

好吧,了解了更多的知识之后,事实证明您可以使用用于静态数据的空资源来做到这一点。

locals {
  cidr_blocks = ["xxx.xxx.xxx/23", "xxx.xxx.xxx/23", "xxx.xxx.xxx/23"]
}

resource "null_resource" "cidr_map_to_protocol" {
  count = "${length(local.cidr_blocks)}"

  triggers {
    value     = "${element(local.cidr_blocks, count.index)}"
    type      = "IPV4"
  }
}

output "mapped_cidr_to_protocol" {
  value = "${null_resource.cidr_map_to_protocol.*.triggers}"
}

不幸的是,这不适用于计算资源。