如何让Terraform的cloudinit_config数据源调用本地用户数据脚本?
解决方法
你可以直接用Terraform内置的file()函数读取本地userdata.sh脚本的内容,替换掉原来内联的脚本代码,就能实现直接引用本地脚本的需求。
修改后的main.tf配置
data "cloudinit_config" "example" { gzip = false base64_encode = true part { content_type = "text/x-shellscript" filename = "/var/atlassian/application-data/jira/example.sh" content = file("${path.module}/userdata.sh") } }
补充说明
${path.module}是Terraform内置变量,指向当前模块所在目录,能确保脚本路径的准确性,避免因执行目录不同导致找不到文件的问题。- 如果
userdata.sh和main.tf在同一目录下,直接写file("userdata.sh")也能生效,但更推荐用${path.module}来保证路径可靠性。 - 要是你的脚本需要动态替换变量,可以改用
templatefile()函数,示例写法:content = templatefile("${path.module}/userdata.sh", { var1 = value1, var2 = value2 }),同时在userdata.sh里用${var1}的形式引用变量。
内容的提问来源于stack exchange,提问作者Legion_of_boom__
相关产品推荐
相关产品推荐

