summaryrefslogtreecommitdiffstats
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rwxr-xr-xext/puppetlast37
-rw-r--r--ext/puppetstoredconfigclean.rb87
2 files changed, 93 insertions, 31 deletions
diff --git a/ext/puppetlast b/ext/puppetlast
index e8c2ea1a7..d9b698cfe 100755
--- a/ext/puppetlast
+++ b/ext/puppetlast
@@ -1,40 +1,15 @@
#!/usr/bin/env ruby
+# Puppetlast, a script to output the last check-in time of nodes. Also outputs the cached configuration state, if expired or not.
#
-# Script to print out when puppet ran successfully last
-# AJ Christensen <aj@junglist.gen.nz>
+# AJ "Fujin" Christensen <aj@junglist.gen.nz>
#
-
require 'puppet'
-require 'puppet/defaults'
-require 'yaml'
Puppet[:config] = "/etc/puppet/puppet.conf"
Puppet.parse_config
+Puppet[:name] = "puppetmasterd"
+Puppet::Node::Facts.terminus_class = :yaml
-print "puppetlast\n"
-
-nodes = {}
-
-yfdir = Puppet.settings.value(:vardir) + "/yaml/facts"
-
-if yfdir
- begin
- Dir.chdir(yfdir) do
- Dir.glob("*.yaml").each do |yaml|
- data = YAML.load_file(yaml)
- t = Time.now
- age = t - data.version
- nodes[data.name] = age.to_i
- end
- end
-
- nodes.sort.each do |node,age|
- minutes = age / 60 + 0.5
- print minutes.floor.to_s + ' minutes ago: ' + node + "\n"
- end
-
- rescue
- print 'error: ' + $! + "\n"
- end
-
+Puppet::Node::Facts.search("*").sort.each do |node|
+ puts "#{node.name} #{node.expired? ? 'cached expired, ' : ''}checked in #{((Time.now - node.values[:_timestamp]) / 60).floor} minutes ago"
end
diff --git a/ext/puppetstoredconfigclean.rb b/ext/puppetstoredconfigclean.rb
new file mode 100644
index 000000000..f286df2df
--- /dev/null
+++ b/ext/puppetstoredconfigclean.rb
@@ -0,0 +1,87 @@
+#!/usr/bin/env ruby
+
+# 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
+# which haven been initially posted by James Turnbull
+# duritong adapted and improved the script a bit.
+
+require 'getoptlong'
+config = '/etc/puppet/puppet.conf'
+
+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 "%s" % Puppet.version
+ exit
+ end
+ end
+rescue GetoptLong::InvalidOption => detail
+ $stderr.puts "Try '#{$0} --help'"
+ exit(1)
+end
+
+printusage(1) unless ARGV.size > 0
+
+require 'puppet/rails'
+Puppet[:config] = config
+Puppet.parse_config
+pm_conf = Puppet.settings.instance_variable_get(:@values)[:puppetmasterd]
+
+adapter = pm_conf[:dbadapter]
+args = {:adapter => adapter, :log_level => pm_conf[:rails_loglevel]}
+
+case adapter
+ when "sqlite3":
+ args[:dbfile] = pm_conf[:dblocation]
+ when "mysql", "postgresql":
+ args[:host] = pm_conf[:dbserver] unless pm_conf[:dbserver].to_s.empty?
+ args[:username] = pm_conf[:dbuser] unless pm_conf[:dbuser].to_s.empty?
+ args[:password] = pm_conf[:dbpassword] unless pm_conf[:dbpassword].to_s.empty?
+ args[:database] = pm_conf[:dbname] unless pm_conf[:dbname].to_s.empty?
+ socket = pm_conf[:dbsocket]
+ args[:socket] = socket unless socket.to_s.empty?
+ else
+ raise ArgumentError, "Invalid db adapter %s" % adapter
+end
+
+args[:database] = "puppet" unless not args[:database].to_s.empty?
+
+ActiveRecord::Base.establish_connection(args)
+
+ARGV.each { |hostname|
+ if @host = Puppet::Rails::Host.find_by_name(hostname.strip)
+ print "Killing #{hostname}..."
+ $stdout.flush
+ @host.destroy
+ puts "done."
+ else
+ puts "Can't find host #{hostname}."
+ end
+}
+exit 0