chef_handler_foreman 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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