chef_handler_foreman 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff449b460fdcac91441b8f199bc24d174e6d23cd
4
- data.tar.gz: c1374baaabfc94f7955c52ee08cdfbf29239344a
3
+ metadata.gz: ecef7de2520fb70bd3f7d4b579c7a953db128417
4
+ data.tar.gz: 3cacd14b60b411734c1a6d49fa77626d0c96b6a0
5
5
  SHA512:
6
- metadata.gz: fb3a44d51c5ca0fb6008a065afaaad83c7d0ecab78ae4c8c8f97ddab89e7e14745b9428daf18a19ef499d1a5b9aac3f93be7b7425fa63bd8ba4ecc76acc48d5b
7
- data.tar.gz: f22c3644b943f482834f11dd7eaccca53313f915ed7f95c76740bc47557500b14c8b500144ebadb4eee73becacf7a62821968a6b6fabb258a820679226b62bdd
6
+ metadata.gz: b4b9e301496e3e0a361dbf031615cc7d47ddac35504c8d3eb8cfffbe9d8eb9a3b5d11208e5ce8bbe8b3f1c001dce42327281af2c2b9077bb889e1cf912fe6c9b
7
+ data.tar.gz: ab96a0a8bbad7f0afdfd5cc080f7ca0a6adf0534c7fb9243f12d8d24ff6d97d1806ebac491dd9d3fc51ef476dd70a3de4fe67a52bb0973a18e6ecafb6813ccc1
data/README.md CHANGED
@@ -24,6 +24,8 @@ foreman_server_options :url => 'http://your.server/foreman'
24
24
  foreman_facts_upload true
25
25
  # add following line if you want to upload reports
26
26
  foreman_reports_upload true
