Używam ściśnięcia Debiana z PostgreSQL 9.1 z backportów. Puppet ma wersję 2.7.14. Niestety skrypt inicjujący zwraca zły kod wyjścia dla statusu. Dlatego napisałem niestandardowe status
polecenie, aby wykryć, czy postgresql działa, czy nie.
service { 'postgresql':
ensure => running,
enable => true,
hasstatus => false,
hasrestart => true,
status => "pg_lsclusters -h | awk 'BEGIN {rc=0} {if ($4 != \"online\") rc=3} END { exit rc }'",
provider => debian,
}
Moje polecenie działa jak czar, ale wydaje się, że marionetka ma problem. Zawsze dostaję, notice: /Stage[main]/Postgresql/Service[postgresql]/ensure: ensure changed 'stopped' to 'running'
chociaż już działa.
Więc wypróbowałem następujące:
service { 'postgresql':
ensure => running,
enable => true,
hasstatus => false,
hasrestart => true,
status => "exit 0",
provider => debian,
}
Jak rozumiem to niestandardowe status
polecenie, marionetka powinna zawsze myśleć, że działa postgresql. Niemniej jednak marionetka próbuje za każdym razem rozpocząć postgresql.
Co jest moją winą? Czy jest to błąd w marionetce?
status
polecenie kukiełki działa zgodnie z oczekiwaniami!
provider => init
(i usunąćenable
parametr).