module Jerakia::Scope::Puppetdb

Public Instance Methods

create() click to toggle source
# File lib/jerakia/scope/puppetdb.rb, line 4
def create
  yaml_file = request.scope_options['file'] || './jerakia_scope.yaml'
  puppetdb_host = request.scope_options['puppetdb_host'] || 'localhost'
  puppetdb_port = request.scope_options['puppetdb_port'] || 8080
  puppetdb_api  = request.scope_options['puppetdb_api'] || 4
  node = request.scope_options['node']

  raise Jerakia::Error, "Must pass the option node to the puppetdb scope handler" unless node

  connection_opts = {
    :host => puppetdb_host,
    :port => puppetdb_port,
    :output => 'json',
    :ignore_404 => true
  }.merge(request.scope_options['puppetdb_http_opts'] || {})

  puppetdb_con = LookupHttp.new(connection_opts)
  
  case puppetdb_api
  when 4
    path = "/pdb/query/v4/nodes/#{node}/facts"
  else
    raise Jerakia::Error, "Unsupported PuppetDB API version, #{puppetdb_api}"
  end

  Jerakia.log.debug("Sending HTTP query to PuppetDB #{puppetdb_host}:#{puppetdb_port} at path #{path}")

  response = puppetdb_con.get_parsed(path)

  raise Jerakia::Error, "PuppetDB returned no data for node #{node}" unless response.is_a?(Array)

  response.each { |r| value[r['name'].to_sym] =  r['value'] }
end