Terraform file Provisioner
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| ID | Identifier | 标识符 |
| SCP | Secure Copy Protocol | 安全复制协议,用于远程传输文件 |
| SSH | Secure Shell | 安全远程登录协议 |
| WinRM | Windows Remote Management | Windows 远程管理 |
用途#
通过 SSH / WinRM 将执行端的文件或目录上传到目标机器。与管理本地文件的 Local provider 不同。
示例#
需要 Terraform 1.4+、可访问的 Linux 主机和已加载密钥的 SSH agent。远端需支持 SCP,连接用户需有 /tmp 写权限。将待上传文件保存为 app.conf,与 main.tf 放在同一目录。
terraform {
required_version = ">= 1.4.0"
}
variable "host" {
type = string
}
variable "ssh_user" {
type = string
}
variable "ssh_host_key" {
type = string
}
resource "terraform_data" "config" {
triggers_replace = [var.host, filesha256("${path.module}/app.conf")]
connection {
type = "ssh"
host = var.host
user = var.ssh_user
agent = true
host_key = var.ssh_host_key
timeout = "5m"
}
provisioner "file" {
source = "${path.module}/app.conf"
destination = "/tmp/app.conf"
}
}在 terraform.tfvars 设置 host、ssh_user、可信渠道取得的 ssh_host_key,执行 terraform init、terraform plan,审查后 terraform apply。文件内容变化会触发资源替换并重新上传。
注意事项#
source与content二选一:前者传文件或目录,后者直接传字符串。- SSH 目录上传前需确保目标目录存在;
source = "conf"会复制目录本身,source = "conf/"复制目录内的内容。 - 上传不会自动获得 sudo 权限;受限目录可先上传到临时位置,再由后续
remote-exec安装并设置权限。 - 主机由 Terraform 创建时,应引用其地址,并将主机 ID 加入触发条件,覆盖地址不变的主机替换。
- 不持续检查远端文件漂移;销毁
terraform_data也不会自动删除上传的文件。