puppetの--testオプション

puppetのバージョンアップでハマったので、メモ代わりにblogにします。

今更な感じではありますが、puppet-0.25とpuppet-2.6の--test(-t)オプションは若干内容が変更されてます。

  • puppet-0.25
puppet/application/puppetd.rb
119     # Enable all of the most common test options.
120     def setup_test
121         Puppet.settings.handlearg("--ignorecache")
122         Puppet.settings.handlearg("--no-usecacheonfailure")
123         Puppet.settings.handlearg("--no-splay")
124         Puppet.settings.handlearg("--show_diff")
125         Puppet.settings.handlearg("--no-daemonize")
126         options[:verbose] = true
127         options[:onetime] = true
128         options[:waitforcert] = 0 unless @explicit_waitforcert
129     end
  • puppet-2.6のテストオプション
puppet/application/agent.rb 
135   # Enable all of the most common test options.
136   def setup_test
137     Puppet.settings.handlearg("--ignorecache")
138     Puppet.settings.handlearg("--no-usecacheonfailure")
139     Puppet.settings.handlearg("--no-splay")
140     Puppet.settings.handlearg("--show_diff")
141     Puppet.settings.handlearg("--no-daemonize")
142     options[:verbose] = true
143     Puppet[:onetime] = true
144     options[:detailed_exitcodes] = true
145   end

2.6からdetailed_exitcodesが有効になってる事によってexit_statusが変わります。

  • 0: 正常終了
  • 2: 変更あり
  • 4: 失敗
  • 6: 変更と失敗あり

capistranoから実行するときは--testオプションつけたままだと、処理が中断されるので要注意です。
解決方法としては、--testオプションを使わずに個々にオプションを書きましょうってことでした。

sudo /usr/sbin/puppetd --ignorecache --no-usecacheonfailure --no-splay --show_diff --no-daemonize --verbose --onetime 

puppet-server-0.25で、puppet-2.6の環境で特に問題なさそうに動いてました。
やってる事がシンプルだってのもあるとは思うんですが。