Skip to content

Instantly share code, notes, and snippets.

@ando-masaki
Created November 25, 2013 13:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ando-masaki/7641311 to your computer and use it in GitHub Desktop.
Save ando-masaki/7641311 to your computer and use it in GitHub Desktop.
serverspecの高度なヒント ref: http://qiita.com/ando-masaki/items/0269daa47fe7ffb4c723
|-- Rakefile
`-- spec
|-- spec_helper.rb
`-- www.example.jp
`-- httpd_spec.rb
|-- Rakefile
`-- spec
|-- app
| `-- ruby_spec.rb
|-- base
| `-- users_and_groups_spec.rb
|-- db
| `-- mysql_spec.rb
|-- proxy
| `-- nginx_spec.rb
`-- spec_helper.rb
require 'spec_helper'
describe file('/etc/my.cnf') do
it { should contain "server-id = #{property[:server_id]}" }
end
RSpec.configure do |c|
c.path = '/sbin:/usr/sbin'
...
describe package('jekyll') do
let(:path) { '/usr/local/rbenv/shims' }
it { should be_installed.by('gem') }
end
describe service('httpd') do
let(:pre_command) { 'source ~/.zshrc' }
it { should be_running }
end
$ rake serverspec:サブドメイン
例)
$ rake serverspec:proxy001
$ rake serverspec:proxy002
$ rake serverspec:app001
$ rake serverspec:app002
$ rake serverspec:db001
$ rake serverspec:db002
db001.example.jp:
:roles:
- base
- db
:server_id: 101
db002.example.jp:
:roles:
- base
- db
:server_id: 102
$ rake serverspec:all
$ rake serverspec:all -t
require 'spec_helper'
describe file('/etc/my.cnf') do
it { should contain "server-id = #{property[:server_id]}" }
end
db001.example.jp:
:roles:
- base
- db
:server_id: 101
db002.example.jp:
:roles:
- base
- db
:server_id: 102
RSpec.configure do |c|
c.path = '/sbin:/usr/sbin'
...
describe package('jekyll') do
let(:path) { '/usr/local/rbenv/shims' }
it { should be_installed.by('gem') }
end
require 'rake'
require 'rspec/core/rake_task'
require 'yaml'
properties = YAML.load_file('properties.yml')
desc "Run serverspec to all hosts"
task :serverspec => 'serverspec:all'
namespace :serverspec do
task :all => properties.keys.map {|key| 'serverspec:' + key.split('.')[0] }
properties.keys.each do |key|
desc "Run serverspec to #{key}"
RSpec::Core::RakeTask.new(key.split('.')[0].to_sym) do |t|
ENV['TARGET_HOST'] = key
t.pattern = 'spec/{' + properties[key][:roles].join(',') + '}/*_spec.rb'
end
end
end
require 'serverspec'
require 'pathname'
require 'net/ssh'
require 'yaml'
include Serverspec::Helper::Ssh
include Serverspec::Helper::DetectOS
include Serverspec::Helper::Properties
properties = YAML.load_file('properties.yml')
RSpec.configure do |c|
c.host = ENV['TARGET_HOST']
set_property properties[c.host]
options = Net::SSH::Config.for(c.host)
user = options[:user] || Etc.getlogin
c.ssh = Net::SSH.start(c.host, user, options)
c.os = backend.check_os
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment