serverspec と対象 OS についての覚え書き
2013-05-05 現在、serverspec の Auto Detect が対応しているのは以下の OS。
- RedHat
- Amazon Linux 含む
- Debian
- Gentoo
- Solaris
- Oracle Solaris 11.1 でテスト
これらは lib/serverspec/backend/exec.rb の check_os で以下のように判別されている。
def check_os
if run_command('ls /etc/redhat-release')[:exit_status] == 0
'RedHat'
elsif run_command('ls /etc/system-release')[:exit_status] == 0
'RedHat' # Amazon Linux
elsif run_command('ls /etc/debian_version')[:exit_status] == 0
'Debian'
elsif run_command('ls /etc/gentoo-release')[:exit_status] == 0
'Gentoo'
elsif run_command('uname -s')[:stdout] =~ /SunOS/i
'Solaris'
end
end
テスト対象の OS の Auto Detect ができない場合、 ここに対象 OS を判別するコードを追加しましょう。
対象の OS が RedHat/Debian/Gentoo/Solaris 系であり、 それぞれの command で正しくテストできるなら、 それらの OS を指定します。
対象の OS が RedHat/Debian/Gentoo/Solaris 系でない場合、 次の『テスト対象が RedHat/Debian/Gentoo/Solaris 系ではない』を参照してください。
テスト対象 OS が RedHat/Debian/Gentoo/Solaris 系ではない場合、 lib/serverspec/commands/(OS 名).rb に その OS 用の command を定義する必要がでてきます。
command の定義は、OS やディストリビューションに依存しないものは lib/serverspec/commands/base.rb に定義し、 OS やディストリビューションに依存するものは lib/serverspec/commands/(OS・ディストリビューション名).rb に base.rb を継承した上で定義します。
(現在、SELinux や Linux の kernel parameter など Linux に依存するものも base.rb に定義されていますが、これらは linux.rb にわける方向で @ftnk が作業予定です。)
FreeBSD に対応させる想定で、OS の追加方法を見ていきます。
追加するファイルは
- lib/serverspec/commands/freebsd.rb
- FreeBSD 固有の command を定義するファイル
- lib/serverspec/helper/freebsd.rb
- spec/freebsd/commands_spec.rb
- 生成される command のテスト
- base.rb および freebsd.rb に定義されている command を網羅する必要があります
- spec/freebsd/matchers_spec.rb
- matcher のテスト
- base.rb および freebsd.rb に定義されている command を網羅する必要があります
の 4 つになります。
それぞれに書く内容は他の OS・ディストリビューションを参照すればわかるかと思います。
また、lib/serverspec/commands/freebsd.rb を読み込むために、 lib/serverspec.rb を編集し、以下を追記する必要があります。
require 'serverspec/commands/freebsd'
lib/serverspec/helper/freebsd.rb を読み込むため、 lib/serverspec/helper.rb に
require 'serverspec/helper/freebsd'
を追記し、lib/serverspec.rb に
c.include(Serverspec::Helper::FreeBSD, :os => :freebsd)
を追記します。