Saya menggunakan debian squeeze dengan PostgreSQL 9.1 dari backports. Wayang memiliki versi 2.7.14. Sayangnya skrip init mengembalikan kode keluar yang salah untuk status. Karena itu saya menulis status
perintah khusus untuk mendeteksi apakah postgresql berjalan atau tidak.
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,
}
Perintah saya bekerja seperti mantra, tetapi wayang tampaknya memiliki masalah. Saya selalu mendapatkan notice: /Stage[main]/Postgresql/Service[postgresql]/ensure: ensure changed 'stopped' to 'running'
meskipun sudah berjalan.
Jadi coba yang berikut ini:
service { 'postgresql':
ensure => running,
enable => true,
hasstatus => false,
hasrestart => true,
status => "exit 0",
provider => debian,
}
Seperti yang saya pahami status
perintah khusus ini , boneka harus selalu berpikir bahwa postgresql sedang berjalan. Namun demikian wayang mencoba memulai postgresql - setiap saat.
Apa kesalahanku? Atau itu bug di boneka?
debian
postgresql
puppet
debian-squeeze
Lebih lagi
sumber
sumber
provider => init
(dan menghapusenable
parameter).status
perintah wayang bekerja seperti yang diharapkan!Jawaban:
Dugaan terbaik saya adalah bahwa
$4
perintah Anda sedang ditelan oleh interpolasi boneka itu sendiri dan ituexit 0
tidak berfungsi dengan baik karena masalah interaksi shell.Saya akan mencoba beberapa hal.
$4
dalam perintah Anda lolos$
seperti itu:status => "pg_lsclusters -h | awk 'BEGIN {rc=0} {if (\$4 != \"online\") rc=3} END { exit rc }'"
(kadang-kadang lebih banyak backslash diperlukan, tapi saya cukup yakin 1 sudah cukup di sini).exit
adalah cangkang internal dan saya tidak yakin bagaimana boneka akan memperlakukan itu. Jadi gunakan perintah kan "kembali sukses" sebagai gantinya:status => "/bin/true"
Mungkin
status
sedang ditimpa olehprovider => debian
(yang akan menjadi bug boneka), jadi alih-alih tentukan semua perintah dan gunakan penyedia basis (namun, ini tidak memungkinkan dengan benar):sumber
exec
tipenya, saya pikir wayang membutuhkan jalur penuh ke executable. Coba atur itu ke jalur lengkap distatus
baris Anda , jika Anda belum menetapkannya secara global?exec
Menerimapath
param dan Anda dapat mengatur jalur default denganExec { path => '/usr/bin:/bin' }
atauExec { path => ['/usr/bin'],['/bin']}
. Ada 'jalur' serupa pada Layanan, tetapi tampaknya terutama digunakan dengan penyedia tertentu untuk menemukan skrip init, alih-alih sebagai jalur pencarian perintah shell-style normal.$4
adalah masalahnya. Saya menggantinya dengan\$4
dan sekarang semuanya berfungsi seperti yang diharapkan :)