Potrzebuję tego ...
1. look for changes to /tmp/file-1 file
a. if there is a change, execute in the following order
i. run cmd-3
ii. run cmd-2
iii. run cmd-1
b. If there is NO change to /tmp/file-1 file, do not run anything
Mój kod jest taki ...
exec { "exec-3":
command => "sudo cmd-3",
path => "/usr/local/bin",
require => File["/tmp/file-1"],
}
exec { "exec-2":
command => "sudo cmd-2",
path => "/usr/local/bin",
require => Exec["exec-3"],
}
exec { "exec-1":
command => "sudo cmd-1",
path => "/usr/local/bin",
require => Exec["exec-2"],
subscribe => File["/tmp/file-1"],
refreshonly => true,
}
Ale czy istnieje zmiana na / tmp / file-1 czy nie, cmd-3 i cmd-2 zawsze działają. Jak temu zapobiec? Nie chcę, aby „require” było uruchamiane w exec-1, gdy nie ma zmian w / tmp / file-1.
Odpowiedzi:
4 dla odpowiedzi № 1Potrzebujesz: po pierwsze, aby wszystkie execs subskrybowały zasób pliku; po drugie, aby każdy z nich wymagał także poprzedzających go zasobów exec; i po trzecie, dla każdego exec, który ma być ustawiony refreshonly
.
Oto kod, który to robi:
Exec {
path => "/usr/local/bin",
refreshonly => true,
}
file { "/tmp/file-1":
ensure => file,
content => "file-1-contentn",
}
exec { "exec-1":
command => "sudo cmd-1",
subscribe => File["/tmp/file-1"],
}
exec { "exec-2":
command => "sudo cmd-2",
subscribe => File["/tmp/file-1"],
require => Exec["exec-1"],
}
exec { "exec-3":
command => "sudo cmd-3",
subscribe => File["/tmp/file-1"],
require => Exec["exec-2"],
}
Zwróć uwagę, że zrestartowałem też trochę niepotrzebnej duplikacji, używając domyślnych ustawień zasobów (ref) i zmienił cytowanie według przewodnika stylu (ref).