class Puppet::Util::Puppetdb::Command
Constants
- Url
Attributes
certname[R]
command[R]
payload[R]
version[R]
Public Class Methods
format_payload(command, version, payload)
click to toggle source
@api private
# File lib/puppet/util/puppetdb/command.rb, line 86 def self.format_payload(command, version, payload) message = { :command => command, :version => version, :payload => payload, }.to_pson Puppet::Util::Puppetdb::CharEncoding.utf8_string(message) end
new(command, version, certname, payload)
click to toggle source
Initialize a Command
object, for later submission.
@param command String the name of the command; should be one of the
constants defined in `Puppet::Util::Puppetdb::CommandNames`
@param version Integer the command version number @param certname The certname that this command operates on (is not
included in the actual submission)
@param payload Object
the payload of the command. This object should be a
primitive (numeric type, string, array, or hash) that is natively supported by JSON serialization / deserialization libraries.
# File lib/puppet/util/puppetdb/command.rb, line 26 def initialize(command, version, certname, payload) @command = command @version = version @certname = certname profile "Format payload" do @payload = self.class.format_payload(command, version, payload) end end
Public Instance Methods
config()
click to toggle source
@api private
# File lib/puppet/util/puppetdb/command.rb, line 107 def config # Would prefer to pass this to the constructor or acquire it some other # way besides this pseudo-global reference. Puppet::Util::Puppetdb.config end
headers()
click to toggle source
@api private
# File lib/puppet/util/puppetdb/command.rb, line 99 def headers { "Accept" => "application/json", "Content-Type" => "application/json", } end
submit()
click to toggle source
Submit the command, returning the result hash.
@return [Hash <String, String>]
# File lib/puppet/util/puppetdb/command.rb, line 40 def submit checksum = Digest::SHA1.hexdigest(payload) for_whom = " for #{certname}" if certname begin response = profile "Submit command HTTP post" do http = Puppet::Network::HttpPool.http_instance(config.server, config.port) http.post(Url + "?checksum=#{checksum}", payload, headers) end Puppet::Util::Puppetdb.log_x_deprecation_header(response) if response.is_a? Net::HTTPSuccess result = JSON.parse(response.body) Puppet.info "'#{command}' command#{for_whom} submitted to PuppetDB with UUID #{result['uuid']}" result else # Newline characters cause an HTTP error, so strip them error = "[#{response.code} #{response.message}] #{response.body.gsub(/[\r\n]/, '')}" if config.soft_write_failure Puppet.err "'#{command}'command#{for_whom} failed during submission to PuppetDB: #{error}" else raise Puppet::Error, error end end rescue => e error = "Failed to submit '#{command}' command#{for_whom} to PuppetDB at #{config.server}:#{config.port}: #{e}" if config.soft_write_failure Puppet.err error else # TODO: Use new exception handling methods from Puppet 3.0 here as soon as # we are able to do so (can't call them yet w/o breaking backwards # compatibility.) We should either be using a nested exception or calling # Puppet::Util::Logging#log_exception or #log_and_raise here; w/o them # we lose context as to where the original exception occurred. puts e, e.backtrace if Puppet[:trace] raise Puppet::Error, error end end end