地形远程执行变量传递



我希望将变量传递给新创建的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)}"
    ]
}

我已经验证了zookeper_ips_list有正确的ip列表。

我通过terraform apply得到的错误是:
 /tmp/terraform_939984059.sh: 5: /tmp/terraform_939984059.sh: 10.239.12.181: not found

所以基本上我想创建这台机器,然后踢我的提供程序脚本,它被传递了一个ip列表,这样它就可以做它的配置。

希望您运行的是最新版本的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)}"
    ]

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

当涉及到调试时,Terraform不是最健壮的,所以这有点棘手。

就像下面这样传递变量值,不需要在提供者之前再次声明,直接给出;sudo/tmp/slave- provider .sh $${zookeeper_ips_list}"

最新更新