ServerSpecのロールを少しだけ工夫した話

こんにちは
最近、遅刻が多いのでフレックスが無くなった大曲です

遅刻には気をつけましょう!!
 

自分のことはどこかに置いておいて、皆さんServerSpecのRoleは御存知ですか?
恥ずかしい話私は最近知りました

http://serverspec.org/advanced_tips.html

最近知った内容としては、以下の二つです
* sudo なしの設定
* サーバ単位だったディレクトリがロールごとに設定

今回は、自分が担当しているサービスに適応させるために
Roleを少しだけいじったお話をします
 

自分が担当しているサービスの中には、
既存のサービスのクローンみたいなサービスがあるのでサーバ構成が酷似している状況があります
そんなサービスに対してインフラの整備をするために、
ServerSpecを使って管理をしたいと考えました
そこでServerSpecのRoleの存在を知ったので少しだけ導入してみました

とりあえず、以下の二つのことやり遂げようと考えました 

  • 一つのServerSpecのリポジトリで管理したい
  • なるべくサービス間での共通の部分は一つに纏めたい

ロールの設定に関して

ロールの設定をyamlに記入します
ホスト名を基準にしています
ここでは新たにGroupを追加しています
(groupがサービスごとの単位としています)

hoge-web-001:
  :group: hoge
  :roles:
    - base
    - web
hoge-db-001:
  :group: hoge
  :roles:
    - base
    - db
  :server_id: 215
fuga-web-001:
  :group: fuga
  :roles:
    - base
    - web

Rakefile ( ymlファイルを読み取り実行すべきファイルを選択する )



ディレクトリ構造
Roleごとにフォルダがあり
groupごとでテストのファイルが存在します

|-- Rakefile
`-- spec
    |-- web
    |   `-- common_httpd_spec.rb
    |   `-- fuga_httpd_spec.rb
    |   `-- hoge_httpd_spec.rb
    |-- base
    |   `-- common_users_and_groups_spec.rb
    |   `-- fuga_users_and_groups_spec.rb
    |   `-- hoge_users_and_groups_spec.rb
    |-- db
    |   `-- common_mysql_spec.rb
    |   `-- fuga_mysql_spec.rb
    |   `-- hoge_mysql_spec.rb
    `-- spec_helper.rb

これで各サービスに応じたテストを実行することが出来るようになりました。
 
$ rake serverspec:hoge-db-001 

を実行すると以下のファイルのテストが実行されます

common_users_and_groups_spec.rb

hoge_users_and_groups_spec.rb

common_mysql_spec.rb

hoge_mysql_spec.rb
 

fuga_mysql_spec.rb と fuga_users_and_groups_spec.rb は呼ばれることはありません



最初にあげたやりたいことは、ある程度は形に出来たかなと思います

一つのServerSpecのリポジトリで管理したい
→ groupで実行するファイルを分けられるので一つのリポジトリに纏められる

なるべくサービス間でも共通の部分は一つに纏めたい

→ common_*.rb のファイルに纏めることができる


本来はサービスごとリポジトリを分けるのが正しいとも思いますが面倒なのでこんな構成にしました

とりあえず、少しだけですが工夫していました
ただ果たしてこれでいいのか分かりません
 

さて、明日はYAPC::Asia2014に行きます
本当は今日も行きたかったです