Chef SoloからChef Zeroへ


## 関連記事

* [Chefを使ってより効率的にサーバを管理しよう。まずは用語から](http://qiita.com/park-jh/items/9e2e358d2e82a7736cf7)
* [Berkshelfを使って外部クックブックをノードに適用する。](http://qiita.com/park-jh/items/751464a4cc6d8abcd6fd)
* [クックブックを作成してノードに適用する。- その１](http://qiita.com/park-jh/items/8d641809850b5930d39c)
* [クックブックを作成してノードに適用する。- その２](http://qiita.com/park-jh/items/88237342cfd202e6893f)
* [ChefでCentOS 6.7 + rbenv + ruby 2.3.0の環境を構築する。](http://qiita.com/park-jh/items/f249a18793899f2eb4bf)
* [ChefでCentOS 6.7 + Vim 7.4 + luaを設置する。](http://qiita.com/park-jh/items/371d179d5e71618a1f14)
* [ChefでVimプラグインマネージャーNeoBundleを設置する。](http://qiita.com/park-jh/items/ec09e40f9b4aaf9fedfd)
* [Chefのレシピをデバッグしてみよう。](http://qiita.com/park-jh/items/96a076e167327a6a5a39)
* [ChefでCentOS 6.7 + nginxを設置する。- 外部クックブック](http://qiita.com/park-jh/items/3013c49494e524fced31)
* [ChefでCentOS 6.7 + nginxを設置する。- カスタムクックブック](http://qiita.com/park-jh/items/43451cea21ee1724c24b)
* [ChefでCentOS 6.7 + nodejs + npmを設置する。](http://qiita.com/park-jh/items/96089e7e1c97b0fe3a6c)
* [ChefでVimプラグインマネージャーvim-plugを設置する。](http://qiita.com/park-jh/items/ba27ad412ce9926fd94d)
* [ohaiのカスタムプラグインを作ってみよう。](http://qiita.com/park-jh/items/34be55abb7c63b36cddb)
* Chef SoloからChef Zeroへ
* [Chefでnginx + php(php-fpm) + mariadb + wordpressを設置する。](http://qiita.com/park-jh/items/7515e47dddc38257a454)

## Chef Zeroとは

* [ここ](http://qiita.com/park-jh/items/9e2e358d2e82a7736cf7#chef-zerochef-client-local-mode)を参考にしていただきたい。
* 結局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

```sh
# vi Gemfile
gem 'knife-solo'
```

* Chef Zero

```sh
# vi Gemfile
gem 'knife-zero'
```

### コマンド

* Chef Solo
  - node上のchef_environmentが記述されていてもオプションを付けないと実際ノードには適用されない。

```sh
** 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では問題ない。

```sh
** 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をコミュニティクックブックと自作のクックブックの両方持っていたが、コミュニティクックブックで設置された。

## 参考

* http://knowledge.sakura.ad.jp/tech/2708/
* http://hibiso.net/%E3%81%9D%E3%81%AE%E4%BB%96/chef-solo%E3%81%8B%E3%82%89chef-zero%E3%81%B8/