Installation

gem install serverspec

Konfiguration

Folgende Verzeichnisstruktur anlegen:

.
├── Rakefile
└── spec
    ├── spec_helper.rb
    └── test_spec.rb

Das Rakefile ist die eigentlich zu startende Datei und hat folgenden Inhalt:

require 'rake'
require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new(:spec, [:specfile]) do |t, args|
  t.pattern = "spec/#{args[:specfile]}_spec.rb"
end

task :default => :spec

In der spec_helper.rb wird die Verbindung zum zu testenden Zielhost definiert. Die Werte für sudo-pass, my.server.net, ssh-user und ssh-pass sind entsprechend anzupassen.

require 'serverspec'
require 'net/ssh'

set :backend, :ssh

set :sudo_password, 'sudo-pass'

host = 'my.server.net'

options = Net::SSH::Config.for(host)

options[:user] = 'ssh-user'
options[:password] = 'ssh-pass'
options[:port] = 22

set :host,        options[:host_name] || host
set :ssh_options, options

Die *_spec.rb-Dateien enthalten die eigentlichen Tests. Folgend ein Beispiel:

require 'spec_helper'

describe user('maxmuster') do
  it { should exist }
  it { should belong_to_group 'sudo' }
  it { should have_login_shell '/bin/bash' }
end

Tests

Tests haben immer das Muster:

describe resource_type(parameter) do
 test
end

Die Dokumentation der Resource Types und ihrer Parameter sind weitestgehend in der offiziellen Dokumentation beschrieben: http://serverspec.org/resource_types.html

Spezielle Tests

Nicht alle Resource Types sind in der offiziellen Dokumentation beschrieben. Folgend werden einige undokumentierte Testszenarien dargestellt.

docker_image

Mit folgender Abfrage lässt sich das Vorhandensein von Volumes prüfen:

describe docker_container('mycontainer') do
  it { should have_volume('/container/path/to/my.conf','/host/path/to/my.conf') }
end

Die Rückgabe von docker inspect lässt sich per JSON-Pfad untersuchen. Folgend ein paar Beispiele:

describe docker_container('mycontainer') do
  its(['HostConfig.PortBindings']) { should include '8080/tcp' }
  its(['HostConfig.PortBindings.8080/tcp.[0].HostPort']) { should eq '8081' }

  its(['HostConfig.VolumesFrom']) { should include 'mycontainer-data' }

  its(['HostConfig.Links']) { should include '/othercontainer:/mycontainer/othercontainer' }
end
Tags:
Erstellt von Thomas Steinbach am 2016/03/17 20:24
    
Copyright 2004-2019 XWiki
7.4.5