Я хочу отслеживать каталог файлов и, если один из них изменяется, повторно загружать и запускать некоторые другие задачи. Мое предыдущее решение включало мониторинг отдельных файлов, но это подвержено ошибкам, так как некоторые файлы могут быть забыты:
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
дважды, что не здорово. Это что-то вроде клуджа.
Я не вижу более очевидного способа отслеживания изменений в содержимом всего каталога. Есть ли стандартный способ сделать это?