LoginSignup
0
0

More than 5 years have passed since last update.

単体だと動くのに複数Cookbook組み合わせたら動かないときのデバッグ方法

Last updated at Posted at 2016-02-02

とりあえず、berks updateしてみる

最新版だと直っている可能性もあるので、最新版を試してみる。

$ chef exec berks update

それでもダメなら

デバッグ方針

エラー文を注意深く読んで、まずはエラーが出ているRecipeを突き止める。
その後、どこまでは期待通りに動いているのか可能な限り絞り込んでいく。外部のリソースだろうがローカルに保存して書き換えるくらいの心意気が大事。

テスト環境構築

ChefDKをサクッと入れておきます
https://downloads.chef.io/chef-dk/

これで、test-kitchenを使ってテストができます。使い方は公式ドキュメントにお任せして割愛。

一部のcookbookだけ差し替える

差し替え方法

問題のcookbookをローカルに保存します。
git cloneしてくるも良し、berks vendorしてからmvするも良し。

そして、Berksfileを開き、cookbookの参照先をローカルパスに差し替えます。

# Berksfile
cookbook 'buggy_cookbook', path: '/path/to/cookbook'

GitHub上でForkしてgit urlをfork先のものに変える方法もありますが、ローカルで書き換えた方が圧倒的に早いので、pathで指定することをお勧めします。

念のため、再現できるか確認。

$ chef exec kitchen test

無事再現した場合は、思う存分デバッグコードを仕込みます。

デバッグ方法

Log Level Debug

ChefのログレベルをDEBUGにして、情報を増やしてみる。

$ chef exec kitchen test -l debug

log

古き良きprintデバッグ。実行時の値をチェックしたいのでlazy付けます。付けないと、コンパイル時に評価されてしまいます。

# recipes/xxx.rb
log 'check variable' do
  command lazy { "Value is #{SOME_VARIABLE}" }
end

remote_file -> cookbook_file

例えremote_fileだろうが、wgetしてローカルで書き換えます。filesディレクトリに保存しておけば、recipeから参照しやすくなります。

$ wget -o files/default/yyy.sh http://example.com/yyy.sh

remote_fileの代わりにfiles下のファイルを指定するために、cookbook_fileメソッドに書き換えます。

$ git diff
-remote_file '/usr/local/src/yyy.sh' do
-  source 'http://example.com/yyy.sh'
+cookbook_file '/usr/local/src/yyy.sh' do
+  source 'yyy.sh'

Shell Scriptなら、set -xでデバッグフラグ立てておくと変数の値等が見れて役立ちます。

kitchen login

インスタンスの中に乗り込んで、現状を調査します。

$ chef exec kitchen login
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0