根据变量生成字符串列表

时间:2017-12-22 20:21:11

标签: terraform

假设我有一些terraform vars:variable "cluster" {}variable "kfkcount" {}

然后说cluster=testkfkcount=3

如何使用terraform将其转换为如下所示的列表?

["test1.c.com", "test2.c.com", "test3.c.com"]

2 个答案:

答案 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}")}"