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