Este é meu script Bash:
#!/bin/bash
#Colors for terminal
#RED
R="\e[31m"
#GREEN
G="\e[32m"
#YELLOW
Y="\e[33m"
#NORMAL
N="\e[0m"
validation(){
if [ $1 -eq 0 ];
then
echo -e "${G}$2 is successful${N}"
else
echo -e "${R}$2 has Failed${N}"
exit 1;
fi
}
echo -e "${Y}Configuring Cart Service${N}"
cart_config="/etc/systemd/system/cart.service"
cat << EOF >$cart_config
Environment=REDIS_HOST="${redis_ip}" #I want TF to only substitute these
Environment=CATALOGUE_HOST="${app_lb_dns}"
Environment=CATALOGUE_PORT=8082
EOF
validation $? "Configuring Cart Service"
Receberei meu endereço IP do Redis e o DNS do balanceador de carga após criá-los no Terraform, e quero passar um script bash como dados do usuário com esses valores substituídos. O problema é que o Terraform tenta substituir todas as variáveis ${}
dentro do script bash, mas eu só quero que ele substitua ${redis_ip}
e ${app_lb_dns}
nos dados do usuário. Tentei escapar todas as variáveis usando \${}
e $${}
, mas sem sucesso.
Erro:
20: user_data = base64encode(templatefile("../userdata/cart.sh", { redis_ip = data.aws_ssm_parameter.redis_ip.value, app_lb_dns = data.aws_ssm_parameter.app_lb_dns.value })) ao chamar templatefile(path, vars) Valor inválido para o parâmetro "vars": o mapa vars não contém a chave "G", referenciado em ../userdata/cart.sh:16,21-22.
Conforme o erro, o TF está tentando substituir uma variável relacionada ao script bash.
Este é meu código Terraform:
user_data = base64encode(templatefile("../userdata/cart.sh", { redis_ip = data.aws_ssm_parameter.redis_ip.value, app_lb_dns = data.aws_ssm_parameter.app_lb_dns.value }))