ログってなんぼ

日々のメモです

Serverspec:とにかくまず触ってみる編

ただ動かすだけなら簡単なんだよ〜怖くないんだよ〜という編

前提条件

  • ローカルマシンでruby,Vagrantが使えるようになっている
  • 同等環境のVM(OSディストリビューション等)が用意できる

Serverspecのインストール

$ gem install serverspec

初期化・使用準備

任意のディレクトリ内で初期化を実行。

$ 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: localvm
 + spec/
 + spec/localvm/
 + spec/localvm/sample_spec.rb
 + spec/spec_helper.rb
 + Rakefile
 + .rspec

上記例で言うとlocalvmが接続先のサーバーということになる。MacのターミナルからVagrantで起動したVMに対して実行したい場合、ssh可能なhost名を設定すること

自分の例

$ cat ~/.ssh/config
Host localvm
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/okisanjp/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

こちらの記事が大変わかり易いです

qiita.com

試しに実行

とりあえず動かしてみる

$ rake spec

Package "httpd"
  should be installed

Service "httpd"
  should be enabled
  should be running

Port "80"
  should be listening

Finished in 0.42585 seconds (files took 1.17 seconds to load)
4 examples, 0 failures

ぼくのVMではhttpdが動いているのでテストが通ってしまいました・・・

テストを書き換えてみる

require 'spec_helper'

describe package('httpd') do
  it { should be_installed }
end

describe package('php-devel') do
  it { should be_installed }
end

describe service('httpd') do
  it { should be_enabled }
  it { should be_running }
end

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

再度実行

php-develはインストールされていないのでエラーとなる

Package "httpd"
  should be installed

Package "php-devel"
  should be installed (FAILED - 1)

Service "httpd"
  should be enabled
  should be running

Port "80"
  should be listening

Failures:

  1) Package "php-devel" should be installed
     On host `localvm'
     Failure/Error: it { should be_installed }
       expected Package "php-devel" to be installed
       sudo -p 'Password: ' /bin/sh -c rpm\ -q\ php-devel
       package php-devel is not installed

     # ./spec/localvm/sample_spec.rb:8:in `block (2 levels) in <top (required)>'

Finished in 0.88333 seconds (files took 0.74089 seconds to load)
5 examples, 1 failure

テストが通るようにする

$ ssh localvm
Last login: Fri May 20 02:01:36 2016 from 10.0.2.2
[vagrant@localvm ~]$ sudo yum install php-devel

上記例では直接インストールしていますが、ansibleのplaybookやChefのレシピを書き換えるなどなど、やるべきことをやります

もう一回テスト

Package "httpd"
  should be installed

Package "php-devel"
  should be installed

Service "httpd"
  should be enabled
  should be running

Port "80"
  should be listening

Finished in 0.90884 seconds (files took 0.75339 seconds to load)
5 examples, 0 failures

OKです。

テストに使うリソースタイプ例

公式にすべて羅列されているのでこちら見るのが一番いいです

serverspec.org

膨大っす・・

ansibleにテストって要るのかな?(´・ω・`)

Serverspec

Serverspec