Chefを久しぶりに書く必要があり、Mac上で開発、テストできるようにした時のメモ。(いい記事が既にいっぱいあったので参照が多いですが。。。)
ChefのインストールはChefDKという開発ツール群がパッケージングされたものを利用し、テストはDocke Toolboxを利用してDockerでやる方法でやりました。
環境
- MacOSX 10.10.5(Yosemite)
- ChefDK 0.7.0
- Docker tool box 1.8.2
ChefDKのインストール
MacOS Xのパッケージ(dmg)をダウンロードしてインストールします。
インストール後、以下のように表示されればOKです。
$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」レビュー
verifyコマンドでも確認します。
$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の導入
上記に従ってインストールします。
以降、最後のeval "$(docker-machine env default)"
まで設定した状態とし、docker pull
など出来る状態とします。
ChefDKを使ってレシピの作成やテスト
やり方など基本的に以下のサイトにすべて書いてあります。(とても参考になりました)
上記だとboot2dockerによる解説ですが、docker toolboxの利用によってnginxへのアクセスは方法が違いました。(Macでdockerは動かず、docker-machine上のものを利用してるためだと思います)
# 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には以下の記述の追加が必要でした。
transport:
name: docker_cli