chef zeroやitamae

先に結論です。
- 使うならitamaeがいい。chef zeroは何か辛かった（すみません）

# そもそも何故Chef zeroを見てみようかと思った？
構成管理ツールとしてchefは有名ですが、このツール、結構使いこなすのが大変です。インフラまわりを「Infrastructure as Code」というようにコードで管理するのは魅力的ですが、結構ハマってしまうこともあったので敷居が高いなという印書です。
ただそういった中Chefをより簡単に使えるようにしたものとしてChef Solo([この本](http://tatsu-zine.com/books/chef-solo)が参考になりました)がありました。
これがあったお陰でローカルマシンからVMやEC2などに比較的簡単にchefを適用させることができるようになりました。

ところが、ところがです・・・。chef soloが非推奨になり代わりにchef zeroを使えということになりました。これは非常に残念・・・・。

なのでchef zeroみてみました

# 環境
## 使うもの
- ruby2.1.5 (インストール済みとする)
- chef zero
- knife zero
- virtual box
- vagrant
- centos65

## インストール
### virtual box
[ここ](https://www.virtualbox.org/)から入手

### vagrant
- [ここ](https://www.vagrantup.com/)から入手
- インストール後<code>vagrant init </code>してみる。Vagrantfileが作成されればOK。

### virtual boxでcentosを使えるようにする

```
$ vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box
```

試しにログインしてみる。

```
$vagrant up
$vagrant ssh
```

これで入れたらOK。

 - .ssh/configに追加しておく
```
vagrant ssh-config >> ~/.ssh/config
```

### chef zero/knife zeroを入れる
macの場合は[ここ](https://opscode-omnibus-packages.s3.amazonaws.com/mac_os_x/10.8/x86_64/chefdk-0.3.5-1.dmg)のサイトからダウンロードしいれるか、Gemfileを作成する。今回はGemfileを作って入れます

```rb
source "https://rubygems.org"

gem 'chef'
gem 'knife-zero'
```

#リポジトリを作成する
```
bundle exec chef generate repo chef-repo
```

.chef/knife.rbを作成する

```
 echo "local_mode true" >> .chef/knife.rb
```

#レシピを作ってみる
まずはenvironmentを作成する。

```
# 以下を実行するとenvironmentを作成
bundle exec knife environment create development
```
次にknife zeroのbootstrapを実施。

```
bundle exec knife zero bootstrap melody -x vagrant --sudo -E development
```
![スクリーンショット 2015-02-13 13.47.59.png](https://qiita-image-store.s3.amazonaws.com/0/1686/3c336e53-6c46-3915-1fb8-107ff961e6a5.png)


#レシピを実行してみる

```
bundle exec knife zero chef_client 'chef_environment:development' -a hostname -x vagrant
```

これで実行できれば良いのだが、うまくできない。
どうもVM上へのknife zero chef_clientができない（？）。bootstrapはできるがchef_client実施時はsessionの確率ができない。同じようなこと言っている人もいる。
これはもっと調べる必要ある。。。（Chef solo楽だったなー）

nodeの存在は確認できる

```
bundle exec knife node list
```

詳細もみれる

```
bundle exec knife node show [node_name]
```

結局上で使わなかったChefdkを使ってChefをいれて、そこに含まれているchef-provisioningを使うと、まー、VMへレシピを適用することはできました。

## itamae使う
chef-provisioningは何かうーん、って感じだったので、[itamae](https://github.com/itamae-kitchen/itamae)を使ってみた。これはchef soloに似ているしライトな感じで使いやすそう。

## 環境
- itamae 1.1.24
- ruby 2.1.5

## 試してみる
1. 最初にitamaeのレシピ等作るため、適当にディレクトリ作ります。

```
mkdir itamae_sample
cd itamae_sample
``` 

2. Gemfileを作成しbundle install


```
source 'https://rubygems.org'

gem 'itamae', '1.0.13'
```

3. レシピを作成する
nginxをインストールするレシピ。

```ruby:nginx_recip.rb
package 'nginx' do
  action :install
end

service 'nginx' do
  action [:enable, :start]
end
```
4. レシピを実行
レシピを実行してみる。
<code>bundle exec itamae ssh -h default --vagrant nginx_recip.rb</code>

![スクリーンショット 2015-04-07 10.23.40.png](https://qiita-image-store.s3.amazonaws.com/1448/1686/651f2b7f-dbaf-9a12-f663-926aef5bd28c.png)

成功すると上の画面のようなります。
vagrant ssh　でVMに入るとインストールされていることがわかると思います。

## 感想
使ってみた感触としては、itamaeが手軽でいい気がします。recipeをあらかじめ用意しておくと、いざという時の環境構築やライブラリアップデートなどが誰でも簡単にできるようになり、良いなと思っています。

itamaeのレシピに関するナレッジとか書いていければなと思っています