ようへいの日々精進XP

よかろうもん

boot2docker と test-kitchen で ansible の Playbook をテストする(3)〜 Serverspec でテストする 〜

ども、かっぱです。やっとここまで辿り着いた...前回の続き。

サンプル

ダラダラ文章よりもサンプルをこさえた。

サンプルの使い方は 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 を適用。

f:id:inokara:20150307080436p:plain

kitchen verify

kitchen verify

ここからが醍醐味。kitchen verify を利用して Serverspec を利用したテストを行う。

f:id:inokara:20150307080753p:plain

setlocale の警告がちょっと残念(出力を抑制したい)だけどテストも OK 牧場。

追伸

setlocale の警告がウザい問題

こちらを参考に glibc-common を再インストールすることで解決。

yum reinstall glibc-common

どうやら大元の centos コンテナイメージ作成時にこの辺りの設定諸々がざっくりと削除されているっぽい...。

あらためて kitchen converge

f:id:inokara:20150307082950p:plain

美しい...。

あらためて kitchen verify

f:id:inokara:20150307083023p:plain

美しい...。


ということで

test-kitchen を使えば Chef や Ansible に関係なく Playbook や Cookbook のテスト、Serverspec まで実行出来るってのが体験出来ただけでも良かったばい。