0

我希望将变量传递给新创建的 aws_instance 上的脚本,但我不确定如何。这是我所拥有的:

provisioner "file" {
    source      = "${path.module}/scripts/slave-provisioner.sh"
    destination = "/tmp/slave-provisioner.sh"
}

provisioner "remote-exec" {
    inline = [
        "chmod +x /tmp/slave-provisioner.sh",
        "sudo /tmp/slave-provisioner.sh ${split(",",var.zookeeper_ips_list)}"
    ]
}

我已经验证 zookeeper_ips_list 具有正确的 IP 列表。

我通过 terraform apply 得到的错误是:

 /tmp/terraform_939984059.sh: 5: /tmp/terraform_939984059.sh: 10.239.12.181: not found

所以基本上我想创建这台机器,然后启动我的配置程序脚本,该脚本通过了一个 IP 列表,以便它可以进行配置。

4

2 回答 2

1

希望您使用最新版本运行 terraform。

似乎 terraform 获取了 variable 的值var.zookeeper_ips_list,但是双引号中的双引号会造成麻烦。您可以尝试通过 来逃避它们\,我没有尝试代码,请告诉我结果

"sudo /tmp/slave-provisioner.sh ${split(\",\",var.zookeeper_ips_list)}"

你可以把它拿出来,也让我知道结果。

zookeeper_ips_list = ${split(",",var.zookeeper_ips_list)}

provisioner "remote-exec" {
    inline = [
        "chmod +x /tmp/slave-provisioner.sh",
        "sudo /tmp/slave-provisioner.sh ${zookeeper_ips_list)}"
    ]
于 2016-06-28T03:11:20.173 回答
1

这是通过一些不相关的 bash 清理解决的。Terraform 的格式正确,并且按预期运行。我们没有在 bash 脚本中正确处理传入的 IP 地址,因此它失败了。

在调试方面,Terraform 并不是最强大的,所以追踪起来有点棘手。

于 2016-06-30T13:58:52.890 回答