我正在使用Terraform创建实例后尝试创建Filebeat配置文件:
resource "local_file" "greylogIP" {
content = <<EOF
filebeat.inputs:
- type: log
enabled: false
paths:
- /var/log/*.log
filebeat.config.modules:
path: '$'{path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
output.logstash:
hosts: ["${aws_instance.web.public_ip}:5014"]
EOF
filename = "filebeat.conf"
}
我需要传递${aws_instance.web.public_ip}
变量来分配动态IP,但是Terraform还尝试如何插值path: '$'{path.config}/modules.d/*.yml
,这是Filebeat配置的一部分,并引发错误。
如何将path: '$'{path.config}/modules.d/*.yml
作为字符串传递?
答案 0 :(得分:1)
您需要用双倍的美元(errorMap
)转义一个真实的美元($
)。
interpolation documentation涵盖了这一点:
您可以使用带有双美元符号的插值进行转义:$$ {foo}将呈现为文字$ {foo}。
在template docs中有进一步的提及:
重要提示:内联模板中的模板变量(例如上面的consul_address)必须使用双$进行转义。在执行模板之前,Terraform将正常处理未转义的插值。