何を今更と言われるかもしれなけど
berkshelf
でググると...
cookbook
の依存関係を管理するツールruby
のgem
を管理するbundler
みたいなもの
というような紹介を見かけるけど、自分は恥ずかしながら今まで全く使ったことが無くて berkshelf
に辿り着いたのは test-kitchen
で複数の cookbook
に依存するような cookbook
をテストをする場合にどうするんだろうという疑問から...。入り口は何であれ berkshelf
を色々と弄ってみることにする。
事例
CentOS
でremi
パッケージに登録されているredis
パッケージを導入するremi
パッケージの登録はopscode
が提供しているcookbook
である yum を利用する
上記の場合に必要となる cookbook
は以下の通りかなと...
redis
をインストールするcookbook
opscode
が提供するcookbook
の yum
一つにすることも出来るかもしれないけど、二つの cookbook
が必要という前提で進める。
準備
Berkshelf のインストール
Berkshelf
をインストールする。
gem install berkshelf --no-ri --no-rdoc -V
berks コマンドで cookbook のひな形を作成
berks cookbook
を使って redis
をインストールする cookbook
を作成する。
cd chef-repo/site-cookbooks/ berks cookbook redis_cookbook
recipe は適当に...
とりあえず以下のような recipe
を書いた。
include_recipe 'yum::remi' package 'redis' do action :install end
include_recipe 'yum::remi'
がポイント。
Berkfile の用意
bundler
で言うところの Gemfile
の Berkfile
を以下のように用意する。
cd chef-repo/site-cookbook/redis_cookbook vim Berkfile
Berkfile
の中身は下記の通り。
site :opscode metadata cookbook 'yum', git: 'https://github.com/opscode-cookbooks/yum.git'
上記のように依存関係のある cookbook
を指定する。
.kitchen.yml を用意
test-kitchen
を使うので .kitchen.yml
を以下のように用意する。
vim chef-repo/site-cookbook/.kitchen.yml
内容は以下の通り。
--- driver_plugin: docker driver_config: require_chef_omnibus: true platforms: - name: centos-6 driver_config: image: centos suites: - name: default run_list: - recipe[yum::remi] - recipe[redis_cookbook] attributes: {}
テストには毎度お馴染みの kitchen-docker
を使う。
レッツテスト
準備が整ったところでテストを実行する。
kitchen test
しばらく放置する。
Finished converging <default-centos-6> (2m19.66s). -----> Setting up <default-centos-6>... Finished setting up <default-centos-6> (0m0.00s). -----> Verifying <default-centos-6>... Finished verifying <default-centos-6> (0m0.00s). -----> Destroying <default-centos-6>... 978d1002b4e7919b8746c9474e5b4249e6a082c0184b8c4c55544531e937b702 978d1002b4e7919b8746c9474e5b4249e6a082c0184b8c4c55544531e937b702 Finished destroying <default-centos-6> (0m1.83s). Finished testing <default-centos-6> (2m22.43s). -----> Kitchen is finished. (2m25.09s)
無事にテスト終了。
最後に
- とりあえず Berkshelf を使ってみた感じで悔しい
include
で他のレシピを利用するというのは正直初めてで感動した