なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

最近のchefとかknifeとか

ネット上にはいろいろな情報が流れているが、現在のchef

$ chef --version
Chef Development Kit Version: 0.7.0
chef-client version: 12.4.1
berks version: 3.2.4
kitchen version: 1.4.2

の場合、cookbookを作る際は

$ chef generate cookbook <NAME>

で始めたほうが良さそう。

knife-zero

knife-soloを使ってたのに、お亡くなりになったのでknife-zeroを使い始める。

www.creationline.com
www.creationline.com

  • Rubyはバージョン間の互換性ゼロなので、chefは内部にRubyとgemを持つようになった。なのでchefのサブコマンドでシェルとgemの管理をするようになった。*1
cookbook内でシェルの設定

このコマンドでchefdkのもつrubyを使うように設定できる。

$ eval "$(chef shell-init bash)"
$ chef gem install knife-zero
'''knife solo prepare''' にあたるのがこのコマンド
$ knife zero bootstrap {target_server_ip} -x root
  • やたらknifeのサブコマンドが増えている。'''node'''はおなじみのnode以下にあるサーバの設定が書かれたjsonの情報を出力する。
  • '''node'''は実態をもったレシピの引数指定、'''role'''がある一定の役割をもったサーバを使いまわすためのレシピの引数指定、みたいな感じ
  • 使いまわしたいものは'''role'''に設定すればいいっぽいが、'''role'''以下のjsonに指定したデータはレシピの中で参照できない(参照する方法はあるが作法ではない)
リストを出す
$ knife client list -z
$ knife node list -z
$ knife role list -z
レシピやRoleの追加・削除

このようにレシピを追加・削除しないと、レシピ実行時にJSONの設定を消される、クソっぽいhelloworldはレシピ名

$ knife node run_list add -z Node名 helloworld
$ knife node run_list remove -z Node名 helloworld
でもEDITORを環境変数で指定するとレシピを編集できる、意味あるの?それ
$ EDITOR=emacs knife node edit -z Node名

所感

・○ rubyとgemをchefdk内部で管理するようになって、バージョン違いによる動作不良が少なくなると思われる
・○ cookbook実行時にいちいちパスワード or 公開鍵認証のパスを入力しなくてよくなった
・× recipeの編集時に謎のロックがかかるようになって、意図がわからないし嫌だと思った

*1:そのうちchef製のOSが登場するはずなので括目しておくべきだ(嘘)。