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だけをしたんだけどどうやったらいいやら。