Skip to content

Commit 42cb437

Browse files
committed
change postgresql first start detection
1 parent eefeb29 commit 42cb437

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

libraries/helpers.rb

+12-4
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,28 @@ class Chef
3030
module Postgresql
3131
# Helpers module
3232
module Helpers
33+
def pg_installed?(pkg_name)
34+
dpkg_status = Mixlib::ShellOut.new("dpkg-query -W -f='${Status}\n' #{pkg_name} 2>/dev/null | grep -c -q 'ok installed'")
35+
dpkg_status.run_command
36+
if dpkg_status.exitstatus == 0
37+
false
38+
else
39+
true
40+
end
41+
end
42+
3343
def exec_in_pg_cluster(cluster_version, cluster_name, sql)
3444
return false unless pg_running?(cluster_version, cluster_name)
3545
postmaster_content = ::File.open("/var/lib/postgresql/#{cluster_version}/#{cluster_name}/postmaster.pid").readlines
3646
pg_port = postmaster_content[3].to_i
3747
psql_status = Mixlib::ShellOut.new("echo -n \"#{sql};\" | su -c 'psql -t -p #{pg_port}' postgres")
3848
psql_status.run_command
39-
Chef::Log.info(psql_status.stdout)
40-
Chef::Log.info(psql_status.stderr)
4149
[psql_status.stdout, psql_status.stderr]
4250
end
4351

44-
def need_to_restart?(cluster_version, cluster_name, advanced_options, node)
52+
def need_to_restart?(advanced_options, first_time)
4553
if advanced_options[:restart] == :first
46-
return (!defined? node['postgresql'][cluster_version][cluster_name]['success_at_least_once'])
54+
return first_time
4755
elsif advanced_options[:restart] == :always
4856
return true
4957
end

providers/default.rb

+3-9
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@
5757
ENV['LANG'] = new_resource.cluster_create_options['locale']
5858
end
5959

60+
first_time = pg_installed?("postgresql-#{configuration['version']}")
61+
6062
# Install packages
6163
%W(postgresql-#{configuration['version']} postgresql-server-dev-all).each do |pkg|
6264
package pkg
@@ -82,20 +84,12 @@
8284
status_command "su -c '/usr/lib/postgresql/#{cluster_version}/bin/pg_ctl \
8385
-D /var/lib/postgresql/#{cluster_version}/#{cluster_name} status' postgres"
8486
supports status: true, restart: true, reload: true
85-
notifies :create, 'ruby_block[set_success_mark]', :delayed
86-
end
87-
88-
ruby_block 'set_success_mark' do
89-
action :nothing
90-
block do
91-
node.normal['postgresql'][cluster_version][cluster_name]['success_at_least_once'] = true
92-
end
9387
end
9488

9589
ruby_block 'restart_service' do
9690
action :nothing
9791
block do
98-
if need_to_restart?(cluster_version, cluster_name, advanced_options, node)
92+
if need_to_restart?(advanced_options, first_time)
9993
run_context.notifies_delayed(Chef::Resource::Notification.new(postgresql_service, :restart, self))
10094
else
10195
run_context.notifies_delayed(Chef::Resource::Notification.new(postgresql_service, :reload, self))

0 commit comments

Comments
 (0)