Class: Httpapi

Inherits:
Chef::Handler
  • Object
show all
Defined in:
lib/chef/handler/Httpapi.rb

Instance Method Summary collapse

Constructor Details

#initialize(api_url, api_user, api_pass, api_ssl_verify, api_ssl_version, api_data_message, api_data_success, api_data_failed) ⇒ Httpapi

Returns a new instance of Httpapi.



14
15
16
17
18
19
20
21
22
23
# File 'lib/chef/handler/Httpapi.rb', line 14

def initialize(api_url, api_user, api_pass, api_ssl_verify, api_ssl_version, api_data_message, api_data_success, api_data_failed)
  @api_url = api_url
  @api_ssl_verify = api_ssl_verify
  @api_ssl_version = api_ssl_version
  @api_user = api_user
  @api_pass = api_pass
  @api_data_message = api_data_message
  @api_data_success = api_data_success
  @api_data_failed = api_data_failed
end

Instance Method Details

#formatted_run_listObject



25
26
27
# File 'lib/chef/handler/Httpapi.rb', line 25

def formatted_run_list
  node.run_list.map { |r| r.type == :role ? r.name : r.to_s }.join(", ")
end

#reportObject



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
# File 'lib/chef/handler/Httpapi.rb', line 29

def report
  uri = URI(@api_url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.set_debug_output $stderr
  http.use_ssl = true
  if @api_ssl_verify == "none"
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
  http.ssl_version = @api_ssl_version

  request = Net::HTTP::Post.new(uri.request_uri)
  request.basic_auth(@api_user, @api_pass)

  if run_status.success?
    api_data_info = { @api_data_message => "Chef successfull on #{node.name}\n\nrun_list:\n#{formatted_run_list}\n\ntotal_resources:\n#{run_status.all_resources.length}\n\nupdated_resources:\n#{run_status.updated_resources.length}\n\nelapsed_time:\n#{run_status.elapsed_time}" }
    api_data = @api_data_success.merge(api_data_info)
  else
    api_data_info = { @api_data_message => "Chef failed on #{node.name}\n\nrun_list:\n#{formatted_run_list}\n\nexception:\n#{run_status.exception}\n\nbacktrace:\n#{Array(backtrace).join('\n')}" }
    api_data = @api_data_failed.merge(api_data_info)
  end

  request.body = URI.encode_www_form(api_data)
  response = http.request request
  puts response
end