如何在terraform模板文件中追加索引号

如何在terraform模板文件中追加索引号,terraform,terraform-template-file,Terraform,Terraform Template File,我正在使用terraform模板从terraform准备一个ansible清单文件 slave-01 ansible_host=x.x.x.x slave-02 ansible_host=x.x.x.x 所以在这里,我无法根据该资源的ip地址数附加数字01,02…等等 我的模板文件是什么;I’我的努力如下 %{ for index,ip in test_slaves ~} slave-[index] ansible_host=${ip} %{ endfor ~} 我的资源文件是 resour

我正在使用terraform模板从terraform准备一个ansible清单文件

slave-01 ansible_host=x.x.x.x
slave-02 ansible_host=x.x.x.x
所以在这里,我无法根据该资源的ip地址数附加数字01,02…等等

我的模板文件是什么;I’我的努力如下

%{ for index,ip in test_slaves ~}
slave-[index] ansible_host=${ip}
%{ endfor ~}
我的资源文件是

resource "local_file" "hosts_cfg" {
  content = templatefile("${path.module}/templates/hosts.tpl",
    {
      test_slaves  = aws_instance.test-slaves.*.public_ip
    }
  )
  filename = "${path.module}/hosts.cfg"
}

请指导我如何处理此问题?

正如您所看到的
ip
值,您可以使用模板插值将动态字符串插入到模板输出中

然而,在您的例子中,您有一个数字,并且希望它的格式与Terraform在将数字转换为字符串时默认的格式不同:您希望它是零填充的,始终有两个十进制数字(我假设!)

对于Terraform的自定义数字格式,它允许您使用格式字符串来描述Terraform如何显示您的数字。对于数字的十进制表示,我们可以使用
%d
(“d”表示十进制),对于两位数的零填充,我们可以使用
02
前缀,其中
0
表示零填充(而不是空格填充),而
2
表示两位数

把这些放在一起,我们可以通过在插值序列中写入调用,将对
格式的调用作为模板的一部分:

%{ for index, ip in test_slaves ~}
${format("slave-%02d", index + 1)} ansible_host=${ip}
%{ endfor ~}

我在这里将
slave-
前缀作为格式字符串的一部分,这说明
format
函数将直接传递任何不是格式化“动词”(以
%
开头)的字符。您也可以在插值序列之外写入前缀,效果相同。

。在过去的4个小时里,我一直在努力解决这个问题。如果我想从01开始,而不是00,我们可以选择在格式中添加n+1?明白了,索引+1我可以使用是的,
format
的第二个参数可以是任何产生数字的表达式,因此您可以在该位置编写类似于
index+1
的算术表达式。