Puppet Function: query_nodes
- Defined in:
- vendor_modules/puppetdbquery/lib/puppet/functions/query_nodes.rb
- Function type:
- Ruby 4.x API
Overview
Accepts two arguments, a query used to discover nodes, and an optional fact that should be returned.
The query specified should conform to the following format:
(Type[title] and fact_name<operator>fact_value) or ...
Package["mysql-server"] and cluster_id=my_first_cluster
The second argument should be single fact or series of keys joined on periods (this argument is optional)
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'vendor_modules/puppetdbquery/lib/puppet/functions/query_nodes.rb', line 10 Puppet::Functions.create_function('query_nodes') do require 'puppet/util/puppetdb' # This is needed if the puppetdb library isn't pluginsynced to the master $LOAD_PATH.unshift File.(File.join(File.dirname(__FILE__), '..', '..')) begin require 'puppetdb/connection' ensure $LOAD_PATH.shift end dispatch :query_nodes do param 'Variant[String, Array]', :query end dispatch :query_nodes_fact do param 'Variant[String, Array]', :query param 'String', :fact end def parser @parser ||= PuppetDB::Parser.new end def puppetdb @uri ||= URI(Puppet::Util::Puppetdb.config.server_urls.first) @puppetdb ||= PuppetDB::Connection.new( @uri.host, @uri.port, @uri.scheme == 'https' ) end 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 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 end |