1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
# frozen_string_literal: true
module Puppet::Util
# postgresql_validator.rb
class PostgresqlValidator
attr_reader :resource
def initialize(resource)
@resource = resource
end
def build_psql_cmd
cmd = [@resource[:psql_path], '--tuples-only', '--quiet', '--no-psqlrc']
args = {
host: '--host',
port: '--port',
db_username: '--username',
db_name: '--dbname',
command: '--command'
}
args.each do |k, v|
if @resource[k]
cmd.push v
cmd.push @resource[k]
end
end
cmd
end
def connect_settings
result = @resource[:connect_settings] || {}
result['PGPASSWORD'] = @resource[:db_password] if @resource[:db_password]
result
end
def attempt_connection(sleep_length, tries)
(0..tries - 1).each do |_try|
Puppet.debug "PostgresqlValidator.attempt_connection: Attempting connection to #{@resource[:db_name]}"
cmd = build_psql_cmd
Puppet.debug "PostgresqlValidator.attempt_connection: #{cmd.inspect}"
result = Execution.execute(cmd, custom_environment: connect_settings, uid: @resource[:run_as])
if result && !result.empty?
Puppet.debug "PostgresqlValidator.attempt_connection: Connection to #{@resource[:db_name] || connect_settings.select { |elem| elem.include?('PGDATABASE') }} successful!"
return true
else
Puppet.warning "PostgresqlValidator.attempt_connection: Sleeping for #{sleep_length} seconds"
sleep sleep_length
end
end
false
end
end
end
|