ども、かっぱです。やっとここまで辿り着いた...前回の続き。
サンプル
ダラダラ文章よりもサンプルをこさえた。
サンプルの使い方は README.md を...(誰か英語教えて...)。
以下、サンプルをベースに記載。
Serverspec でテストする準備
spec_helper を書く
こちらを真似て以下のように設定する。
mkdir -p test/integration/default/serverspec/localhost echo "require 'serverspec'" >> test/integration/default/serverspec/spec_helper.rb echo "set :backend, :exec" >> test/integration/default/serverspec/spec_helper.rb
spec ファイルを呼び出すラッパーを書く
default.yml
に以下の app_spec.rb と common_spec.rb
を呼び出す為の設定を行う。
cat << EOT > test/integration/default.yml --- - name: wrapper playbook for kitchen testing "app" hosts: localhost roles: - common - app EOT
spec ファイルを書く
そして、以下のようにテストを書く。
test/integration/default/serverspec/localhost/app_spec.rb は以下の通り。
require 'spec_helper' files=[ 'hogehoge.conf', 'fugafuga.conf' ] files.each do |file| describe file("/httpd/conf.d/#{file}") do it { should be_file } end end
test/integration/default/serverspec/localhost/common_spec.rb は以下の通り。
require 'spec_helper' describe file('/etc/monit.conf') do it { should be_file } it { should be_mode 600 } end packages = [ 'monit', 'htop', ] packages.each do |pkg| describe package pkg do it { should be_installed } end end
準備完了。
test-kitchen して Serverspec まで一気にやる
kitchen create
kitchen create
kitchen create
でテストするコンテナを作る。
kitchen converge
kitchen converge
kitchen converge
を実行して Playbook を適用。
kitchen verify
kitchen verify
ここからが醍醐味。kitchen verify
を利用して Serverspec を利用したテストを行う。
setlocale の警告がちょっと残念(出力を抑制したい)だけどテストも OK 牧場。
追伸
setlocale の警告がウザい問題
こちらを参考に glibc-common を再インストールすることで解決。
yum reinstall glibc-common
どうやら大元の centos コンテナイメージ作成時にこの辺りの設定諸々がざっくりと削除されているっぽい...。
あらためて kitchen converge
美しい...。
あらためて kitchen verify
美しい...。
ということで
test-kitchen を使えば Chef や Ansible に関係なく Playbook や Cookbook のテスト、Serverspec まで実行出来るってのが体験出来ただけでも良かったばい。