RSpec tests for your servers provisioned by Puppet, Chef or anything else
You can see the details of serverspec on serverspec.org.
Add this line to your application's Gemfile:
gem 'serverspec'
And then execute:
$ bundle
Or install it yourself as:
$ gem install serverspec
$ serverspec-init
Select a backend type:
1) SSH
2) Exec (local)
Select number: 1
Input target host name: www.example.jp
Select OS type of target host:
1) Auto Detect
2) Red Hat
3) Debian
4) Gentoo
5) Solaris
Select number: 1
+ spec/
+ spec/www.example.jp/
+ spec/www.example.jp/httpd_spec.rb
+ spec/spec_helper.rb
+ Rakefile
spec/www.example.jp/httpd_spec.rb is a sample spec file and its content is like this.
require 'spec_helper'
describe 'httpd' do
it { should be_installed }
it { should be_enabled }
it { should be_running }
end
describe 'port 80' do
it { should be_listening }
end
describe '/etc/httpd/conf/httpd.conf' do
it { should be_file }
it { should contain "ServerName www.example.jp" }
end
You can write spec for testing servers like this.
Serverspec with SSH backend logs in to target servers as a user configured in ~/.ssh/config
or a current user.If you'd lile to change the user, please edit the below line in spec/spec_helper.rb
.
user = options[:user] || Etc.getlogin
Run tests.
$ rake spec
/usr/bin/ruby -S rspec spec/www.example.jp/httpd_spec.rb
......
Finished in 0.99715 seconds
6 examples, 0 failures
Serverspec is supporting Red Hat based OS, Debian based OS, Gentoo and Solaris.
Serverspec can detect target host's OS automatically.
If you'd like to set target host's OS explicitly, you should include Serverspec::Helper::OSName
in spec/spec_helper.rb
like this.
require 'serverspec'
require 'pathname'
require 'net/ssh'
RSpec.configure do |c|
# Include backend helper
c.include(Serverspec::Helper::Ssh)
# Include OS helper
c.include(Serverspec::Helper::Debian)
# Add SSH before hook in case you use the SSH backend
# (not required for the Exec backend)
c.before do
host = File.basename(Pathname.new(example.metadata[:location]).dirname)
if c.host != host
c.ssh.close if c.ssh
c.host = host
options = Net::SSH::Config.for(c.host)
user = options[:user] || Etc.getlogin
c.ssh = Net::SSH.start(c.host, user, options)
end
end
end
You can select Serverspec::Helper::RedHat, Serverspec::Helper::Debian, Serverspec::Helper::Gentoo or Serverspec::Helper::Solaris.
See details on serverspec.org
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request