Terraform template_file与metadata_startup_script变量异常问题
问题原因分析与解决
核心问题:Bash脚本语法错误(缺少闭合的fi)
你的test.sh脚本中第一个if语句没有用fi闭合,导致脚本的条件判断逻辑完全混乱。
原脚本的逻辑结构实际被解析为:
if [ -z $platform ] ; then echo "parameter needed!" # 第二个if被嵌套在第一个if的then块内 if [ -n $platform ] ; then echo "parameter provided!" fi # 第一个if没有fi闭合,bash执行时出现语法解析异常
这种语法错误会让bash的判断逻辑彻底混乱,哪怕platform值为gcp,也会错误触发两个输出语句。
修正与优化建议
- 补充缺失的
fi闭合语句:修正后的脚本如下:
#!/bin/bash #set -e echo "platform:${platform}" if [ -z "$platform" ] ; then echo "parameter needed!" fi # 补充该fi,闭合第一个if判断 if [ -n "$platform" ] ; then echo "parameter provided!" fi
变量引用添加双引号:在
[ ]中引用变量时加上双引号,避免变量为空时出现语法错误(比如[ -z $platform ]在变量为空时会变成[ -z ],而[ -z "" ]才是正确的空值判断写法)。改用互斥的
if-else结构:如果是二选一的判断逻辑,用if-else更清晰,避免冗余判断:
#!/bin/bash #set -e echo "platform:${platform}" if [ -z "$platform" ] ; then echo "parameter needed!" else echo "parameter provided!" fi
变量传递验证说明
从控制台输出platform:gcp可以确认,Terraform的template_file已经正确将变量注入到启动脚本中,变量传递环节没有问题,问题完全出在Bash脚本的语法和逻辑上。
内容的提问来源于stack exchange,提问作者Rubans
相关产品推荐
相关产品推荐

