/ / Łańcuszek kukiełkowy - marionetka

Kombinacja lalkowa - marionetka

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 № 1

Potrzebujesz: 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).