LoginSignup
86
87

More than 5 years have passed since last update.

既存のchef cookbookをtest-kitchen対応させていく。

Last updated at Posted at 2013-12-04

test-kitchenかぁ...

test-kitchen
最近見ないうちに、色々と機能が追加されていた。

version 1.0.0が正式にリリースされた。
せっかくなので使ってみた。

test-kitchenとは

cookbookって世にあるじゃないですか。chefというツールで使う
ミドルウェアインストールのためのレシピ。
で、そのレシピがきちんと動作するのか────インストールできるのか?
そしてインストールした後きちんと動作するのか?というのを確認するため、
opscodeが作ってるツールです。

必須なソフトウェア

既存のchef cookbookを対応させていく

今回はたまたま対応準備を進めていた、
aiming-cookbooks以下にあるchef-td-agent cookbook(TD様のリポジトリからforkしました)を使う。

test-kitchenの環境整備

Gemfileを用意する

Gemfileを用意して、test-kitchen、Berkshelf、それとserverspecをインストールする。

Gemfile
source 'https://rubygems.org/'

gem 'test-kitchen'
gem 'berkshelf'
gem 'serverspec'

必要なパッケージをインストール

おなじみのコマンド。

bundle ex ins --path vendor/bundle

kitchen init を実行する

bundle ex kitchen init

以上のコマンドを実行すると、Gemfileにkitchen-vagrantパッケージが追記されるので、
改めてbundle ex installを行う。

kitchen-vagrant をインストール

bundle ex ins

Gemfileを整える

:development グループ に各gemパッケージをまとめたいので
以下のようにGemfileを整える。

Gemfile
source 'https://rubygems.org/'

group :development do
  gem 'test-kitchen'
  gem 'berkshelf'
  gem 'kitchen-vagrant'
  gem 'serverspec'
end

Berksfileの準備

chef-td-agent パッケージは、yumapt などのcookbookを必要とする。
opscodeから落とさないといけない。

chef-td-agent パッケージの metadata.rb に必要となるcookbook一覧が書いてある。
このmetadata.rbに書かれているパッケージを利用するため、
Berkshelfを利用する。

Berksfileを使えば、まるでgem installのごとくcookbookがインストールできる。
今回は以下のような形で、Berksfileを書く。

Berksfile
site :opscode

metadata

これだけ。

.kitchen.ymlの編集

今回テストしたいレシピはtd-agent::default。で
アーキテクチャはUbuntuCentOS なのでデフォルトの.kitchen.yml をちょっとだけ変更しておく。

.kitchen.yml
---
driver:
  name: vagrant

provisioner:
  name: chef_solo

platforms:
  - name: ubuntu-12.04
  - name: centos-6.4

suites:
  - name: default
    run_list:
      - td-agent::default
    attributes:

まずはtest-kitchenを使ってテスト

以下のコマンドを使えばテストできる

bundle ex kitchen test

これでcookbookのインストールは終わり。
無事cookbookが実行されればそれでおしまい!

スクリーンショット 2013-12-04 14.44.55.png

だけどこれだけだとすげー不安

... インストールされたcookbook、そういえばserviceとしてtd-agentが登録され、
起動されるようになってる。

けど、本当に...?

という不安を解消するため、serverspec を合わせて利用する。

serverspec

test-kitchen、便利すぎる。serverspecに対応している(!)。
以下の形でspec fileを用意する。
カレントディレクトリはcookbookのルートである、とする。

mkdir -p test/integration/default/serverspec
cd test/integration/default/serverspec
touch td-agent_spec.rb

td-agent_spec.rbの内容

test-kitchenのドキュメント、サーバーテストの例にならって、td-agentがサービスとして動いているのか?
というテストだけ書いてみる。

td-agnet_spec.rb
# -*- coding:utf-8 -*-

require 'serverspec'
require 'pathname'

include Serverspec::Helper::Exec
include Serverspec::Helper::DetectOS

RSpec.configure do |c|
  c.before :all do
    c.os = backend(Serverspec::Commands::Base).check_os
    c.path = '/sbin:/usr/bin'
  end
end

describe "td-agent daemon" do
  it "has a running service of td-agent" do
    expect(service("td-agent")).to be_running
  end
end

これだけだとまずい

sudoでserverspecが動くようにしなければいけない。
busserというgemを利用してserverspecを動かしている。
そのままだと/var/run/td-agent/td-agent.pid にアクセスすることができない。
td-agentユーザー以外はアクセス出来ないような設定になっているからだ。

td-agentがサービスとして動作しているか確認するためには、
sudoの状態でserverspecを実行する必要がある。

.kitchen.yml に以下の形でsudoが有効になるようにする。
(デフォルトだと無効になってる...)

2013/12/5追記

busserのsudoフラグについて、trueに戻す変更コミットが行われた

.kitchen.yml
---
driver:
  name: vagrant

provisioner:
  name: chef_solo

platforms:
  - name: ubuntu-12.04
  - name: centos-6.4

suites:
  - name: default
    run_list:
      - td-agent::default
    attributes:

busser:
  sudo: true

改めて、bundle ex kitchen test を実行する。
すると、serverspecが走ってテストされることが確認できる。

スクリーンショット 2013-12-04 14.49.25.png

今後どうするのか

test-kitchenでchef cookbookのテスト、及びcookbookにより
構築されたサーバーの状態がテストできるようになった。

今後はCIに乗せてテストをしていきたい。

世の中、どんどん未来になっていっている。

86
87
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
86
87