149 lines
4.9 KiB
Ruby
149 lines
4.9 KiB
Ruby
#
|
|
# 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
|