serverspec を Solaris に対応([2013-03-25-1])させてから、
いくつかの matcher を書いて merge してもらったのでメモ。
merge してもらったのは以下の 4 つ。
- be_zfs
- have_svcprop / have_svcprops
- have_ipfilter_rule
- have_ipnat_rule
be_zfs
zfs の存在確認と、property の確認を行なえる matcher。
使用例
describe 'rpool' do # rpool が存在するか確認 it { should be_zfs } it do # rpool のプロパティの値を確認 should be_zfs.with({ 'mountpoint' => '/rpool', 'compression' => 'on', }) end end
have_svcprop / have_svcprops
svcprop でプロパティの値を確認する matcher。
have_svcprop と have_svcprops は確認するプロパティの渡し方の違い。
使用例
describe 'svc:/network/http:apache22' do # Single property it { should have_svcprop('httpd/enable_64bit').with_value('false') } # Multiple properties it do should have_svcprops( 'httpd/enable_64bit' => 'false', 'httpd/server_type' => 'worker', ) end end
have_svcprops は書きやすいけど、
テストに失敗したとき、どのプロパティの値がおかしいのかわからないので、
そのあたりが問題として残ってる。
have_ipfilter_rule
ipfstat -io の出力に指定したルールが含まれているか確認する。
使用例
describe 'ipfilter' do it { should have_ipfilter_rule('pass in quick on net0 proto tcp from any to any port = 80 keep state') } end
合わせて、contain matcher で /etc/ipf/ipf.conf などにルールが書かれているか
チェックすると、設定を書いていないのか、反映されていないのかわかってよいかもしれない。
have_ipnat_rule
ipnat -l の出力に指定したルールが含まれているか確認する。
使用例
describe 'ipnat' do it { should have_ipnat_rule('map net1 10.12.0.0/24 -> 0.0.0.0/32 portmap tcp/udp auto') } it { should have_ipnat_rule('map net1 10.12.0.0/24 -> 0.0.0.0/32') } end
have_ipfilter_rule と同様。