puppetrun を試すならやっぱ trunk 版の方がよさげ

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'

まだ実戦投入はやめておいた方がよさそうかな…。まだ検証段階なのでいいのですが。