Listing 9. nagios/lib/puppet/parser/functions/expire_exported.rb Puppet::Parser::Functions::newfunction( :expire_exported, :doc => "Sets a host's resources to ensure => absent as part of a purge work-flow.") do |args| require 'rubygems' require 'pg' require 'puppet' raise Puppet::ParseError, "Missing hostname." if args.empty? hosts = args.flatten begin conn = PGconn.open(:dbname => 'puppet', :user => 'postgres') hosts.each do |host| Puppet.notice("Expiring resources for host: #{host}") conn.exec("SELECT id FROM hosts WHERE name = \'#{host}\'") do |host_id| raise "Too many hosts" if host_id.ntuples > 1 conn.exec("SELECT id FROM param_names WHERE name = 'ensure'") do |param_id| conn.exec("SELECT id FROM resources WHERE host_id = #{host_id.values.flatten[0].to_i}") do |results| resource_ids = [] results.each do |row| resource_ids << Hash[*row.to_a.flatten] end resource_ids.each do |resource| conn.exec("UPDATE param_values SET VALUE = 'absent' WHERE resource_id = #{resource['id']} AND param_name_id = #{param_id.values}") end end end end end rescue => e Puppet.notice(e.message) ensure conn.close end end