Skip to content

Instantly share code, notes, and snippets.

@smbambling
Last active November 2, 2015 18:08
Show Gist options
  • Save smbambling/4bb393aa509236c419ec to your computer and use it in GitHub Desktop.
Save smbambling/4bb393aa509236c419ec to your computer and use it in GitHub Desktop.
Puppet Function to return list (array) of resource types (classes) from the Puppet API from a supplied regex
require "net/http"
require "net/https"
require "uri"
require "json"
require "socket"
require "puppet"
module Puppet::Parser::Functions
newfunction(:fetch_resource_types, :type => :rvalue) do |args|
environment = args[0]
regex = args[1]
me = Socket.gethostname
cert = File.read("/etc/puppetlabs/puppet/ssl/certs/#{me}.pem")
key = File.read("/etc/puppetlabs/puppet/ssl/private_keys/#{me}.pem")
ca_cert = "/etc/puppetlabs/puppet/ssl/certs/ca.pem"
url = "https://#{me}:8140/puppet/v3/resource_types/#{regex}?environment=#{environment}"
encoded_url = URI.encode(url)
uri = URI.parse(encoded_url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.cert = OpenSSL::X509::Certificate.new(cert)
http.key = OpenSSL::PKey::RSA.new(key)
http.ca_file = ca_cert
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
data = response.body
data = PSON.parse(data)
classes = Array.new
data.each do |key|
classes << key['name']
end
classes.join(",")
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment