MacでChefの開発、テスト環境を作る(ChefDK+Docker Toolbox)

Chefを久しぶりに書く必要があり、Mac上で開発、テストできるようにした時のメモ。（いい記事が既にいっぱいあったので参照が多いですが。。。）

ChefのインストールはChefDKという開発ツール群がパッケージングされたものを利用し、テストはDocke Toolboxを利用してDockerでやる方法でやりました。

# 環境

+ MacOSX 10.10.5(Yosemite)
+ ChefDK 0.7.0
+ Docker tool box 1.8.2


# ChefDKのインストール

[Chef Development Kit](https://downloads.chef.io/chef-dk/)

MacOS Xのパッケージ(dmg)をダウンロードしてインストールします。
インストール後、以下のように表示されればOKです。

```bash
$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
```

各コマンドは/usr/binからシンボリックリンクが貼られており、実態は`/opt/chefdk/`に配置されているようです。

もし既にgemなどでberkshelfなどのツールをインストールしていると上記がうまく表示されない場合があるかもしれません。（自分がそうでした。。。）

上記の場合の対処法は以下に記載がありました。

[Chefを使うのに必要な環境が一気に整う「ChefDK」レビュー](http://knowledge.sakura.ad.jp/tech/2825/)

verifyコマンドでも確認します。

```bash
$chef verify
Running verification for component 'berkshelf'
Running verification for component 'test-kitchen'
Running verification for component 'chef-client'
Running verification for component 'chef-dk'
Running verification for component 'chef-provisioning'
Running verification for component 'chefspec'
Running verification for component 'rubocop'
Running verification for component 'fauxhai'
Running verification for component 'knife-spork'
Running verification for component 'kitchen-vagrant'
Running verification for component 'package installation'
Running verification for component 'openssl'
..................
---------------------------------------------
Verification of component 'rubocop' succeeded.
Verification of component 'knife-spork' succeeded.
Verification of component 'openssl' succeeded.
Verification of component 'berkshelf' succeeded.
Verification of component 'chef-dk' succeeded.
Verification of component 'fauxhai' succeeded.
Verification of component 'test-kitchen' succeeded.
Verification of component 'chef-provisioning' succeeded.
Verification of component 'kitchen-vagrant' succeeded.
Verification of component 'chefspec' succeeded.
Verification of component 'chef-client' succeeded.
Verification of component 'package installation' succeeded.
```

上記のように成功すればOKです！

# Docker toolboxのインストール

[Mac OSX向けDocker 1.8アップグレードガイド – Docker Toolboxの導入](http://dev.classmethod.jp/tool/docker1-8-macosx/)

上記に従ってインストールします。
以降、最後の`eval "$(docker-machine env default)"`まで設定した状態とし、`docker pull`など出来る状態とします。

# ChefDKを使ってレシピの作成やテスト

やり方など基本的に以下のサイトにすべて書いてあります。（とても参考になりました)

[ChefDKハンズオン with すごい広島の資料](http://qiita.com/eielh/items/adb173ffcd6389c12e36)

上記だとboot2dockerによる解説ですが、docker toolboxの利用によってnginxへのアクセスは方法が違いました。(Macでdockerは動かず、docker-machine上のものを利用してるためだと思います）

```bash

# docker-machineでactiveなコンテナを表示
$docker-machine active
default

# docker-machineのIPアドレスを取得
$docker-machine ip default
192.168.99.101

# test-kitchenで動作しているコンテナの表示。0.0.0.0:8100を80にフォワードしている
$docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
47a74dc9bdba        74c81d859979        "sh -c 'while true; d"   26 minutes ago      Up 26 minutes       0.0.0.0:8100->80/tcp   determined_bhaskara 

# Chefを適用したdockerへのアクセス
$curl http://192.168.99.101:8100
Hello default-ubuntu-1404
```

また、ツールのバージョンの関係か判りませんが、.kitchen.ymlには以下の記述の追加が必要でした。

```lang:.kitchen.yml
transport:
  name: docker_cli
```