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

如何通过Terraform输出远端机器执行命令的返回结果

Terraform remote-exec 命令结果输出到Output的实现方案

remote-exec provisioner本身没有内置的返回值字段,你可以通过「远程执行写入结果 -> 拉取结果到本地 -> 读取结果输出」的链路实现需求,两种常用落地方式如下:


方案1:搭配terraform_data + local_file实现(适配复杂远程执行场景)

适合需要先执行多步安装、配置再获取最终结果的场景,示例代码如下:

# 替换为你实际使用的云主机/物理机资源定义
resource "aws_instance" "demo_server" {
  # 你的主机配置逻辑
}

# 执行远程命令并拉取结果到本地
resource "terraform_data" "exec_remote_cmd" {
  triggers = {
    server_ip = aws_instance.demo_server.public_ip
  }

  # 远程执行目标命令,写入结果到远端临时文件
  provisioner "remote-exec" {
    connection {
      type        = "ssh"
      user        = "ubuntu"
      private_key = file("~/.ssh/id_rsa")
      host        = self.triggers.server_ip
    }
    inline = [
      # 替换为你实际要执行的命令,这里以获取系统版本为例
      "cat /etc/os-release > /tmp/tf_cmd_result.tmp"
    ]
  }

  # 将远端结果文件拉取到本地
  provisioner "local-exec" {
    command = "scp -o StrictHostKeyChecking=no ubuntu@${self.triggers.server_ip}:/tmp/tf_cmd_result.tmp ./tf_local_cmd_result.tmp"
  }
}

# 读取本地存储的命令结果
data "local_file" "cmd_output" {
  depends_on = [terraform_data.exec_remote_cmd]
  filename   = "./tf_local_cmd_result.tmp"
}

# 定义output输出结果
output "remote_exec_result" {
  value = trimspace(data.local_file.cmd_output.content)
}

方案2:使用external数据源直接获取结果(适配单步命令场景)

如果只需要执行单条命令拿结果,可以跳过remote-exec,直接用external数据源通过ssh执行命令获取返回值,示例如下:

resource "aws_instance" "demo_server" {
  # 你的主机配置逻辑
}

data "external" "get_remote_result" {
  program = ["bash", "-c", <<EOT
    # 执行ssh远程命令,将结果包装为json格式返回给Terraform
    ssh -o StrictHostKeyChecking=no ubuntu@${aws_instance.demo_server.public_ip} "cat /etc/os-release" | jq -R -s -c '{"output": .}'
  EOT
  ]
}

output "remote_exec_result" {
  value = trimspace(data.external.get_remote_result.result.output)
}

注意事项

  • 两种方案都要求执行Terraform的本地环境与目标主机之间SSH网络连通、权限正常
  • 如果命令返回结构化数据,建议提前格式化为JSON,方便后续在Terraform中直接引用对应字段
  • 优先使用云厂商官方数据源获取主机属性,仅当需要自定义命令执行结果时使用上述方案,避免破坏Terraform的声明式特性

内容的提问来源于stack exchange,提问作者cloudops

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:04