chef/cookbooks/postgresql/recipes/config_initdb.rb
#
# Cookbook Name:: postgresql
# Recipe:: config_initdb
# Author:: David Crane (<davidc@donorschoose.org>)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#######
# Load the locale_date_order() and select_default_timezone(tzdir)
# methods from libraries/default.rb
::Chef::Recipe.send(:include, Opscode::PostgresqlHelpers)
#######
# This recipe is derived from the setup_config() source code in the
# PostgreSQL initdb utility. It determines postgresql.conf settings that
# conform to the system's locale and timezone configuration, and also
# sets the error reporting and logging settings.
#
# See http://doxygen.postgresql.org/initdb_8c_source.html for the
# original initdb source code.
#
# By examining the system configuration, this recipe will set the
# following node.default['postgresql']['config'] attributes:
#
# - Locale and Formatting -
# * datestyle
# * lc_messages
# * lc_monetary
# * lc_numeric
# * lc_time
# * default_text_search_config
#
# - Timezone Conversion -
# * log_timezone
# * timezone
#
# In addition, this recipe will recommend the same error reporting and
# logging settings that initdb provided. These settings do differ from
# the PostgreSQL default settings, which would log to stderr only. The
# initdb settings rotate 7 days of log files named postgresql-Mon.log,
# etc. through these node.default['postgresql']['config'] attributes:
#
# - Where to Log -
# * log_destination = 'stderr'
# * log_directory = 'pg_log'
# * log_filename = 'postgresql-%a.log'
# (Default was: postgresql-%Y-%m-%d_%H%M%S.log)
# * logging_collector = true # on
# (Turned on to capture stderr logging and redirect into log files)
# (Default was: false # off)
# * log_rotation_age = 1d
# * log_rotation_size = 0
# (Default was: 10MB)
# * log_truncate_on_rotation = true # on
# (Default was: false # off)
#######
# Locale Configuration
# See libraries/default.rb for the locale_date_order() method.
node.default["postgresql"]["config"]["datestyle"] = "iso, #{locale_date_order()}"
# According to the locale(1) manpage, the locale settings are determined
# by environment variables according to the following precedence:
# LC_ALL > (LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) > LANG.
node.default["postgresql"]["config"]["lc_messages"] =
[ENV["LC_ALL"], ENV["LC_MESSAGES"], ENV["LANG"]].compact.first
node.default["postgresql"]["config"]["lc_monetary"] =
[ENV["LC_ALL"], ENV["LC_MONETARY"], ENV["LANG"]].compact.first
node.default["postgresql"]["config"]["lc_numeric"] =
[ENV["LC_ALL"], ENV["LC_NUMERIC"], ENV["LANG"]].compact.first
node.default["postgresql"]["config"]["lc_time"] =
[ENV["LC_ALL"], ENV["LC_TIME"], ENV["LANG"]].compact.first
node.default["postgresql"]["config"]["default_text_search_config"] =
case ENV["LANG"]
when /da_.*/
"pg_catalog.danish"
when /nl_.*/
"pg_catalog.dutch"
when /en_.*/
"pg_catalog.english"
when /fi_.*/
"pg_catalog.finnish"
when /fr_.*/
"pg_catalog.french"
when /de_.*/
"pg_catalog.german"
when /hu_.*/
"pg_catalog.hungarian"
when /it_.*/
"pg_catalog.italian"
when /no_.*/
"pg_catalog.norwegian"
when /pt_.*/
"pg_catalog.portuguese"
when /ro_.*/
"pg_catalog.romanian"
when /ru_.*/
"pg_catalog.russian"
when /es_.*/
"pg_catalog.spanish"
when /sv_.*/
"pg_catalog.swedish"
when /tr_.*/
"pg_catalog.turkish"
else
nil
end
#######
# Timezone Configuration
# Determine the name of the system's default timezone and specify node
# defaults for the postgresql.cof settings. If the timezone cannot be
# identified, do as initdb would do: leave it unspecified so PostgreSQL
# uses it's internal default of GMT.
tzdirpath = pg_TZDIR() # See libraries/default.rb
default_timezone = select_default_timezone(tzdirpath) # See libraries/default.rb
if !default_timezone.nil?
node.default["postgresql"]["config"]["log_timezone"] = default_timezone
node.default["postgresql"]["config"]["timezone"] = default_timezone
end
#######
# - Where to Log -
node.default["postgresql"]["config"]["log_destination"] = "stderr"
node.default["postgresql"]["config"]["log_directory"] = "pg_log"
node.default["postgresql"]["config"]["log_filename"] = "postgresql-%a.log"
node.default["postgresql"]["config"]["logging_collector"] = true # on
node.default["postgresql"]["config"]["log_rotation_age"] = "1d"
node.default["postgresql"]["config"]["log_rotation_size"] = 0
node.default["postgresql"]["config"]["log_truncate_on_rotation"] = true # on