serverspec (2)

以下から取得した wordpress の chef な recipe を serverspec な試験を書いてみるために確認中です。

ちなみに作業手順としては以下なエントリに列挙されているもので良いのかな。

上記 wordpress な recipe のリポジトリからは chef-solo なディレクトリを作成した後に chef-solo/cookbooks ディレクトリの中で clone をする模様。
で、昨晩は起点を apache2 な recipe にしてますね。あまり理由は無いです。

先頭から

まず、パケジを導入。

package "apache2" do
  package_name node['apache']['package']
end

ちょっとおおまかに流れを確認してみます。箇条書きで列挙。

  • apache2 パケジ導入 (?)
  • apache2 なサービスを enable に
    • 導入時点では start はしていない
    • これは WP の設定が終わってから、という意図と理解
  • プラットフォーム特有の処理
    • これって、でびあん系でないと駄目って思っていたのですがそうでもないのかな
    • rhelfedora、arch、susefreebsd な分岐が見える
  • ディレクトリの処理
  • テンプレートの処理
  • node['apache']['default_modules'] 毎に recipe を読み込んで実行 (?)
  • apache_site "default" とは何か
  • 最後に service を start してますね

default_modules

cookbooks/apache2/attributes/default.rb で以下な記述がありますね。

# Default modules to enable via include_recipe

default['apache']['default_modules'] = %w{
  status alias auth_basic authn_file authz_default authz_groupfile authz_host authz_user autoindex
  dir env mime negotiation setenvif
}

むむ。こいつらが、という試験も、なのか。ちょっと掘ってみます。例えば cookbooks/apache2/recipes/mod_status.rb が以下。
# コメント略させて頂いてます

apache_module "status" do
  conf true
end

ええと、cookbooks/apache2/definitions/apache_module.rb の先頭あたりが以下。

define :apache_module, :enable => true, :conf => false do
  include_recipe "apache2"

  params[:filename] = params[:filename] || "mod_#{params[:name]}.so"
  params[:module_path] = params[:module_path] || "#{node['apache']['libexecdir']}/#{params[:filename]}"

  if params[:conf]
    apache_conf params[:name]
  end

ええと、params[:name] は status って理解で良いのかな。params[:conf] は true なので apache_conf というソレが呼び出されるのかどうか。定義は cookbooks/apache2/definitions/apache_conf.rb になる模様。
手続き部分のみ引用させて頂きます。

define :apache_conf do
  template "#{node['apache']['dir']}/mods-available/#{params[:name]}.conf" do
    source "mods/#{params[:name]}.conf.erb"
    notifies :restart, "service[apache2]"
    mode 0644
  end
end

そうか、params[:conf] が true なら設定ファイルがあるのでよしなに、という事なんですね。つうことは mod_status.rb の場合は少なくとも設定ファイルの存在チェックな試験が必要、ということになるのか。で、上で一気に導入されているソレ達は enable にはされていないのでとりあえず設定ファイルが投入されるもののみ確認すれば良い、という事になるのかな。

とりあえず

別途で apache2 単体であればどんな試験を書くべきなのか、を検討してみて動作確認もしてみたいと思ってます。