問題
ChefDK の test-kitchen で複数のクックブックを使う場合、test-kitchen 実行クックブックにおいて、他のクックブックを呼び出す為の設定追加が必要
- Berksfile
- クックブックの場所を指定
- ここで場所が正しく指定されば、.kitchen.ymlのrun_listで直接別cookbookのrecipeを指定することすら可能に
- クックブックの場所を指定
- metadata.rb
- このクックブックが依存するクックブックを指定
環境
-
test-kitchen実行クックブック
- source
-
test-kitchen環境のクックブックから呼び出される、ローカル環境上に存在するクックブック
- target
クックブック作成
$ chef generate cookbook source
...
$ chef generate cookbook target
...
クックブックの場所、および依存関係設定
$ cd source
$ echo "depends 'target'" >> metadata.rb # sourceクックブックがtargetクックブックに依存することを設定
$ vi Berksfile
...
Berksfile
# frozen_string_literal: true
source 'https://supermarket.chef.io'
cookbook 'target', path: '../target' # この指定を追記
metadata
- supermarket.chef.ioにあるクックブックの場所は指定不要
- source chef_repo: '..' 指定
- Chef Repositoryは親ディレクトリーであるとして、個別のクックブックの場所を指定しないことも可能
- 再読込には対象クックブックのバージョンupが必要
- この場合でも一度 ~/.berkshelf/cookbooks に取り込んでから配布
- git: にて、github上のプロジェクトも指定可能
- 自分で使うクックブックをgithub上にあげておけば、別環境への横展開時に自動的に取ってきてくれるのでにかなり便利
動作確認
$ echo "include_recipe 'target::default'" >> recipes/default.rb
$ echo "log 'source'" >> recipes/default.rb
$ echo "log 'target'" >> ../target/recipes/default.rb
$ vi .kitchen.yml # 必要に応じてplatforms: の - name: ubuntu-16.04 コメントアウトなど
$ kitchen create
...
$ kitchen converge
...
1:chef-14.2.0-1.el7 ################################# [100%]
Thank you for installing Chef!
Transferring files to <default-centos-7>
Starting Chef Client, version 14.2.0
Creating a new client identity for default-centos-7 using the validator key.
resolving cookbooks for run list: ["source::default"]
Synchronizing Cookbooks:
- target (0.1.0)
- source (0.1.0)
Installing Cookbook Gems:
Compiling Cookbooks...
Converging 2 resources
Recipe: target::default
* log[target] action write
Recipe: source::default
* log[source] action write
Running handlers:
Running handlers complete
Chef Client finished, 2/2 resources updated in 02 seconds
Finished converging <default-centos-7> (0m25.50s).
-----> Kitchen is finished. (0m28.40s)
正しくsource, targetクックブックが読み込まれ、実行されている。