Test Kitchenで自作Ohaiプラグインを使う

前回のエントリでTest KitchenとDocker、Serverspecの設定手順を書きました。
今回は自作Ohaiプラグインを使ったレシピのテストを行う方法です。


何もせずにTest Kitchenで自作Ohaiプラグインを使おうとするとエラーになります。
具体的には自作Ohai変数をテンプレートに埋め込んでいる場合値が空になってしまいます。

色々試行錯誤してみたところ、以下のような設定でうまくいきました。

前提

まず、自作Ohaiプラグインファイルを以下ディレクトリに配置します。

/root/chef/repo/site-cookbooks/centos6/files/default/plugins

/root/chef/repo/site-cookbooks/centos6/までは
筆者のクックブックのパスなのでご自身のパスに読み替えてください。
files/default/plugins以下に配置しておきます。

Test Kitchen設定ファイルの修正

次にTest Kitchenの設定ファイルの修正です。
この.kitchen.ymlファイルは
/root/chef/repo/site-cookbooks/centos6/.kitchen.yml
に配置してあります。ここも適宜読み替えてください。

---
driver:
  name: docker

provisioner:
  name: chef_solo
  solo_rb:
    Ohai::Config[:plugin_path] << : /tmp/kitchen/cookbooks/centos6/files/default/plugins


solo.rb

Ohai::Config[:plugin_path] << : /tmp/kitchen/cookbooks/centos6/files/default/plugins
と追記します。

こうすることでTest Kitchenによって起動したインスタンス内のsolo.rbファイルに
Ohai::Config[:plugin_path] << "/tmp/kitchen/cookbooks/centos6/files/default/plugins"
と追記されます。

確認

実際にTest Kitchenによって起動されたインスタンスにログインを行い状態を確認してみます。

もう一度kitchenコマンドを実行します。

今度は以下のようなオプションを付けます。

kitchen test --destroy=never

通常はテスト後dockerインスタンスは破棄(destroy)されますが
このオプションを付けると破棄されずインスタンスが起動し続けます。


インスタンスの起動状態は

kitchen list

で確認出来ます。

表示例

[root@test centos6]$ kitchen list
Instance           Driver  Provisioner  Last Action
default-centos-65  Docker  ChefSolo     Verified
[root@test centos6]# 



さてインスタンスにログインしてみます。

kitchen login

を実行します。


インスタンスにkitchenユーザでログインすることになります。
パスワードを聞かれますが、ユーザ名と同じkitchenです。

[root@test centos6]# kitchen login
kitchen@localhost's password:

Last login: Thu Jul 31 13:31:11 2014 from 172.17.42.1
[kitchen@7dd079c23c0d ~]$

無事ログイン出来ました。


いよいよsolo.rbを見てみます。
以下のように最終行に追記されていることが確認出来ます。

/tmp/kitchen/solo.rb

node_name "default-centos-65"
checksum_path "/tmp/kitchen/checksums"
file_cache_path "/tmp/kitchen/cache"
file_backup_path "/tmp/kitchen/backup"
cookbook_path ["/tmp/kitchen/cookbooks", "/tmp/kitchen/site-cookbooks"]
data_bag_path "/tmp/kitchen/data_bags"
environment_path "/tmp/kitchen/environments"
node_path "/tmp/kitchen/nodes"
role_path "/tmp/kitchen/roles"
client_path "/tmp/kitchen/clients"
user_path "/tmp/kitchen/users"
validation_key "/tmp/kitchen/validation.pem"
client_key "/tmp/kitchen/client.pem"
chef_server_url "http://127.0.0.1:8889"
encrypted_data_bag_secret "/tmp/kitchen/encrypted_data_bag_secret"
Ohai::Config[:plugin_path] << "/tmp/kitchen/cookbooks/centos6/files/default/plugins"