27
+ # add following line to manage reports verbosity. Allowed values are debug, notice and error
28
+ reports_log_level "notice"
27
29
  ```
28
30
 
29
31
  You can also specify a second argument to foreman_reports_upload which is a number:
@@ -9,14 +9,18 @@ module ChefHandlerForeman
9
9
  def foreman_server_options(options)
10
10
  options = { :client_key => client_key || '/etc/chef/client.pem' }.merge(options)
11
11
  @foreman_uploader = ForemanUploader.new(options)
12
+ # set uploader if handlers are already created
13
+ @foreman_facts_handler.uploader = @foreman_uploader if @foreman_facts_handler
14
+ @foreman_report_handler.uploader = @foreman_uploader if @foreman_report_handler
15
+ @foreman_reporter.uploader = @foreman_uploader if @foreman_reporter
12
16
  end
13
17
 
14
18
  def foreman_facts_upload(upload)
15
19
  if upload
16
- foreman_facts_handler = ForemanFacts.new
17
- foreman_facts_handler.uploader = @foreman_uploader
18
- report_handlers << foreman_facts_handler
19
- exception_handlers << foreman_facts_handler
20
+ @foreman_facts_handler = ForemanFacts.new
21
+ @foreman_facts_handler.uploader = @foreman_uploader
22
+ report_handlers << @foreman_facts_handler
23
+ exception_handlers << @foreman_facts_handler
20
24
  end
21
25
  end
22
26
 
@@ -24,22 +28,33 @@ module ChefHandlerForeman
24
28
  if upload
25
29
  case mode
26
30
  when 1
27
- foreman_reporter = ForemanResourceReporter.new(nil)
28
- foreman_reporter.uploader = @foreman_uploader
31
+ @foreman_reporter = ForemanResourceReporter.new(nil)
32
+ @foreman_reporter.uploader = @foreman_uploader
33
+ @foreman_reporter.log_level = @foreman_reports_log_level
29
34
  if Chef::Config[:event_handlers].is_a?(Array)
30
- Chef::Config[:event_handlers].push foreman_reporter
35
+ Chef::Config[:event_handlers].push @foreman_reporter
31
36
  else
32
- Chef::Config[:event_handlers] = [foreman_reporter]
37
+ Chef::Config[:event_handlers] = [@foreman_reporter]
33
38
  end
34
39
  when 2
35
- foreman_handler = ForemanReporting.new
36
- foreman_handler.uploader = uploader
37
- report_handlers << foreman_handler
38
- exception_handlers << foreman_handler
40
+ @foreman_report_handler = ForemanReporting.new
41
+ @foreman_report_handler.uploader = uploader
42
+ report_handlers << @foreman_report_handler
43
+ exception_handlers << @foreman_report_handler
39
44
  else
40
45
  raise ArgumentError, 'unknown mode: ' + mode.to_s
41
46
  end
42
47
  end
43
48
  end
49
+
50
+ # level can be string error notice debug
51
+ def reports_log_level(level)
52
+ raise ArgumentError, 'unknown level: ' + level.to_s unless %w(error notice debug).include?(level)
53
+
54
+ @foreman_reports_log_level = level
55
+ if @foreman_reporter
56
+ @foreman_reporter.log_level = level
57
+ end
58
+ end
44
59
  end
45
60
  end
@@ -1,6 +1,6 @@
1
1
  module ChefHandlerForeman
2
2
  class ForemanResourceReporter < ::Chef::ResourceReporter
3
- attr_accessor :uploader
3
+ attr_accessor :uploader, :log_level
4
4
 
5
5
  def initialize(*args)
6
6
  @total_up_to_date = 0
@@ -100,7 +100,7 @@ module ChefHandlerForeman
100
100
  "time" => resources_per_time
101
101
  }
102
102
 
103
- run_data["logs"] = resources_logs + [chef_log]
103
+ run_data["logs"] = filter_logs(resources_logs + [chef_log])
104
104
  run_data
105
105
  end
106
106
 
@@ -126,15 +126,41 @@ module ChefHandlerForeman
126
126
  @all_resources.map do |resource|
127
127
  action = resource.new_resource.action
128
128
  message = action.is_a?(Array) ? action.first.to_s : action.to_s
129
+ message = format_message(message, resource.new_resource)
129
130
  message += " (#{resource.exception.class} #{resource.exception.message})" unless resource.exception.nil?
131
+ level = resource_level(resource)
130
132
  { "log" => {
131
133
  "sources" => { "source" => resource.new_resource.to_s },
132
134
  "messages" => { "message" => message },
133
- "level" => resource.exception.nil? ? "notice" : 'err'
135
+ "level" => level
134
136
  } }
135
137
  end
136
138
  end
137
139
 
140
+ def format_message(message, resource)
141
+ case resource.resource_name.to_s
142
+ when 'template', 'cookbook_file'
143
+ unless resource.diff.nil?
144
+ message += " with diff " + resource.diff.gsub('\\n', "\n")
145
+ end
146
+ when 'package'
147
+ message += " package in #{resource.version}" unless resource.version.nil?
148
+ else
149
+ message = resource.action.to_s
150
+ end
151
+ message
152
+ end
153
+
154
+ def resource_level(resource)
155
+ if ! resource.exception.nil?
156
+ return 'err'
157
+ elsif resource.new_resource.updated
158
+ return 'notice'
159
+ else
160
+ return 'debug'
161
+ end
162
+ end
163
+
138
164
  def chef_log
139
165
  message = 'run'
140
166
  if @status == 'success' && exception.nil?
@@ -151,5 +177,20 @@ module ChefHandlerForeman
151
177
  } }
152
178
  end
153
179
 
180
+ # currently we support only three log levels:
181
+ # 'debug' means do not filter,
182
+ # 'notice' updated resources and errors
183
+ # 'error' means only errors
184
+
185
+ def filter_logs(logs)
186
+ if log_level == 'error'
187
+ logs.select { |log| log['log']['level'] == 'err' }
188
+ elsif log_level == 'notice'
189
+ logs.select { |log| ['err','notice'].include? log['log']['level'] }
190
+ else
191
+ logs
192
+ end
193
+ end
194
+
154
195
  end
155
196
  end
@@ -1,3 +1,3 @@
1
1
  module ChefHandlerForeman
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef_handler_foreman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marek Hulan