Skip to content

Instantly share code, notes, and snippets.

@ftnk
Last active December 17, 2015 00:00
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ftnk/5518075 to your computer and use it in GitHub Desktop.
Save ftnk/5518075 to your computer and use it in GitHub Desktop.

serverspec と対象 OS について

serverspec と対象 OS についての覚え書き

テスト対象の OS が Auto Detect で見つからない

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 系ではない』を参照してください。

テスト対象が 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 に対応させる

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)

を追記します。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment