Terraform remote-exec变量传递

时间:2016-06-28 02:03:09

标签: terraform

我希望将变量传递给新创建的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应用得到的错误是:

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

所以基本上我想要创建这台机器,然后我的配置文件脚本会传递一个IP列表,以便它可以进行配置。

2 个答案:

答案 0 :(得分:1)

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

Terraform在调试时并不是最强大的,所以追踪这一点有点棘手。

答案 1 :(得分:0)

希望你用最新版本运行terraform。

似乎terraform获取变量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)}"
    ]