我目前正在使用template_file
将user_data
设置为aws_launch_configuration
,如下所示:
resource "aws_launch_configuration" "launch_config" {
...
user_data = "${data.template_file.init.rendered}"
}
data "template_file" "init" {
template = "${file("router-init.sh.tpl")}"
vars {
hub_ip_addresses = "${join(",", aws_instance.gridHub.*.private_ip)}"
}
}
我将一个变量(即hub_ip_addresses)输入到router-init.sh.tpl
文件中,在这个文件中,我正在使用这样的参数:
`#!/bin/sh
...
IFS=',' read -r -a array <<< "$hub_ip_addresses"
for element in "${array[@]}"
do
#do stuff with $element
done
基本上,我是基于分隔符拆分字符串,然后循环遍历数组中的每个ip地址。
当我在本地计算机上运行它时,这个bash脚本运行正常 - 但是,当terraform执行它时,它会抛出一个错误:
* data.template_file.init: data.template_file.init: failed to render : parse error at 13:25: expected expression but found invalid sequence "@"
我认为'@'符号导致问题。有这样的原因吗?我需要用'\'来逃避吗?
编辑:不确定是否与此问题相关,但在bash脚本的前一行IFS=',' read -r -a array <<< "$hub_ip_addresses"
中,<<<
似乎导致其他所有内容看起来好像在里面评论(即灰色,好像它在引号'
内)。)
答案 0 :(得分:1)
您需要将模板中的$
字符加倍,或者Terraform会尝试将它们作为模板的输入变量进行插值。
template docs cover this briefly虽然给出的示例是内联模板而不是所有模板,包括那些使用file()
function加载的模板。
类似于:
#!/bin/sh
...
IFS=',' read -r -a array <<< "$hub_ip_addresses"
for element in "$${array[@]}"
do
#do stuff with $$element
done