注意! v0.11.0 からは attr, attr_set ではなく、property, set_property とメソッド名が変更されています。attr, attr_set は近い将来使えなくなります。最新の情報はこちらを参照してください。
注意! ここで解説する方法は v0.3.0 から利用できます。
Provisioning Frameworks Casual Talks vol.1 に行ってきた #pfcasual - TAKUMI SAKAMOTO'S BLOG で触れられている attributes 周りについて、この辺は必要になるだろうなー、と前から思ってはいたので、それを実現するための極々簡単な仕組みを 試験的に実装してみた 。
これは単に attr_set
と attr
という2つのヘルパーメソッドを使えるようにしただけのものなんだけど、以下のような感じで使える。
今回は例として、ホスト毎に MySQL の server-id が外部ファイルで定義されていて、各サーバの /etc/my.cnf で正しく server-id が設定されているかをテストする、という状況を想定する。
属性値の定義は、今回は YAML ファイルで行うので、以下のような YAML ファイルを用意する。
次に、serverspec のテストをホスト間で共有する方法 と似たような感じで、YAML で定義されたロールに応じて適切なテストを行うような Rakefile
を書く。
そして spec_helper.rb
を以下のように書く。
attr_set attributes[c.host]
で属性値のセットを行っている。
最後に、属性値を参照して attr[:server_id]
が /etc/my.cnf
で定義されているかどうかをテストする spec を書く。
仕組みは単純なので、YAML.load_file
している部分を好きなように変えれば、自身の環境に合った使い方ができるでしょう。