cookbookのテストにkitchen-dockerを使ってみた。

今度は"kitchen-docker が動きました - ようへいの日々精進XP"を見て、dockerを利用しcookbookを高速にテストできるkitchen-dockerを知った。

まだ開発されて間もないという事も有り、いろいろ引っかかったのでメモしておく。

試しにapache2のcookbookをテストしてみる。以下、試した手順。

apache2のcookbookをcloneする。

$ git clone https://github.com/opscode-cookbooks/apache2.git

Gemfileを編集し追記する。

Gemfile:

source 'https://rubygems.org'

gem 'berkshelf',  '~> 2.0'
gem 'chefspec',   '~> 3.0'
gem 'foodcritic', '~> 3.0'
gem 'rubocop',    '~> 0.14'

group :integration do
  gem 'test-kitchen'
  gem 'kitchen-docker'
end

bundle installを実行

$ cd apache2
$ bundle install
$ bundle exec kitchen init

その後、生成された.kitchen.ymlを以下の様に修正する。
.kitchen.yml

---
driver:
  name: docker

provisioner:
  name: chef_solo

platforms:
  - name: ubuntu
  - name: ubuntu

suites:
  - name: default
    run_list:
      - recipe[apache2::default]
    attributes:

docker Containerを生成する。

$ sudo kitchen create

kitchen-lxcと異なり、設定は全自動で行われるため特に作業は不要。

その後、"sudo bundle exe kitchen test"を実行するとテストが始まった。

$ sudo bundle exe kitchen test
-----> Cleaning up any prior instances of <default-ubuntu>
-----> Destroying <default-ubuntu>...
       658d50cfaf0c23a68a13803760e585726c537f1f1f95251233fd113efe5ee4c0
       658d50cfaf0c23a68a13803760e585726c537f1f1f95251233fd113efe5ee4c0
       Finished destroying <default-ubuntu> (0m0.33s).
-----> Testing <default-ubuntu>
-----> Creating <default-ubuntu>...
       Step 1 : FROM base
        ---> b750fe79269d
       Step 2 : ENV DEBIAN_FRONTEND noninteractive
        ---> Using cache
        ---> 364cfbe41265
       Step 3 : RUN dpkg-divert --local --rename --add /sbin/initctl
        ---> Using cache
        ---> 0c92b3a868ad
       Step 4 : RUN ln -sf /bin/true /sbin/initctl
        ---> Using cache
        ---> 5a0cb857a64d
       Step 5 : RUN apt-get update
        ---> Using cache
        ---> 7c0c1b8a66c6
       Step 6 : RUN apt-get install -y sudo openssh-server curl lsb-release
        ---> Using cache
        ---> 757baa46be90
       Step 7 : RUN mkdir -p /var/run/sshd
        ---> Using cache
        ---> f8952535dcb3
       Step 8 : RUN useradd -d /home/kitchen -m -s /bin/bash kitchen
        ---> Using cache
        ---> d5bee36f6c4a
       Step 9 : RUN echo kitchen:kitchen | chpasswd
        ---> Using cache
        ---> efb754b5baa4
       Step 10 : RUN echo 'kitchen ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
        ---> Using cache
        ---> 70b8ec0cd8fe
(一部省略)
[2013-12-14T14:25:53+00:00] INFO: service[apache2] restarted       
           - restart service service[apache2]
       [2013-12-14T14:25:53+00:00] INFO: Chef Run complete in 31.631908462 seconds
       [2013-12-14T14:25:53+00:00] INFO: Running report handlers
       [2013-12-14T14:25:53+00:00] INFO: Report handlers complete
       Chef Client finished, 18 resources updated
       Finished converging <default-ubuntu> (1m8.56s).
-----> Setting up <default-ubuntu>...
       Finished setting up <default-ubuntu> (0m0.00s).
-----> Verifying <default-ubuntu>...
       Finished verifying <default-ubuntu> (0m0.00s).
-----> Destroying <default-ubuntu>...
       994af29ab114f7b17ca525f8420c1810e0ea9530c26ab6dcb7f4ced3b4f7dad9
       994af29ab114f7b17ca525f8420c1810e0ea9530c26ab6dcb7f4ced3b4f7dad9
       Finished destroying <default-ubuntu> (0m1.38s).
       Finished testing <default-ubuntu> (1m10.66s).
-----> Kitchen is finished. (8m43.47s)

"Kitchen is finished"と表示された、成功!

ただ、kitche-lxcが50sec程度で完了していたのに9分近く処理に掛かってるのはなぁ。

今後の改良に期待かな。