Uncategorized

vagrant-serverspecを使ってサーバをテストする。

vagrantを使って作成したサーバをserverspecでテストします。
vagrant upでインスタンスの作成とサーバのテストを統合するためにvagrant-serverspecプラグインを使う手順です。

vagrant-serverspecでテストする手順

インストール

vagrant-serverspecプラグインをインストールします。

$ vagrant --version
Vagrant 1.8.1
$ vagrant plugin install vagrant-serverspec
Installing the 'vagrant-serverspec' plugin. This can take a few minutes...
Installed the plugin 'vagrant-serverspec (1.1.0)'!
$

テストケースの作成

serverspecのテストケースを書きます。

$ cat spec/vagrant_spec.rb
require 'serverspec'
set :backend, :ssh
describe package('vagrant') do
it { should be_installed }
end
$ 

テストケースの実行

Vagrantfileのprovisionに作成したserverspecのテストケースを追加します。

$ git diff Vagrantfile | grep \^[-+]
--- a/Vagrantfile
+++ b/Vagrantfile
+  # Test
+  config.vm.provision :serverspec do |spec|
+    spec.pattern = "spec/*_spec.rb"
+  end
$ 

vagrantの操作でserverspecのテストケースが実行されます。

$ vagrant provision
==> default: Running provisioner: serverspec...
.
Finished in 0.56938 seconds (files took 2.84 seconds to load)
1 example, 0 failures
$ 

serverspec-initで作った雛形が動かない

本当は、serverspec-initでVagrantfileから雛形を自動生成したかったのですがうまく動きませんでした。
解決には、至らなかったのですが試したことを残しておきます。

serverspecの雛形を作成

Vagrantfileが保存されているディレクトリでserverspec-initを実行します。
“Vagrant instance y/n:”に”y”と入力します。
“Auto-config”は、うまく動かないようなので”n”を入力してインスタンス名を入力すると雛形一式が作成されます。

$ 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: y
Auto-configure Vagrant from Vagrantfile? y/n: n
Input vagrant instance name: default
+ spec/
+ spec/default/
+ spec/default/httpd_spec.rb
+ spec/spec_helper.rb
$ find spec
spec
spec/spec_helper.rb
spec/default
spec/default/httpd_spec.rb
$ 

Vagrantfileにvagrant-serverspecの設定を追加

$ git diff Vagrantfile | grep \^[-+]
--- a/Vagrantfile
+++ b/Vagrantfile
+  # Test
+  config.vm.provision :serverspec do |spec|
+    spec.pattern = "spec/default/*_spec.rb"
+  end
$ 

実行

実行するとエラーになりました。

$ vagrant provision
==> default: Running provisioner: serverspec...
/home/ubuntu/git/vagrant/spec/spec_helper.rb:5:in `<top (required)>': uninitialized constant SpecInfra (NameError)
from /home/ubuntu/git/vagrant/spec/default/httpd_spec.rb:1:in `require'
from /home/ubuntu/git/vagrant/spec/default/httpd_spec.rb:1:in `<top (required)>'
...省略...
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/commands/provision/command.rb:29:in `execute'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/cli.rb:42:in `execute'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/environment.rb:302:in `cli'
from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/bin/vagrant:174:in `<main>'
$

生成されたspec_helper.rbのincludeのSpecInfraが見つけられないようです。

$ head spec/spec_helper.rb
require 'serverspec'
require 'pathname'
require 'net/ssh'
include SpecInfra::Helper::Ssh
include SpecInfra::Helper::DetectOS
RSpec.configure do |c|
if ENV['ASK_SUDO_PASSWORD']
require 'highline/import'
$ 

Ubuntu 14.04.2でserverspecは、aptのパッケージを入れています。
エラーメッセージからvagrantは、バンドルされている/opt/vagrant/embedded/gems/gemsを使っていることが原因かもしれません。
残念…

$ grep VERSION /etc/os-release | head -1
VERSION="14.04.2 LTS, Trusty Tahr"
$ dpkg -l | grep ruby | egrep "serverspec|specinfra"
ii  ruby-serverspec                     0.14.2-1                            all          RSpec tests for your servers configured by Puppet, Chef or anything else
ii  ruby-specinfra                      0.1.1-1                             all          Common layer for serverspec and configspec
$ 

コメント

  1. ksaito11 より:

    –provision-withを使うとserverspecだけ実行できました。
    “`
    $ vagrant provision –provision-with serverspec
    ==> default: Running provisioner: serverspec…
    ………………………………………………………………………………………………….
    Finished in 9.19 seconds (files took 2.75 seconds to load)
    112 examples, 0 failures
    $
    “`

タイトルとURLをコピーしました