serverspec v2で複数ホストにrole別にtest実行
serverspec v1からv2でいくつか変更点があり、v1のソースではそのまま実行できない箇所があったので、変更点を見つつ v2 で基本的なテストを実行できるようにした。
ディレクトリ構成は下記の通り。最低限のwebのテストを用意する。
├── Gemfile ├── Gemfile.lock ├── Rakefile ├── properties.yaml ├── spec │ ├── spec_helper.rb │ └── web │ └── node_spec.rb
Rakefile では ask を使って sshのusernameとpasswordを聞いておき、properties.yamlをロードしてホスト情報をRakeTaskに渡しておく。
require 'rake' require 'rspec/core/rake_task' require 'yaml' require 'highline/import' properties = YAML.load_file('properties.yaml') ENV['SSH_USER'] = ask("Enter ssh user: ") { |q| q.echo = true } ENV['SSH_PASSWORD'] = ask("Enter ssh password: ") { |q| q.echo = false } desc "Run serverspec to all hosts" task :serverspec => 'serverspec:all' namespace :serverspec do task :all => properties.keys.map {|key| 'serverspec:' + key } properties.keys.each do |key| desc "Run serverspec to #{key}" RSpec::Core::RakeTask.new(key.to_sym) do |t| ENV['TARGET_HOST'] = properties[key][:hostname] t.pattern = 'spec/{' + properties[key][:roles].join(',') + '}/*_spec.rb' end end end
properties.yaml では hostname と rolesを定義しておく
################################ # staging ################################ stg-hoge-web01: :roles: - web :hostname: hogeweb01 stg-hoge-web02: :roles: - web :hostname: hogeweb02
spec_helper.rb で、ssh_optionsを組み立てて渡してあげる。
v2から使えるようになった記述にコメントしています。
# coding: utf-8 require 'serverspec' require 'pathname' require 'net/ssh' require 'yaml' set :backend, :ssh # v2から set :path, '/sbin:/usr/sbin:$PATH' # v2から RSpec.configure do |c| c.before :all do set :host, ENV['TARGET_HOST'] options = Net::SSH::Config.for(c.host) options[:user] = ENV['SSH_USER'] options[:password] = ENV['SSH_PASSWORD'] set :ssh_options, options # v2から end end
後は、テスト本体のコードをガリガリ書いていけばおk。
とりあえず確認用に簡単なテストコードを書いて実行すれば無事テスト通った。
require 'spec_helper' describe package('nodejs') do it { should be_installed } end describe port(2000) do it { should be_listening } end
- 作者: 宮下剛輔
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/01/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る