Berkshelf, Kitchenを利用したCookbookの作成
設定ファイルに不要な記述をしがちなので最低限の必要作業をまとめ。
新規にCookbookを作成する想定で記述。
Berkshelf、Kitchenをインストール
Chef Development KitをChefのサイトからインストールすると、 Berkshelf、Kithenも含まれている
Cookbookを作成
$ berks cookbook sample_cookbook
=> Berkfile、.kitchen.ymlを含むCookbookが作成される
サンプルレシピを作成
--- a/recipes/default.rb +++ b/recipes/default.rb @@ -6,3 +6,10 @@ # # All rights reserved - Do Not Redistribute # + +case node[:platform] +when 'debian', 'ubuntu' + include_recipe 'apt' +end + +include_recipe 'nginx'
--- a/metadata.rb +++ b/metadata.rb @@ -5,3 +5,5 @@ license 'All rights reserved' description 'Installs/Configures sample_cookbook' long_description 'Installs/Configures sample_cookbook' version '0.1.0' + +depends 'nginx'
Kitchenをセットアップ
kitchen initを実行すると .kitchen.yml のrun_listが更新される。 (これくらい手で書けばよい話だけど)
--- a/.kitchen.yml +++ b/.kitchen.yml @@ -12,4 +12,5 @@ platforms: suites: - name: default run_list: + - recipe[sample_cookbook::default] attributes:
- testを実行
$ kitchen setup
.kitchen.ymlに書かれた各platformのVMが作成され、レシピが適用される。
テストを実行
テストを実行する場合、kitchen verify
を実行する
$ kitchen verify -----> Starting Kitchen (v1.4.0) -----> Verifying <default-ubuntu-1204>... Preparing files for transfer Transferring files to <default-ubuntu-1204> Finished verifying <default-ubuntu-1204> (0m0.00s). -----> Verifying <default-centos-64>... Preparing files for transfer Transferring files to <default-centos-64> Finished verifying <default-centos-64> (0m0.00s). -----> Kitchen is finished. (0m3.41s)
テスト未作成なので上記のとおり。 さきほどインストールしたnginxに対するテストを作ってみる。
# test/integration/default/serverspec/service_spec.rb require 'serverspec' # Required by serverspec set :backend, :exec describe service('nginx') do it { should be_enabled } it { should be_running } end
再度テストを実行する。 下記の出力となり、.kitchen.yml内の各platformに対しテストが実行された。
$ kitchen verify -----> Starting Kitchen (v1.4.0) -----> Verifying <default-ubuntu-1204>... Preparing files for transfer -----> Busser installation detected (busser) Installing Busser plugins: busser-serverspec Plugin serverspec already installed Removing /tmp/verifier/suites/serverspec Transferring files to <default-ubuntu-1204> -----> Running serverspec test suite /opt/chef/embedded/bin/ruby -I/tmp/verifier/suites/serverspec -I/tmp/verifier/gems/gems/rspec-support-3.3.0/lib:/tmp/verifier/gems/gems/rspec-core-3.3.0/lib /opt/chef/embedded/bin/rspec --pattern /tmp/verifier/suites/serverspec/\*\*/\*_spec.rb --color --format documentation --default-path /tmp/verifier/suites/serverspec Service "nginx" should be enabled should be running Finished in 0.72385 seconds (files took 0.55695 seconds to load) 2 examples, 0 failures Finished verifying <default-ubuntu-1204> (0m7.95s). -----> Verifying <default-centos-64>... Preparing files for transfer -----> Busser installation detected (busser) Installing Busser plugins: busser-serverspec Plugin serverspec already installed Removing /tmp/verifier/suites/serverspec Transferring files to <default-centos-64> -----> Running serverspec test suite /opt/chef/embedded/bin/ruby -I/tmp/verifier/suites/serverspec -I/tmp/verifier/gems/gems/rspec-support-3.3.0/lib:/tmp/verifier/gems/gems/rspec-core-3.3.0/lib /opt/chef/embedded/bin/rspec --pattern /tmp/verifier/suites/serverspec/\*\*/\*_spec.rb --color --format documentation --default-path /tmp/verifier/suites/serverspec Service "nginx" should be enabled should be running Finished in 0.49234 seconds (files took 0.57095 seconds to load) 2 examples, 0 failures Finished verifying <default-centos-64> (0m16.04s). -----> Kitchen is finished. (0m26.48s)
おまけ
VM作成→テスト実行まで一気に行いたい場合は次のいずれかを実行する。 実行後にVMを破棄するか否かでオプションを変えるので、手元でレシピを変更する / CIでCookbookをテストするなど用途に応じて変えるとよい。
$ kitchen test # 実行後にVMを破棄 $ kitchen test --destroy=never # 実行後にVMを破棄しない