ほわいとぼーど

ぷろぐらまのメモ帳

Windows環境のVagrantでsynced_folder時にpermission設定する話

最近、Ansibleを使い始めていてその時に起きた問題。

自分は例のごとくWindows環境なのでChefとかのレシピはWindows上でEditorで書いて、
実行はVagrantで立てたVM内にsynced_folderでレシピのレポジトリを同期して
VMからVMに対してknife-soloとかしていました。

当然、Ansibleでも同様の方法でやろうとしたのですが、
特に設定しないとsynced_folderで同期したフォルダ内のファイル権限が0777になっていて、
Ansibleはhostsとして指定されたファイルに実行権限が付いていると怒られる。

ERROR: The file hosts is marked as executable, but failed to execute correctly. If this is not supposed to be an executable script, correct this with `chmod -x hosts`.

Dynamic Inventoryとして判定してるのにDynamic Inventoryとして有効じゃない!みたいなことらしい。
もちろん、Dynamic Inventoryの要件を満たしていれば問題ないのだけれど、ここで指定しているのは通常のhosts形式

これはAnsibleの問題というよりVagrantのsynced_folderの問題なので、
Tweetで憂さ晴らしせずにさっさとググッたらすぐ解決するという話。

以下のように指定する。

guest.vm.synced_folder "ansible-repo", "/vagrant", :mount_options => ["dmode=777","fmode=666"]

これでhostsファイルの権限が0666になったので問題なく実行できるようになった。
試してないけど他にowner/groupも指定できるようである。

そういやAnsible meetup tokyo参加報告書いてないなと思いつつ、そっとじ