Chefレシピから serverspec のテストコードを自動生成してみた

Chefのレシピ書いた上で、同じようなテストコード書くの面倒だなぁ
誰か書いてくれないかなぁ

って思ってたら、同じように考えている人がいた。
ありがてぇ、ありがてぇ!(涙)

Chef のレシピから serverspec のテストを自動生成する chef-serverspec-handler という gem を作ってみた - DevOps について書くブログ

さっそく入手して自動生成ライフを満喫するんじゃー!!

https://github.com/tily/chef-serverspec-handler

環境とか

CentOS使っているので、そのままだとRubyが1.9系止まり。

$ cat /etc/redhat-release
CentOS release 6.7 (Final)

$ uname -a
Linux vagrant-centos65.vagrantup.com 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

rbenvで Ruby 2.0 を入れる

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv install -v 2.0.0-p647
$ rbenv global 2.0.0-p647
$ rbenv rehash

$ ruby -v
ruby 2.0.0p647 (2015-08-18 revision 51631) [x86_64-linux]

入った。

Chef DKのインストール

最新版出てるかもしれないから、確認してね。
https://downloads.chef.io/chef-dk/redhat/

$ wget https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chefdk-0.10.0-1.el6.x86_64.rpm
$ rpm -ivh chefdk-0.10.0-1.el6.x86_64.rpm

cookbook を集約

Berksfileに従って、各種レシピをcookbooksディレクトリに持ってくる。

$ mkdir cookbooks
$ berks vendor cookbooks/

chef-serverspec-handler で spec ファイル生成

$ gem install chef-serverspec-handler
$ chef-solo -c hoge.rb -j huga.json --why-run
$ /tmp/spec/target_recipe/default_spec.rb

上手に焼けましたー!

ファイルの中身はそれぞれこんな感じ。

$ cat hoge.rb
require 'chef-serverspec-handler'

here = File.absolute_path File.dirname(__FILE__)
cookbook_path File.join(here, 'cookbooks')
report_handlers << ChefServerspecHandler.new(output_dir: '/tmp/spec/')
$ cat huga.json
{
  "run_list": [
    "recipe[target_recipe]"
  ]
}