MongoDBユーザを作成するChefレシピ

MongoDBユーザを作成するレシピを書こうとしたら手こずった。

公式レシピではユーザを作成するようなリソースはないようだ。

なのでしょうがないくbashリソースを使って作成することにした。

それが以下だ。

 bash 'create MongoDB user' do
   user 'vagrant'
   group 'vagrant'
   cwd '/home/vagrant'
   code <<-EOC
     mongod --fork -f mongod.conf
     sleep 10s #mongoが立ち上がるまで少し待つ..
     mongo localhost:27017/test  --eval 'if(db.system.users.find({"user":"myuser"   }).count()==0){db.addUser({user:"myuser",      pwd:"pass", roles:["readWrite"]})}'
     mongo localhost:27017/admin --eval 'if(db.system.users.find({"user":"adminuser"}).count()==0){db.addUser({user:"adminuser",   pwd:"pass", roles:["clusterAdmin", "userAdminAnyDatabase",  "dbAdminAnyDatabase", "readWriteAnyDatabase" ]})}'
   EOC
 end

中々酷いコードだ。。もっとスマートにやりたいが他に方法はあるのだろうか?

ちなみにmongod.conf内でauth=trueにしている。

なので、管理者ユーザは最後に作るようにしているのがポイント。

※もしかしたらもうすぐmongo_userリソースが入るかもしれない:)

https://github.com/edelight/chef-mongodb/issues/225