ということで、いろいろと考えている。
まずは、どうテストを書けるといいのかが決まらない。
すでにある Serverspec の resource type を参考にすると、
こんな感じに書けるのがよさそう。
describe zfs('rpool/export/home/foo') do it { should be_allowed('create,mount,snapshot').to_user('foo') } it { should be_allowed('create,mount,snapshot').to_group('staff') } it { should be_allowed_at_create_time('destroy') } end
または its 形式にして、こんな感じ。
its(:user_permission) { should include('foo' => 'create,mount,snapshot' ) } its(:group_permission) { should include('staff' => 'create,mount,snapshot' ) } its(:create_time_permission) { should eq 'destroy' }
'create,mount,snapshot' などの permission 部分を文字列にしてしまうと、
describe zfs('rpool/export/home/foo') do it { should_not be_allowed('rollback,hold').to_user('foo') } end
のようなテストができないし、permission の順番も問題になるので、
配列にした方がいいかもしれない。
完全一致のテストでよければ文字列でよい。
次に、zfs allow の出力の問題。
手元で適当に zfs allow で permission を設定してみた後の zfs allow の出力は以下。
tonaka@x230% zfs allow tank/test20150321/test_01/a ---- Permissions on tank/test20150321/test_01/a ---------------------- Local permissions: user tonaka destroy,rollback,snapshot ---- Permissions on tank/test20150321/test_01 ------------------------ Create time permissions: rollback Local permissions: user tonaka destroy Local+Descendent permissions: user tonaka snapshot ---- Permissions on tank/test20150321 -------------------------------- Create time permissions: destroy,snapshot Local+Descendent permissions: user tonaka create,mount group staff create,mount
各 zfs の path に対して何が allow されたかが出力されて、
上からの継承分を含めて何が allow されているかは出力されない。
そのため、ある zfs の path の上からの継承分を含めた allow をテストしたい場合は
parse してごにょごにょして求める必要がある。
ある zfs の path の上からの継承分を含めた allow をテストするのではなく、
ある zfs の path に対して zfs allow が実行されているかをテストするなら、
その path の 'Create time permissions' と 'Local+Descendent permissions' を
確認すればよい。
どっちにするか?って話になると、両方できた方がよいということになってしまうが、
『ある zfs の path に対して zfs allow が実行されているかをテストする』の方が、
テストに失敗した時に何をすればいいのかわかりやすい分よい気がする。
別にまとめた方がいいけど、zfs allow で表示される permission の種類は以下。
- Create time permissions:
zfs allow -c で許可された permission。
その zfs の下位の zfs を create すると、この permission がつく。
- Local+Descendent permissions:
zfs allow で許可された permission。
- Local permissions:
zfs が create された際に Create time permissions でついた permission