You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform引用独立文件配置Cloud-init写入VM文件?

解决方案

有两种简便的实现方式,直接用Terraform内置函数就能搞定:

方法一:使用模板文件渲染

  1. 把原有的userdata_file改成模板文件(比如命名为userdata.tpl),用变量占位符替代硬编码的内容:
write_files:
  - path: A
    content: |
      ${file_content}

# some other stuff ...
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:09:59