Chef SoloからChef Zeroへ


関連記事

Chef Zeroとは

  • ここを参考にしていただきたい。
  • 結局chef soloではないchef clientが設置されてそれをローカルモードで実行するので、サーバ・クライアント構成への移行が容易なわけだ。
  • chef soloはdeprecatedになっているのでchef zeroを使ったほうがいいだろう。

Chef Solo vs Chef Zero

インストール

  • workstation(chefリポジトリがあるところでここではホストになる)側にはknifeを設置する必要があって、soloの場合はknife-solo、zeroの場合はknife-zeroを設置する。
  • Chef Solo
# vi Gemfile
gem 'knife-solo'
  • Chef Zero
# vi Gemfile
gem 'knife-zero'

コマンド

  • Chef Solo
    • node上のchef_environmentが記述されていてもオプションを付けないと実際ノードには適用されない。
** SOLO COMMANDS **
knife solo bootstrap [USER@]HOSTNAME [JSON] (options)
knife solo clean [USER@]HOSTNAME
knife solo cook [USER@]HOSTNAME [JSONFILE] (options)
knife solo init DIRECTORY
knife solo prepare [USER@]HOSTNAME [JSON] (options)

# chef soloをノードへ設置(ノード名がdevの場合)
bin/knife solo bootstrap dev -E development

# レシピをノードへ適用(ノード名がdevの場合)
bin/knife solo cook dev -E development
  • Chef Zero
    • node上のchef_environmentが記述されていればオプションを付けなくても大丈夫。
    • workstationからnodeへクックブックを転送する時、soloではcookというサブコマンドを、zeroではconverge(収束)というサブコマンドを使う。
    • QUERYにマッチするホストすべてに適用する。(これはいい。複数のノードに適用するときシェルスクリプトを組む必要がなくなった。)
    • --sudoオプションを付けないと「許可がありません」というエラーが表示される。
    • vagrant 1.7.0の場合はchef soloより時間がめちゃくちゃかかる。というか終わらなくて途中で止めてしまった。
    • vagrant 1.7.4以上を使えば大丈夫そうだ。現在1.8.1が最新だが、1.8.1では問題ない。
** ZERO COMMANDS **
knife zero apply QUERY (options)
knife zero bootstrap [SSH_USER@]FQDN (options)
knife zero chef_client QUERY (options) | It's same as converge
knife zero converge QUERY (options)
knife zero diagnose # show configuration from file

# chef zero(chef client)をノードへ設置(ノード名がdevの場合)
bin/knife zero bootstrap dev --sudo

# レシピをノードへ適用(ノード名がdevの場合)
bin/knife zero converge 'name:dev' --sudo

# 複数のノードへ適用(ノード名がweb1, web2...の場合)
bin/knife zero converge 'name:web*' --sudo

注意事項

  • cookbooksとsite-cookbooksに同様な名前のクックブックが存在する場合、warnメッセージが表示される。
  • site-cookbooks配下のものよりcookbooks配下のものが読み込まれる。
  • nginxをコミュニティクックブックと自作のクックブックの両方持っていたが、コミュニティクックブックで設置された。

参考