This file is indexed.

/usr/sbin/puppetstoredconfigclean is in puppetmaster-common 2.7.11-1ubuntu2.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  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
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
#!/usr/bin/env ruby1.8

# Script to clean up stored configs for (a) given host(s)
#
# Credits:
# Script was taken from http://reductivelabs.com/trac/puppet/attachment/wiki/UsingStoredConfiguration/kill_node_in_storedconfigs_db.rb (link no longer valid),
# which haven been initially posted by James Turnbull
# duritong adapted and improved the script a bit.

require 'getoptlong'
require 'puppet'
require 'puppet/rails'

config = Puppet[:config]

def printusage(error_code)
  puts "Usage: #{$0} [ list of hostnames as stored in hosts table ]"
  puts "\n Options:"
  puts "--config <puppet config file>"
  exit(error_code)
end

opts = GetoptLong.new(
  [ "--config",  "-c", GetoptLong::REQUIRED_ARGUMENT ],
  [ "--help",    "-h", GetoptLong::NO_ARGUMENT ],
  [ "--usage",   "-u", GetoptLong::NO_ARGUMENT ],
  [ "--version", "-v", GetoptLong::NO_ARGUMENT ]
)

begin
  opts.each do |opt, arg|
    case opt
    when "--config"
      config = arg

    when "--help"
      printusage(0)

    when "--usage"
      printusage(0)

    when "--version"
      puts "#{Puppet.version}"
      exit
    end
  end
rescue GetoptLong::InvalidOption => detail
  $stderr.puts "Try '#{$0} --help'"
  exit(1)
end

printusage(1) unless ARGV.size > 0

if config != Puppet[:config]
  Puppet[:config]=config
  Puppet.settings.parse
end

master = Puppet.settings.instance_variable_get(:@values)[:master]
main = Puppet.settings.instance_variable_get(:@values)[:main]
db_config = main.merge(master)

# get default values
[:master, :main, :rails].each do |section|
  Puppet.settings.params(section).each do |key|
    db_config[key] ||= Puppet[key]
  end
end

adapter = db_config[:dbadapter]
args = {:adapter => adapter, :log_level => db_config[:rails_loglevel]}

case adapter
  when "sqlite3"
    args[:dbfile] = db_config[:dblocation]
  when "mysql", "mysql2", "postgresql"
    args[:host]     = db_config[:dbserver] unless db_config[:dbserver].to_s.empty?
    args[:username] = db_config[:dbuser] unless db_config[:dbuser].to_s.empty?
    args[:password] = db_config[:dbpassword] unless db_config[:dbpassword].to_s.empty?
    args[:database] = db_config[:dbname] unless db_config[:dbname].to_s.empty?
    args[:port]     = db_config[:dbport] unless db_config[:dbport].to_s.empty?
    socket          = db_config[:dbsocket]
    args[:socket]   = socket unless socket.to_s.empty?
  else
    raise ArgumentError, "Invalid db adapter #{adapter}"
end

args[:database] = "puppet" unless not args[:database].to_s.empty?

ActiveRecord::Base.establish_connection(args)

ARGV.each do |hostname|
  if @host = Puppet::Rails::Host.find_by_name(hostname.strip)
    print "Removing #{hostname} from storedconfig..."
    $stdout.flush
    @host.destroy
    puts "done."
  else
    puts "Error: Can't find host #{hostname}."
  end
end

exit 0