Skip to content

Instantly share code, notes, and snippets.

@acidprime
Created March 16, 2017 20:49
Show Gist options
  • Save acidprime/3770b8b901339fb03502b3a998099f3c to your computer and use it in GitHub Desktop.
Save acidprime/3770b8b901339fb03502b3a998099f3c to your computer and use it in GitHub Desktop.
A fact for showing the classes in classes.txt
#!/usr/bin/ruby
# curl -G http://localhost:8080/v3/facts/puppet_classes
require 'facter'
require 'json'
hostname = Facter.value(:hostname)
classes_txt = '/var/opt/lib/pe-puppet/classes.txt'
Facter.debug(classes_txt)
if File.exists?(classes_txt) then
f = File.new(classes_txt)
classes = Array.new()
f.readlines.each do |line|
line = line.chomp.to_s
line = line.sub(' ','_')
classes.push(line)
end
classes.delete('settings')
classes.delete(hostname.to_s)
Facter.add(:puppet_classes) do
setcode do
classes.sort.to_json
end
end
end
@acidprime
Copy link
Author

#!/opt/puppet/bin/ruby
require 'net/http'
require 'uri'
require 'json'

uri = URI('http://localhost:8080/v3/facts/puppet_classes')
response = Net::HTTP.get_response(uri)
facts = JSON.parse(response.body)

nodes = Hash.new
facts.each do |fact|
 value    = JSON.parse(fact['value'])
 certname = fact['certname']
 (nodes[value.join(",")] ||= []) << certname
end

nodes.each do |classes,nodes|
  puts '-' * 80
  puts "#{nodes.length}: #{nodes.join(',')}"
  puts '-' * 80
  puts classes.split(',').join("\n")
  puts '-' * 80
end

listing them out of puppetdb

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment