2017-05-10 46 views
3

如果资源使用count参数指定terraform中的多个资源,则提供一个简单的语法用于为资源实例提供专用字段的列表/数组。将地图列表映射到terraform中的选定字段值列表

例如

aws_subnet.foo.*.id 

由于相当多的版本,可以用一个复杂的结构来声明变量,对地图的例子名单。

variable "data" { 
    type = "list" 
    default = [ 
    { 
     id = "1" 
     ... 
    }, 
    { 
     id = "10" 
     ... 
    } 
    ] 
} 

我正在寻找的可能性做同样为varaibles我能为多资源做:阵列到阵列元件的字段值的数组的投影。

不幸的是

var.data.*.id 

不作为资源的工作。有没有可能做到这一点?

回答

2

在撰写本文时,Terraform的插值语言没有广义投影特征。 “splat语法”是作为资源的特例实现的。

虽然深层结构是可能的,但使用起来并不方便,所以建议仍然保持相对平坦。将来很可能会增加新的语言功能以使这种事情更加可用。

2

template_file可以帮助你。

data "template_file" "data_id" { 
    count = "${length(var.data)}" 
    template = "${lookup(var.data[count.index], "id")}" 
} 

然后,您将得到一个列表"${data.template_file.data_id.*.rendered}",其元素值为“id”。

您可以通过索引这样

"${data.template_file.data_id.*.rendered[0]}" 

或通过功能元素获得其元素()

"${element(data.template_file.data_id.*.rendered, 0)}"