puppet 今試すなら バージョン 0.22.1 を使え、そして gem で入れるな というエントリを書いたわけですが、puppetrun で特に exec を使って puppet クライアントで何かコマンドを実行させたい、ということであれば、今は trunk 版を使ったほうがいいかも。
理由。まず以下の様な単純なコマンドを実行させる site.pp をつくる。
exec { 'touch': path => '/bin', command => 'touch /tmp/puppet', }
で、puppetmasterd を puppet サーバで起動。
$ sudo puppetmasterd
次に puppet クライアント側で puppetd を起動。
$ sudo puppetd --listen --no-client --server kenny.southpark -v
そして、puppet サーバ側で puppetrun を起動して、設定した exec をクライアントで実行させる。
$ sudo puppetrun --host cartman.southpark
すると、0.22.1 では、クライアント側の puppetd がハングした状態になります。strace で見ると、以下の記述が延々と表示されるという状態に。
rt_sigprocmask(SIG_SETMASK, [], ULL, 8) = 0 rt_sigprocmask(SIG_SETMASK, [], ULL, 8) = 0 rt_sigprocmask(SIG_SETMASK, [], ULL, 8) = 0 rt_sigprocmask(SIG_SETMASK, [], ULL, 8) = 0 ... (以下繰り返し)
0.22.1 と 0.22.2 の間で、lib/puppet/type/exec.rb にかなり修正が入ってるので、おそらく 0.22.2 では大丈夫だろうけど、前エントリ で書いたように、0.22.2 ではそもそも puppetd がエラーで起動できない、という問題がある。なので、trunk 版を使うのがいい、という結論になりました。trunk 版だと問題なく実行できることを確認済み。
ただ、これも 前エントリ で書いたように、puppetrun に以下の一行を追加しないと動かないので注意。 fix された。自分の修正内容と違うけど。
require 'puppet/network/client/runner'
まだ実戦投入はやめておいた方がよさそうかな…。まだ検証段階なのでいいのですが。