如何通过Terraform引用独立文件配置Cloud-init写入VM文件?
解决方案
有两种简便的实现方式,直接用Terraform内置函数就能搞定:
方法一:使用模板文件渲染
- 把原有的
userdata_file改成模板文件(比如命名为userdata.tpl),用变量占位符替代硬编码的内容:
write_files: - path: A content: | ${file_content} # some other stuff ...
- 在Terraform资源配置中,用
templatefile函数读取模板,并传入独立文件A的内容作为变量:
resource "openstack_compute_instance_v2" "VM" { name = "VM1" user_data = templatefile("userdata.tpl", { file_content = file("A") }) }
方法二:直接用Heredoc拼接内容
如果不想额外维护模板文件,也可以直接在Terraform代码里用Heredoc格式拼接user_data,直接插入文件A的内容:
resource "openstack_compute_instance_v2" "VM" { name = "VM1" user_data = <<EOF write_files: - path: A content: | ${file("A")} # some other stuff ... EOF }
两种方法的核心逻辑都是利用Terraform的file()函数读取本地文件A的内容,再将其注入到Cloud-init配置中,最终Cloud-init会把内容写入到VM内的路径A。
内容的提问来源于stack exchange,提问作者Chirlo
相关产品推荐
相关产品推荐

