From 127bbb52c27974a9ea5558b52731abe08bda90a1 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 22 Jan 2023 10:55:59 +0000 Subject: [PATCH] Handle configuration of standby servers in Postgres 12 and later --- cookbooks/postgresql/recipes/default.rb | 38 +++++++++++++------ .../templates/default/postgresql.conf.erb | 11 ++++++ 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/cookbooks/postgresql/recipes/default.rb b/cookbooks/postgresql/recipes/default.rb index a57e1b348..07e59cbce 100644 --- a/cookbooks/postgresql/recipes/default.rb +++ b/cookbooks/postgresql/recipes/default.rb @@ -33,12 +33,25 @@ node[:postgresql][:versions].each do |version| defaults = node[:postgresql][:settings][:defaults] || {} settings = node[:postgresql][:settings][version] || {} + standby_mode = settings[:standby_mode] || defaults[:standby_mode] + primary_conninfo = settings[:primary_conninfo] || defaults[:primary_conninfo] + restore_command = settings[:restore_command] || defaults[:restore_command] + + passwords = if primary_conninfo + data_bag_item(primary_conninfo[:passwords][:bag], + primary_conninfo[:passwords][:item]) + end + template "/etc/postgresql/#{version}/main/postgresql.conf" do source "postgresql.conf.erb" owner "postgres" group "postgres" mode "644" - variables :version => version, :defaults => defaults, :settings => settings + variables :version => version, + :defaults => defaults, + :settings => settings, + :primary_conninfo => primary_conninfo, + :passwords => passwords notifies :reload, "service[postgresql]" only_if { ::Dir.exist?("/etc/postgresql/#{version}/main") } end @@ -74,16 +87,7 @@ node[:postgresql][:versions].each do |version| only_if { ::Dir.exist?("/var/lib/postgresql/#{version}/main") } end - standby_mode = settings[:standby_mode] || defaults[:standby_mode] - primary_conninfo = settings[:primary_conninfo] || defaults[:primary_conninfo] - restore_command = settings[:restore_command] || defaults[:restore_command] - - if restore_command || standby_mode == "on" - passwords = if primary_conninfo - data_bag_item(primary_conninfo[:passwords][:bag], - primary_conninfo[:passwords][:item]) - end - + if version.to_f < 12 && (restore_command || standby_mode == "on") template "/var/lib/postgresql/#{version}/main/recovery.conf" do source "recovery.conf.erb" owner "postgres" @@ -103,6 +107,18 @@ node[:postgresql][:versions].each do |version| only_if { ::Dir.exist?("/var/lib/postgresql/#{version}/main") } end end + + if version.to_f > 11 && standby_mode == "on" + file "/var/lib/postgresql/#{version}/main/standby.signal" do + owner "postgres" + group "postgres" + mode "640" + end + else + file "/var/lib/postgresql/#{version}/main/standby.signal" do + action :delete + end + end end service "postgresql" do diff --git a/cookbooks/postgresql/templates/default/postgresql.conf.erb b/cookbooks/postgresql/templates/default/postgresql.conf.erb index f26c7120b..37e241b30 100644 --- a/cookbooks/postgresql/templates/default/postgresql.conf.erb +++ b/cookbooks/postgresql/templates/default/postgresql.conf.erb @@ -86,6 +86,14 @@ archive_mode = <%= @settings[:archive_mode] || @defaults[:archive_mode] %> archive_command = '<%= @settings[:archive_command] || @defaults[:archive_command] %>' <% end -%> +# - Archive Recovery - + +# These are only used in recovery mode. + +<% if @settings[:restore_command] || @defaults[:restore_command] -%> +restore_command = '<%= if @settings[:restore_command] || @defaults[:restore_command] %>' +<% end -%> + #------------------------------------------------------------------------------ # REPLICATION #------------------------------------------------------------------------------ @@ -99,6 +107,9 @@ max_replication_slots = <%= @settings[:max_replication_slots] || @defaults[:max_ # - Standby Servers - +<% if @primary_conninfo -%> +primary_conninfo = 'host=<%= @primary_conninfo[:host] %> port=<%= @primary_conninfo[:port] %> user=<%= @primary_conninfo[:user] %> password=<%= @passwords[@primary_conninfo[:user]] %>' +<% end -%> hot_standby = <%= @settings[:hot_standby] || @defaults[:hot_standby] %> hot_standby_feedback = <%= @settings[:hot_standby_feedback] || @defaults[:hot_standby_feedback] %> -- 2.39.5