2014/06/14
cloudpack の 自称 Sensu芸人 の かっぱこと 川原 洋平(@inokara)です。
Chef の Cookbook のテストに test-kitchen と kitchen-ec2 そして Serverspec を使う環境を整えて簡単な Cookbook をテストしてみたいと思いますので宜しくお願い致します。
以下、モコズキッチン風に進めますのでご容赦下さい。
よへみちさん、こんにちわ。いつも朝の身支度をしながら見ています。InfluxDB をインストールする Cookbook を作ったので、是非、テストしてみて下さい。(かっぱ 38 歳)
おお、そうですが InfluxDB ですかー、なかなか尖ってますね。ということで、今日はガッツリ系で行きましょう!
ということで、以下はこの Cookbook を使って進める。
cd ${chef-report}/site-cookbook
git clone https://github.com/inokappa/influxdb-chef.git
sudo gem install test-kitchen --no-ri --no-rdoc -V
cd ${chef-report}/site-cookbook/site-cookbook/influxdb-chef
kitchen init --driver=kitchen-ec2
以下のように kitchen-ec2 がインストールされる。
README.md に従って設定を進める。設定あたっては以下の項目を事前に準備しておく。
結構多いね…と思いながら準備して以下のように .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
require_chef_omnibus: true
platforms:
- name: centos-6.5
driver:
image_id: ami-eb6b0182
username: root
suites:
- name: default
run_list:
- recipe[influxdb::default]
attributes:
とりあえずこれで test-kitchen は動くようになったはず。
kitchen create でテスト用の EC2 インスタンスを作成する。
kitchen create
以下のように表示される。
これで準備完了。インスタンスがあがる時間分待つ。料理には待ち時間も必要…。
尚、特に指定をしなければ m1.small タイプのインスタンスが起動するので注意する。インスタンスタイプを指定したい場合には以下のように :flavor_id を指定すれば良さそう。
flavor_id: t1.micro
kitchen converge で Cookbook を適用してみる。
kitchen converge
おお、いけた、いけた。
kitchen list でテストインスタンスを確認する。
kitchen list
以下のように表示される。
kitchen login を使ってインスタンスにログインすることが出来る。
kitchen login
以下のようにログインして…httpd と influxdb がインストールされているか確認する。
但し、ログインして確認していいのは 2013 年までなので注意しよう。
テストに使ったインスタンスは kitchen destroy してまう。
kitchen destroy
以下のように表示されインスタンスはターミネートされる。
せっかく Chef で cookbook を適用しても、その結果をサーバーにログインして確認していてもいいのは 2013 年までで 2014 年からは漏れ無く Serverspec を使いたい。
こちらの記事を参考にして(わざとらしく宣伝w)test-kichen の処理の後に Serverspec でテストさせる為の設定を行う。test ディレクトリを作成して以下に integration/default/serverspec というディレクトリを作成する。
cd ${chef-repo}/site-cookbooks/influxdb-chef
mkdir -p test/integration/default/serverspec
serverspec ディレクトリ以下に influexdb_spec.rb という Spec ファイルを作成する。
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 influxdb).each do |sv|
describe package("#{sv}") do
it { should be_installed }
end
describe service("#{sv}") do
it { should be_enabled }
it { should be_running }
end
end
上記では…
がテストされる。
kitchen verify を実行して test ディレクトリ以下のテストツールがアップロードされて busser 経由でのテストが実行される。(via test-kitchenのつかいかた)
kitchen verify
以下のように出力された。
うわあ、たくさん Failure だー。
どうやら httpd と influxdb の起動と再起動時のサービス起動が有効になっていないようだ。ということでレシピを以下のように修正した。
--- default.rb.old 2014-06-07 23:52:27.000000000 +0900
+++ default.rb 2014-06-07 23:53:02.000000000 +0900
@@ -12,8 +12,14 @@
not_if { ::File.exists?("/usr/bin/influxdb") }
end
-%w(httpd vim).each do |sv|
+%w(httpd vim redhat-lsb-core).each do |sv|
package "#{sv}" do
action :install
end
end
+
+%w(httpd influxdb).each do |sv|
+ service "#{sv}" do
+ action [ :start, :enable ]
+ end
+end
まず influxdb を自動起動させる為に redhat-lsb-core パッケージを追加でインストールする必要がある。また、合わせて httpd と influxdb を起動させる為の service リソースも追加。ということで、改めて…
まずは kitchen converge で修正したレシピで収束させる。
kitchen converge
以下のように…
おお、オールブルー。次に kitchen verify してテスト。
kitchen verify
以下のように…
おお、オールグリーン。
元記事は、こちら