ServerspecでMacの開発環境をテストする(AnsibleのPlaybooks利用)

photo credit: gremionis via photopin cc

photo credit: gremionis via photopin cc

前回、ServerspecでMacの開発環境をテストするでServerspecでMacの開発環境をテストした。

ただ前回はwhich xyzを実行することで、ディレクトリの存在チェックをしていたが、でServerspecにはインストールされているかどうか確認するメソッドがあるので、それで書き直してみた。

$ serverspec-init

で生成したsample_spec.rbruby_spec.rbに書き換え、内容を以下のように変更する。

require 'spec_helper'

ruby_gems.each do |package|
  describe package(package) do
    it { should be_installed.by('gem') }
  end
end

homebrewの内容もテストしたいので、homebrew_spec.rbを追加し、以下のように記載する。

require 'spec_helper'

homebrew_packages.each do |package|
  describe package(package) do
    it { should be_installed }
  end
end

上記で利用するメソッドをspec_helper.rbに以下のように定義する。

require 'serverspec'
require 'yaml'

set :backend, :exec

def load_configuration (key)
  config = YAML.load_file 'development.yml'
  config[0]['vars'][key].map do | package |
    package.kind_of?(Hash) ? package['name'] : package
  end
end

def homebrew_packages
  load_configuration 'homebrew_packages'
end

def ruby_gems
  load_configuration 'ruby_gems'
end

設定ファイルのdevelopment.ymlはAnsibleのPlaybooksのフォーマットを完全ではないものの踏襲している。

- hosts: localhost
  vars:
    homebrew_packages:
      - ansible
      - autoconf
      - git
      - openssl
      - rbenv
      - readline
      - ruby-build
      - sqlite
      - the_silver_searcher
    ruby_gems:
      - bundler
      - rails
      - rake
      - rspec
      - rubocop
      - serverspec
      - sqlite3

この状態でrakeを実行すると以下のようにすべてのテストを実行する。

$ rake
:
Package "ansible"
  should be installed
:
Package "serverspec"
  should be installed

Package "sqlite3"
  should be installed

Finished in 5.97 seconds (files took 2.62 seconds to load)
16 examples, 0 failures

上記の通り、すべてのテストをパスしているので、homebrewのパッケージやrubygemがインストールされていることをテストで確認できた。

関連情報