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 と同様。