【发布时间】:2019-12-21 02:00:00
【问题描述】:
在 terraform 0.12 中,有一个 templatefile 函数,但我还没有弄清楚将非平凡映射作为第二个参数传递给它并使用远程执行的结果作为新创建实例的配置步骤的语法。
这是我正在尝试做的事情的要点,尽管它不能正确解析,因为不能只在名为 scriptstr 的资源块中创建一个局部变量。
虽然我真的在尝试获取要在远程端执行的模板文件调用的输出,但一旦供应商可以通过 ssh 连接到机器,到目前为止,我已经走上了尝试获取模板文件调用的道路通过 local-exec 配置器将输出写入本地文件。可能很容易,我只是没有找到文档或示例来理解必要的语法。 TIA
resource "aws_instance" "server" {
count = "${var.servers}"
ami = "${local.ami}"
instance_type = "${var.instance_type}"
key_name = "${local.key_name}"
subnet_id = "${element(aws_subnet.consul.*.id, count.index)}"
iam_instance_profile = "${aws_iam_instance_profile.consul-join.name}"
vpc_security_group_ids = ["${aws_security_group.consul.id}"]
ebs_block_device {
device_name = "/dev/sda1"
volume_size = 2
}
tags = "${map(
"Name", "${var.namespace}-server-${count.index}",
var.consul_join_tag_key, var.consul_join_tag_value
)}"
scriptstr = templatefile("${path.module}/templates/consul.sh.tpl",
{
consul_version = "${local.consul_version}"
config = <<EOF
"bootstrap_expect": ${var.servers},
"node_name": "${var.namespace}-server-${count.index}",
"retry_join": ["provider=aws tag_key=${var.consul_join_tag_key} tag_value=${var.consul_join_tag_value}"],
"server": true
EOF
})
provisioner "local-exec" {
command = "echo ${scriptstr} > ${var.namespace}-server-${count.index}.init.sh"
}
provisioner "remote-exec" {
script = "${var.namespace}-server-${count.index}.init.sh"
connection {
type = "ssh"
user = "clear"
private_key = file("${local.private_key_file}")
}
}
}
【问题讨论】:
-
你为什么要在那里而不是在本地呢?我不知道它是否会像在本地一样工作,但很困惑你为什么要尝试目前的方法。
-
猜我不知道如何在资源中创建本地。全局本地将无权访问资源的 count.index。
标签: terraform