是否可以从Terraform的列表中选择一系列元素?
例如-如果我们有:
[a, bb, ccc, dddd, eeeee]
如何选择前三个元素?
a, bb, ccc
然后是第4和第5个元素?
dddd, eeeee
答案 0 :(得分:2)
要查找的列表子集通常称为切片。 Terraform为此提供了一个内置功能,称为slice
,自0.8.8版本开始可用。您正在寻找
slice(<put_reference_to_list_here, 0, 3)
slice(<put_reference_to_list_here, 3, 5)
从文档中:
slice(list,from,to)-返回介于from(包括)和to(不包括)之间的列表部分。
最显着的是slice
对to
参数很挑剔,该参数必须小于或等于列表的长度,否则TF会抱怨。
这些fromIndex,toIndex
界面对我而言并不直观,因此我开始保留我(必须)使用的每种语言的代码片段。这是我的Terraform助手:
variable "mylist" { default = [ 101, 102, 103, 104, 105 ] }
locals{
everything = "${slice(var.mylist, 0 , length(var.mylist) )}"
butlast = "${slice(var.mylist, 0 , length(var.mylist)-1)}"
thelast = "${slice(var.mylist, length(var.mylist)-1, length(var.mylist) )}"
}
data "null_data_source" "slices" {
inputs {
everything = "${join(",",local.everything)}"
butlast = "${join(",",local.butlast)}"
thelast = "${join(",",local.thelast)}"
}
}
output "slices" {
value = "${data.null_data_source.slices.outputs}"
}
为您节省terraform init; terraform refresh
的精力:
data.null_data_source.slices: Refreshing state...
Outputs:
slices = {
butlast = 101,102,103,104
everything = 101,102,103,104,105
thelast = 105
}
答案 1 :(得分:0)
使用slice function。该页面描述了您可以使用的完整表达语言。
根据该列表的来源,您可能会发现将其拆分为源更加方便。例如,与其声明5个aws_instance
资源,然后尝试以这种方式对它们的输出进行切片,不如分别有两个分别声明3个实例和2个实例的aws_instance
声明,然后处理整个输出列表。>