Class: Bolt::PuppetDB::Client
- Inherits:
-
Object
- Object
- Bolt::PuppetDB::Client
- Defined in:
- lib/bolt/puppetdb/client.rb
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
Instance Method Summary collapse
-
#facts_for_node(certnames) ⇒ Object
This method expects an array of certnames to get facts for.
- #headers ⇒ Object
- #http_client ⇒ Object
-
#initialize(config) ⇒ Client
constructor
A new instance of Client.
- #make_query(query, path = nil) ⇒ Object
- #query_certnames(query) ⇒ Object
Constructor Details
#initialize(config) ⇒ Client
Returns a new instance of Client.
12 13 14 |
# File 'lib/bolt/puppetdb/client.rb', line 12 def initialize(config) @config = config end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
10 11 12 |
# File 'lib/bolt/puppetdb/client.rb', line 10 def config @config end |
Instance Method Details
#facts_for_node(certnames) ⇒ Object
This method expects an array of certnames to get facts for
29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/bolt/puppetdb/client.rb', line 29 def facts_for_node(certnames) return {} if certnames.empty? || certnames.nil? certnames.uniq! name_query = certnames.map { |c| ["=", "certname", c] } name_query.insert(0, "or") result = make_query(name_query, 'inventory') result&.each_with_object({}) do |node, coll| coll[node['certname']] = node['facts'] end end |
#headers ⇒ Object
71 72 73 74 75 |
# File 'lib/bolt/puppetdb/client.rb', line 71 def headers headers = { 'Content-Type' => 'application/json' } headers['X-Authentication'] = @config.token if @config.token headers end |
#http_client ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'lib/bolt/puppetdb/client.rb', line 62 def http_client return @http if @http @http = HTTPClient.new @http.ssl_config.set_client_cert_file(@config.cert, @config.key) if @config.cert @http.ssl_config.add_trust_ca(@config.cacert) @http end |
#make_query(query, path = nil) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/bolt/puppetdb/client.rb', line 42 def make_query(query, path = nil) body = JSON.generate(query: query) url = "#{@config.uri}/pdb/query/v4" url += "/#{path}" if path begin response = http_client.post(url, body: body, header: headers) rescue StandardError => err raise Bolt::PuppetDBError, "Failed to query PuppetDB: #{err}" end if response.code != 200 raise Bolt::PuppetDBError, "Failed to query PuppetDB: #{response.body}" end begin JSON.parse(response.body) rescue JSON::ParserError raise Bolt::PuppetDBError, "Unable to parse response as JSON: #{response.body}" end end |
#query_certnames(query) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/bolt/puppetdb/client.rb', line 16 def query_certnames(query) return [] unless query results = make_query(query) if results&.first && !results.first&.key?('certname') fields = results.first&.keys raise Bolt::PuppetDBError, "Query results did not contain a 'certname' field: got #{fields.join(', ')}" end results&.map { |result| result['certname'] }&.uniq end |