+ run_command(command, resource[:psql_user], resource[:psql_group], environment)
+ end
+ else
+ run_command(command, resource[:psql_user], resource[:psql_group], environment)
+ end
+ end
+
+ private
+
+ def get_environment
+ environment = (resource[:connect_settings] || {}).dup
+ if envlist = resource[:environment]
+ envlist = [envlist] unless envlist.is_a? Array
+ envlist.each do |setting|
+ if setting =~ /^(\w+)=((.|\n)+)$/
+ env_name = $1
+ value = $2
+ if environment.include?(env_name) || environment.include?(env_name.to_sym)
+ if env_name == 'NEWPGPASSWD'
+ warning "Overriding environment setting '#{env_name}' with '****'"
+ else
+ warning "Overriding environment setting '#{env_name}' with '#{value}'"
+ end
+ end
+ environment[env_name] = value
+ else
+ warning "Cannot understand environment setting #{setting.inspect}"
+ end
+ end
+ end
+ return environment
+ end
+
+ def run_command(command, user, group, environment)
+ command = command.join ' '
+ if Puppet::PUPPETVERSION.to_f < 3.0
+ require 'puppet/util/execution'
+ Puppet::Util::Execution.withenv environment do
+ Puppet::Util::SUIDManager.run_and_capture(command, user, group)
+ end
+ elsif Puppet::PUPPETVERSION.to_f < 3.4
+ Puppet::Util.withenv environment do
+ Puppet::Util::SUIDManager.run_and_capture(command, user, group)