なるようにしかならん

そういうことです

be_owned_by が非推奨になっているぽい話

最近、環境の再構築やら環境移設やらでchefに戻っているワタシですが、タイトルの件でハマったのでメモしておく。
ちなみに手元のrspecは3.0.3だった。

まさに
http://inokara.hateblo.jp/entry/2013/05/04/024224
こちらなどを参考にさせていただきながら、nginxの設定ファイルをtemplateリソースを使って配置する処理に対して、

expect(chef_run).to create_template "/etc/nginx/nginx.conf"
file = chef_run.template("/etc/nginx/nginx.conf")
expect(file.mode).to eq("0644")
expect(file).to be_owned_by('root','root')

とか書いていたら、

Failure/Error: expect(file).to be_owned_by('root','root')
expected template[/etc/nginx/nginx.conf] to respond to `owned_by?`

と、怒られた。あれみんなこう書いてるんじゃないの?

調べてみると、以下の様なドキュメントがすぐに出てくる。
http://rubydoc.info/github/sethvargo/chefspec/ChefSpec/API/DeprecatedMatchers

なるほど非推奨っぽい。んで推奨の書き方は何だろ?と思ったんだけど、ぱっと見わからず。。
(ドキュメント慣れというのが必要だとこの後知った。)


なのでGitHubでソース見てたら、次のように書けとあった。

expect(chef_run).to create_template "/etc/nginx/conf.d/#{type}-proxy.conf"
file = chef_run.template("/etc/nginx/conf.d/#{type}-proxy.conf")
expect(file.mode).to eq("0644")
expect(file.owner).to eq('root')
expect(file.group).to eq('root')

これでうまくいった。

その後、公式ドキュメントのview sourceってのを開いてみると、まさに探していたものがあった。
view on GitHubの方、リンク切れてたもんで、なんだこれと思って他をあたってしまったのが時間のロスだった。。


chefspecの使い方書いてくださってる情報は結構日本語も多くて助かっていたんだけど、この辺は古いままだったりするので注意が必要すね。