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]" ] }