class Object

Public Instance Methods

parser() click to toggle source
# File lib/puppet/functions/query_nodes.rb, line 30
def parser
  @parser ||= PuppetDB::Parser.new
end
puppetdb() click to toggle source
# File lib/puppet/functions/query_nodes.rb, line 34
def puppetdb
  @uri ||= URI(Puppet::Util::Puppetdb.config.server_urls.first)
  @puppetdb ||= PuppetDB::Connection.new(
    @uri.host,
    @uri.port,
    @uri.scheme == 'https'
  )
end
puppetdb_lookup_key(key, options, context) click to toggle source
# File lib/puppet/functions/puppetdb_lookup_key.rb, line 15
def puppetdb_lookup_key(key, options, context)
  return context.cached_value(key) if context.cache_has_key(key)

  if !key.end_with?('::_nodequery') && nodequery = call_function('lookup', "#{key}::_nodequery", 'merge' => 'first', 'default_value' => nil)
    # Support specifying the query in a few different ways
    query, fact, sort = case nodequery
                        when Hash then [nodequery['query'], nodequery['fact'], nodequery['sort']]
                        when Array then nodequery
                        else [nodequery.to_s, nil, nil]
                        end

    paramz = [query, fact].compact
    result = call_function('query_nodes', *paramz)
    result.sort! if sort
    context.cache(key, result)
  else
    context.not_found
  end
end
query_facts(query, facts) click to toggle source
# File lib/puppet/functions/query_facts.rb, line 28
def query_facts(query, facts)
  facts = facts.map { |fact| fact.match(/\./) ? fact.split('.') : fact }
  facts_for_query = facts.map { |fact| fact.is_a?(Array) ? fact.first : fact }

  uri = URI(Puppet::Util::Puppetdb.config.server_urls.first)
  puppetdb = PuppetDB::Connection.new(uri.host, uri.port, uri.scheme == 'https')
  parser = PuppetDB::Parser.new
  query = parser.facts_query query, facts_for_query if query.is_a? String
  parser.facts_hash(puppetdb.query(:facts, query, :extract => [:certname, :name, :value]), facts)
end
query_nodes(query) click to toggle source
# File lib/puppet/functions/query_nodes.rb, line 43
def query_nodes(query)
  query = parser.parse(query, :nodes) if query.is_a? String
  puppetdb.query(:nodes, query, :extract => :certname).collect do |n|
    n['certname']
  end
end
query_nodes_fact(query, fact) click to toggle source
# File lib/puppet/functions/query_nodes.rb, line 50
def query_nodes_fact(query, fact)
  fact_for_query = fact.split('.').first

  query = parser.facts_query(query, [fact_for_query])
  response = puppetdb.query(:facts, query, :extract => :value)

  if fact.split('.').size > 1
    parser.extract_nested_fact(response, fact.split('.')[1..-1])
  else
    response.collect { |f| f['value'] }
  end
end