chef
test-kitchen

Chef + test-kitchenで依存関係を持ったクックブックテスト環境構築

問題

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上にあげておけば、別環境への横展開時に自動的に取ってきてくれるのでにかなり便利

参照
About Berkshelf

動作確認

$ 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クックブックが読み込まれ、実行されている。