class LogStash::Inputs::PuppetFacter
Connects to a puppet server and requests facts
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
# File lib/logstash/inputs/puppet_facter.rb, line 31 def initialize(*args) super(*args) end
Public Instance Methods
register()
click to toggle source
# File lib/logstash/inputs/puppet_facter.rb, line 35 def register() if @ssl require "net/https" begin @pub = File.read(@public_key) @priv = File.read(@private_key) rescue logger.error("Unable to open keys. Public key " + @public_key + ", private key " + @private_key) raise end else require "net/http" end end
run(output_queue)
click to toggle source
# File lib/logstash/inputs/puppet_facter.rb, line 50 def run(output_queue) while true startTime = Time.now if @ssl http = Net::HTTP.new(@host, @port) http.use_ssl = true http.cert = OpenSSL::X509::Certificate.new(@pub) http.key = OpenSSL::PKey::RSA.new(@priv) http.verify_mode = OpenSSL::SSL::VERIFY_NONE else http = Net::HTTP.new(@host, @port) end uri = "/" + @environment + "/certificate_statuses/no_key" begin request = Net::HTTP::Get.new(uri) response = http.request(request) rescue logger.error("Unable to retrieve from host " + @host + " port " + @port.to_s() + " at uri " + uri) raise end begin data = LogStash::Json.load(response.body) rescue logger.error("Unable to parse cert status response") raise end hostList = [] for item in data hostList.push(item["name"]) end for host in hostList uri = "/" + @environment + "/facts/" + host begin request = Net::HTTP::Get.new(uri) response = http.request(request) rescue logger.warn("Unable to retrieve from host " + @host + " port " + @port.to_s() + " at uri " + uri) next end begin data = LogStash::Json.load(response.body)["values"] rescue logger.warn("Unable to parse response from facts for node " + host) next end for key, value in data event = LogStash::Event.new("host" => host) event.set("fact_name", key) event.set("fact_value", value) decorate(event) output_queue << event end end endTime = Time.now diffTime = endTime - startTime waitTime = @interval - diffTime if waitTime > 0 sleep(@interval) logger.debug("Sleeping for " + @waitTime) else logger.warn("Took longer than " + @interval.to_s() + " to process puppetmaster " + @host + " on port " + @port.to_s() + " with env " + @environment) end end end