Templates 模板文件中的循环或选择运算符

Templates 模板文件中的循环或选择运算符,templates,terraform,operation,Templates,Terraform,Operation,遇到了这样的问题。我不知道如何创建这种类型的temlate\u文件: [master] ser1 ansible_主机=10.0.0.1 ser2 ansible_主机=10.0.0.2 以便根据更改生成名称和地址。 我在date.tf中使用标准构造: data "template_file" "inventory" { count = length(var.domains) template = file("inventory.tpl") vars = { master_ip = join("

遇到了这样的问题。我不知道如何创建这种类型的temlate\u文件:

[master]
ser1 ansible_主机=10.0.0.1
ser2 ansible_主机=10.0.0.2

以便根据更改生成名称和地址。 我在date.tf中使用标准构造:

data "template_file" "inventory" {
count = length(var.domains)
template = file("inventory.tpl")
vars = {
master_ip = join("\n", hcloud_server.rebrain_quest.*.ipv4_address)
key_path = var.privat_key
}
}
但这里我只能生成我的地址

[master]
10.0.0.1
10.0.0.2

你可能需要这样的方法,但我没有任何结果:

master_ip = join(";", [hcloud_server.rebrain_quest.*.name, ansible_host=, hcloud_server.rebrain_quest.*.ipv4_address])
我有地形版本v0.12.24

地形:

data "template_file" "inventory" {
  count    = length(var.domains)
  template = file("inventory.tpl")

  vars = {
    hosts = hcloud_server.rebrain_quest
    lines = [
      for h in hcloud_server.rebrain_quest:
    ]
  }
}
模板:

[master]
%{ for h in hosts ~}
${h.name} ansible_host=${h.ipv4_address}
%{ endfor ~}

<>但请考虑使用TrRAFRANT(有很多),使用或使用ad-hoc H云发现通过

< P>因为你正在使用TyrFrase0.12,你应该使用而不是<代码> TeMeLeMeField数据源。因为它内置于语言中,而不是由提供者提供,所以它不受数据源的限制,例如强制所有
vars
值都是字符串

locals {
  ansible_inventory = templatefile("${path.module}/inventory.tpl", {
    hosts = hcloud_server.rebrain_quest
  })
}
然后在模板文件中:

[master]
%{ for h in hosts ~}
${h.name} ansible_host=${h.ipv4_address}
%{ endfor ~}
上述模板是中给出的示例的变体


您最初的示例包括
count=var.domains
,但资源配置的其余部分没有提到
count.index
,因此我认为实际上不需要这样做。但是,如果您确实希望根据
var.domains
中的数字创建模板的多个副本,则可以使用以下变体:

locals {
  ansible_inventory = [
    for i in range(var.domains) :
    templatefile("${path.module}/inventory.tpl", {
      hosts = hcloud_server.rebrain_quest
      index = i
    })
  ]
}

这里创建一个从0到
var.domains-1
的整数列表,因此我们可以将该列表与
for
一起使用,以多次重复模板渲染。我向template variables对象添加了
index=I
,这样原则上您可以在模板内部使用
${I}
,以获得与资源块中的
count.index
类似的效果。

谢谢大家的回答,我用一个复杂的表达式解决了这个问题:

master_ip = "${join("\n", [for instance in hcloud_server.rebrain_quest : join("", [instance.name, " ansible_host=", instance.ipv4_address])] )}"