Templates 模板文件中的循环或选择运算符
遇到了这样的问题。我不知道如何创建这种类型的temlate\u文件: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("
[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])] )}"