どうも炎の料理人三ツ星シェルの かっぱこと 川原 洋平(@inokara)です。
はじめに
ansible にも test-kitchen のようなテストフレームワークは無いのかなーと探していたら provisioner として shell を指定していた記事を見つけたのでその記事に倣って試してみる。
尚、セットアップする環境は AWS の EC2 インスタンスを使いたい為、kitchen-ec2 を利用する。
参考
とりあえず
- 作業メモ
作業のサマリ
以下のような流れ。
- test-kitchen の導入
- テスト用の bash 作成
- kitchen-ec2 の導入
- serverspec の spec を作成
実際の作業
試した環境
- Mac OS X 10.9 Marvericks
test-kitchen の導入
sudo gem install test-kitchen --no-ri --no-rdoc -V
テスト用の bash を用意
mkdir -p test-kitchen/provisioner-shell
cat << EOT > bootstrap.sh
#!/usr/bin/env bash
yum -y install httpd
chkconfig httpd on
service httpd start
EOT
シェルスクリプトの名前は bootstrap.sh で決め打ち。
kitchen-ec2 の導入
cd test-kitchen/provisioner-shell
sudo kitchen init --driver=kitchen-ec2
.kitchen.yml の設定
---
driver:
name: ec2
aws_access_key_id: AKxxxxxxxxxxxxxxxxxxxx
aws_secret_access_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
aws_ssh_key_id: chef-test
ssh_key: <%= File.expand_path('~/.ssh/chef-test.pem') %>
security_group_ids: ["sg-0xxxxxx"]
region: us-east-1
availability_zone: us-east-1b
flavor_id: t1.micro
require_chef_omnibus: true
provisioner:
name: shell
platforms:
- name: centos-6.5
driver:
image_id: ami-eb6b0182
username: root
suites:
- name: default
servespec の spec ファイルを用意
cd test-kitchen/provisioner-shell
mkdir -p test/integration/default/serverspec
cd test/integration/default/serverspec
vim test_spec.rb
以下のように用意する。
require 'serverspec'
include Serverspec::Helper::Exec
include Serverspec::Helper::DetectOS
RSpec.configure do |c|
c.before :all do
c.path = '/sbin:/usr/sbin'
end
end
%w(httpd).each do |t|
describe package("#{t}") do
it { should be_installed }
end
describe service("#{t}") do
it { should be_enabled }
it { should be_running }
end
end
これで準備完了。
キッチン
あとはいつものように kitchen test する前にちょっと kitchen create からの kitchen list してみたのが以下の図。
ちゃんと Provisioner が Shell になっているのが嬉しいよね。
とりあえず kitchen converge
kitchen converge
暫くすると…
出来上がり。
kitchen verify
ちょっと残念なところが…順調、順調と思っていたら…
ガビーン、ここで Chef 依存(というか Ruby 依存)。ま、もともと Chef 用のテストフレームワークなのでそれは仕方ないですな。と言うことで、以下のように bootstrap.sh の冒頭に Chef をインストールw
#!/usr/bin/env bash
curl -L https://www.opscode.com/chef/install.sh | bash # これ苦肉の策
#
yum -y install httpd
chkconfig httpd on
service httpd start
そして…
kitchen verify
お疲れ様でした。以下のようにテストも通りました。
後片付け
ちゃんと落としておきましょうということで…
kitchen destroy
お疲れ様でした。
まとめ
感動
bash で書いた秘伝のタレをテストしたい、テストしたいと思っていたらこの手があったんかと今更に感動した。
ちょっとズコッときたとこ
結局は事前に Chef をインストールしなければ busser がインストール出来ないので注意。これは Chef 入りのインスタンスとかでテストすればよかろーもん。
元記事は、こちら