如何基于local_file变更触发Terraform local_exec provisioner条件执行
实现方案
你可以直接借助local_file资源的内置内容校验值属性实现需求,不需要依赖时间戳或文件修改时间这类不稳定的参数。local_file资源默认会输出多种内容哈希属性,只要文件实际写入内容发生变更,这些属性值就会同步更新,将其绑定到null_resource的triggers字段,即可实现仅内容变更时触发执行逻辑。
修改后的配置参考如下:
resource "local_file" "foo" { content = var.foobar filename = "/tmp/foobar.txt" } resource "null_resource" "null" { triggers = { # 绑定local_file的内容SHA256哈希,仅哈希值变化时才会触发null_resource重建 file_content_hash = local_file.foo.content_base64sha256 } provisioner "local-exec" { command = "/tmp/somescript.py" } }
补充说明
- Terraform 0.14版本完全支持上述配置,如果你偏好其他校验算法,也可以将
content_base64sha256替换为content_md5、content_sha1等同源校验属性,效果一致。 - 不建议使用文件最后更新时间戳作为触发条件,文件系统缓存、权限变更、Terraform执行时机差异都可能导致时间戳读取异常,出现预期外的触发或漏触发,直接使用local_file内置的内容校验值是最稳定的方案。
- 该配置下只有当
var.foobar变量变化、导致local_file实际写入内容变更时,才会触发local_exec执行,不会出现每次执行都触发、或者仅首次执行的问题。
内容的提问来源于stack exchange,提问作者arjen_iw
相关产品推荐
相关产品推荐

