假设我有一些terraform vars:variable "cluster" {}
和variable "kfkcount" {}
然后说cluster=test
和kfkcount=3
如何使用terraform将其转换为如下所示的列表?
["test1.c.com", "test2.c.com", "test3.c.com"]
答案 0 :(得分:4)
这应该做您想要的:
variable "cluster" {}
variable "kfkcount" {}
data "template_file" "test" {
template = "$${cluster}$${index}.c.com"
count = "${var.kfkcount}"
vars = {
index = "${count.index + 1}"
cluster = "${var.cluster}"
}
}
output "list" {
value = "${data.template_file.test.*.rendered}"
}
使用template_file
资源有点麻烦,但是它将根据需要返回列表:
$ terraform apply
var.cluster
Enter a value: test
var.kfkcount
Enter a value: 3
data.template_file.test[0]: Refreshing state...
data.template_file.test[1]: Refreshing state...
data.template_file.test[2]: Refreshing state...
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
list = [
test1.c.com,
test2.c.com,
test3.c.com
]
答案 1 :(得分:1)
修改强>
可以帮助的一件事是使用count进行循环,并使用count.index
作为名称的值。
所以你最终会得到这样的东西:
resource ".." "..." {
count = "${var.kfkcount}"
something = "${var.cluster}${count.index}.c.com"
}
甚至one example显示了简单的计数用法,还有*
列表扩展。
您是否尝试过使用Interpolation Syntax页面中描述的list(items, ...)
?
之类的东西
"${list("${var.cluster}", "${var.kfkcount}")}"