如何引用由null_resource local-exec生成的JSON文件?Terraform求助
解决Terraform中无法引用local-exec生成文件的问题
你的报错核心原因是:file()函数在Terraform**规划阶段(plan)**就会执行,这时候null_resource还没运行,DO_template.json文件根本不存在,所以会报错。另外Terraform的设计原则是声明式操作,不推荐通过本地命令生成文件再读取的方式传递数据,以下是两种可行的解决方案:
方案1:直接传递数据(推荐)
既然你生成文件的内容来自module.bigip.onboard_do,完全可以跳过生成文件的步骤,直接把这个值传给bigip_do资源:
# 删除原来的null_resource.clusterDO resource "bigip_do" "do-example" { do_json = module.bigip.onboard_do timeout = 120 depends_on = [module.bigip_module] }
这种方式不需要创建中间文件,避免了文件操作带来的依赖问题,完全符合Terraform的工作流程。
方案2:用local_file资源生成文件并引用
如果确实需要保留DO_template.json文件(比如供其他工具使用),可以用local_file资源替代null_resource,通过资源属性获取内容:
resource "local_file" "clusterDO" { content = module.bigip.onboard_do filename = "DO_template.json" depends_on = [module.bigip.onboard_do] } resource "bigip_do" "do-example" { do_json = local_file.clusterDO.content timeout = 120 depends_on = [module.bigip_module, local_file.clusterDO] }
local_file是Terraform官方提供的资源,它的content属性会在文件生成后被正确记录,bigip_do直接引用这个属性就能拿到最新的内容,不会出现文件不存在的问题。
内容的提问来源于stack exchange,提问作者Krasnii
相关产品推荐
相关产品推荐

