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

Terraform如何确保locals块在local-exec资源执行完成后再运行

解决方案

方案1:使用external数据源(官方推荐,无需中间文件)

Terraform内置的external数据源专门用于调用外部程序获取结构化返回值,天然满足「先执行程序、后读取结果」的执行顺序,完全避免显式依赖配置和中间文件读写。
要求你的myscript.py直接将JSON结果输出到标准输出(无需重定向到文件),示例配置如下:

data "external" "get_data_plane_ip" {
  # 指定要执行的命令,按数组格式拆分参数
  program = ["python", "${path.module}/myscript.py"]

  # 若需要每次apply都强制重新执行脚本,添加该行(和原triggers逻辑一致)
  query = {
    always_run = timestamp()
  }
}

locals {
  # 直接取external数据源的返回结果,已经是解析后的结构化对象,无需手动jsondecode
  var1 = data.external.get_data_plane_ip.result
}

方案2:保留原生成文件逻辑,用local_file数据源中转

如果你的脚本逻辑不能修改,必须先生成output.json文件再读取,可以用支持depends_on参数的local_file数据源做中转,建立执行顺序依赖:

resource "null_resource" "get_data_plane_ip" {
  provisioner "local-exec" {
    command = "python myscript.py > ${path.module}/output.json"
  }
  triggers = {
    always_run = timestamp()
  }
}

# 用local_file数据源读取文件,显式指定依赖null_resource执行完成后再读
data "local_file" "output_json" {
  filename = "${path.module}/output.json"
  depends_on = [null_resource.get_data_plane_ip]
}

locals {
  var1 = jsondecode(data.local_file.output_json.content)
}

注意事项

  • 所有文件路径建议用${path.module}拼接,避免Terraform工作目录变化导致找不到文件的问题
  • external数据源要求外部程序的标准输出必须是合法JSON,不能包含日志、调试等额外输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:57:03