ChefでPostgreSQLのユーザを作成する
いろいろ調べてみると、opscodeにdatabaseっていうレシピがあるのでこれを利用する。
Berksfileに追加
この二行を追加。
cookbook 'openssl' cookbook 'database'
posetgresqlは当然もう入ってるはず。opensslはいれないとなんだか妙なエラーがでるんですわ。こんなエラー。
FATAL: NameError: uninitialized constant Chef::Recipe::Opscode
このエラーで検索すると、https://github.com/coroutine/chef-postgresql/issues/10 がヒット。言うとおりにしました。
Berksfileを更新したらberksを実行。
$ berks
レシピを作成する。
ユーザ作成用のレシピを作成します。
$ knife cookbook create postgres_user -o site-cookbooks/
作成したcookbookに依存関係を記述。
先ほど作成したsite-cookbook/postgres_user/metadata.rbに以下の三行を追加。
depends 'database' depends 'postgresql' depends 'openssl'
レシピを記述
site-cookbook/postgres_user/recipe/default.rbはこんな。
include_recipe "openssl" include_recipe "database::postgresql" postgresql_connection_info = { :host => "127.0.0.1", :port => 5432, :username => 'postgres', :password => 'password' } postgresql_database_user "hoge" do connection postgresql_connection_info privileges [:all] database_name 'fuga' password "password" action [:create, :grant] end
knifeで実行
$ knife solo cook iyo -o postgres-user
で、いまはgrantだけをしたんだけどどうやったらいいやら。