Ansible Terraform本地执行供应器中的转义字符

Ansible Terraform本地执行供应器中的转义字符,ansible,terraform,Ansible,Terraform,我想使用localexecprovisioner链接Terraform和Ansible 然而,由于这需要从地形输入到Ansible,我只能使用以下复杂命令: provisioner "local-exec" { command = 'sleep 60; ansible-playbook -i ../ansible/inventory/ ../ansible/playbooks/site.yml --extra-vars "rancher_server_rds_endpoint="

我想使用
localexec
provisioner链接Terraform和Ansible

然而,由于这需要从地形输入到Ansible,我只能使用以下复杂命令:

provisioner "local-exec" {
        command = 'sleep 60; ansible-playbook -i ../ansible/inventory/ ../ansible/playbooks/site.yml --extra-vars "rancher_server_rds_endpoint="${aws_db_instance.my-server-rds.endpoint}" rancher_server_elastic_ip="${aws_eip.my-server-eip.public_ip}""'
    }
它不断地回来

非法字符

错误

有没有关于正确逃跑的建议

如果直接在shell中运行
ansible playbook
命令,则该命令将是:

ansible-playbook -i inventory playbooks/site.yml --extra-vars "my_server_rds_endpoint=my-server-db.d30ikkj222.us-west-1.rds.amazonaws.com rancher_server_elastic_ip=88.148.17.236"
(路径不同)

指出:

字符串用双引号括起来

因此,您需要将单引号替换为双引号,然后在其中转义引号,例如:

provisioner "local-exec" {
  command = "sleep 60; ansible-playbook -i ../ansible/inventory/ ../ansible/playbooks/site.yml --extra-vars \"rancher_server_rds_endpoint='${aws_db_instance.my-server-rds.endpoint}' rancher_server_elastic_ip='${aws_eip.my-server-eip.public_ip}'\""
}