【发布时间】:2018-12-10 19:53:30
【问题描述】:
我想监视一个文件目录,如果其中一个文件发生更改,则重新上传并运行其他一些任务。我之前的解决方案涉及监控单个文件,但这很容易出错,因为某些文件可能会被遗忘:
resource "null_resource" "deploy_files" {
triggers = {
file1 = "${sha1(file("my-dir/file1"))}"
file2 = "${sha1(file("my-dir/file2"))}"
file3 = "${sha1(file("my-dir/file3"))}"
# have I forgotten one?
}
# Copy files then run a remote script.
provisioner "file" { ... }
provisioner "remote-exec: { ... }
}
我的下一个解决方案是在一个资源中获取目录结构的哈希,并在第二个资源中使用此哈希作为触发器:
resource "null_resource" "watch_dir" {
triggers = {
always = "${uuid()}"
}
provisioner "local-exec" {
command = "find my-dir -type f -print0 | xargs -0 sha1sum | sha1sum > mydir-checksum"
}
}
resource "null_resource" "deploy_files" {
triggers = {
file1 = "${sha1(file("mydir-checksum"))}"
}
# Copy files then run a remote script.
provisioner "file" { ... }
provisioner "remote-exec: { ... }
}
这可以正常工作,除了对mydir-checksum 的更改仅在第一个apply 之后被拾取。所以我需要apply 两次,这不是很好。这有点杂乱无章。
我找不到更明显的方法来监视整个目录的内容更改。有标准的方法吗?
【问题讨论】:
-
使用
make生成哈希然后将其用作触发器?因为我不知道任何其他解决方案。find my-dir -type f -exec sha1sum +也应该更快。 -
您的意思是
make作为在 terraform 之前运行的外部脚本? -
这是一个有趣的问题,我从来没有以这种方式使用过 Terraform。但我想知道这是否只是 Terraform 没有做的事情——它管理基础设施;文件系统处理似乎是二等公民。我可能会建议这是你想要一个围绕 Terraform 的包装脚本来塑造它以满足你的需要的地方。
-
@Joe 是的。您可以让
make任务检查并为您的目录生成 sum 文件,然后使用该文件内容作为触发器。 -
谢谢两位。同意,这不是直接支持的事实可能是一个提示。但是有很多例子涉及观看文件和观看文件目录并没有什么不同。有问题的文件是 Docker Stack 部署文件和支持配置,我认为这些文件属于 Terraform 领域。
标签: terraform