Giới thiệu gem Serverspec

1. Giới thiệu

Với Serverspec bạn có thể viết Rspec để test server của bạn đã được config đúng hay chưa.

Serverspec kiểm tra trạng thái server của bạn bằng các câu lệnh, SSH, WinRM, Docker API … Vì vậy bạn không cần phải cài đặt bất cứ phần mềm quản lý nào trên server cả (ví dụ: Puppet, Ansible, CFEngine, Itamae … ). Ngoài ra mục đích thực sự của Serverspec là tái cấu trúc hệ thống của bạn

2. Cài đặt

Add Gemfile:

gem “serverspec”

Chạy câu lệnh

$ bundle

hoặc

$ gem install serverspec

3. Cấu hình

$ serverspec-init
Select OS type:

  1) UN*X
  2) Windows

Select number: 1

Select a backend type:

  1) SSH
  2) Exec (local)

Select number: 1

Vagrant instance y/n: n
Input target host name: www.example.jp
 + spec/
 + spec/www.example.jp/
 + spec/www.example.jp/sample_spec.rb
 + spec/spec_helper.rb
 + Rakefile
 + .rspec

Bạn có thể viết test cho server ở file spec/www.example.jp/sample_spec.rb sẽ có nội dung :

require 'spec_helper'

describe package('httpd'), :if => os[:family] == 'redhat' do
  it { should be_installed }
end

describe package('apache2'), :if => os[:family] == 'ubuntu' do
  it { should be_installed }
end

describe service('httpd'), :if => os[:family] == 'redhat' do
  it { should be_enabled }
  it { should be_running }
end

describe service('apache2'), :if => os[:family] == 'ubuntu' do
  it { should be_enabled }
  it { should be_running }
end

describe service('org.apache.httpd'), :if => os[:family] == 'darwin' do
  it { should be_enabled }
  it { should be_running }
end

describe port(80) do
  it { should be_listening }
end

Serverspec với SSH sẽ login tới server dưới dạng là một user config ở file ~/.ssh/config hoặc người dùng hiện tại. Nếu bạn muốn thay đổi người dùng hãy sửa trong spec/spec_helper.rb

options[:user] ||= Etc.getlogin 

Chạy tests.

$ rake spec
/usr/bin/ruby -S rspec spec/www.example.jp/sample_spec.rb

Package "httpd"
  should be installed

Service "httpd"
  should be enabled
  should be running

Port "80"
  should be listening

Finished in 0.21091 seconds (files took 6.37 seconds to load)
4 examples, 0 failures

Đa nền tảng

Ngoài ra Serverspec còn hỗ trợ rất nhiều nền tảng hệ điều hành như :

  • AIX
  • Arch Linux
  • Darwin(Mac OS X)
  • Debian
  • Fedora/Red Hat/CentOS
  • FreeBSD
  • Gentoo Linux
  • NixOS
  • OpenBSD
  • openSUSE
  • Plamo Linux
  • SmartOS
  • Solaris
  • SUSE
  • Ubuntu
  • Windows

Nó cũng có thể tự động phát hiện hệ điều hành của máy chủ. Nhưng nếu bạn muốn set chính xác thì có thể dùng cách:

require 'serverspec'
set :os, :family => 'redhat', :release => '7', :arch => 'x86_64'

Sudo password

Nếu server của bạn yêu cầu tài khoản sudo bạn có thể chạy câu lệnh sau:

$ SUDO_PASSWORD=xxxxxxxx rake spec

4. Chú ý

Serverspec chỉ thích hợp cho 1 server đơn hoặc docker container Nếu bạn cho nhiều server gộp lại thì bạn cần phải viết rspec riêng cho mỗi máy