2017-05-10 80 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)}"