chef-handler-sns 1.2.0 → 2.0.0

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: 9d9a1e47581f47ece72146ac2f51a16943ca8f91
4
- data.tar.gz: 488113a98280a1710c70a4cb00972684189f0da6
3
+ metadata.gz: c4942f7c8128f0db8c5fff746db6ce6c145633ec
4
+ data.tar.gz: 17e60816d695b726125920dfbed4dd8c2fdf4645
5
5
  SHA512:
6
- metadata.gz: 4497bce34ede99785301cf8bdec0b56fcd650a5d29f031f2f1858ef9dddb5656b7135d9f05749aa3b488313292d34116dcc40194ebfa671bcd460ed8ea5d4a3e
7
- data.tar.gz: 344b14df680e8b7595f11057267b8df3fc2e299e53e9e8f63b749437bc2806e2f9ee1eddf54279a972e348f92409ef9d1e88de6a53887de9e6dc0092d5b37bf9
6
+ metadata.gz: d8e752973f6478d533766d085c04a805ea805d9bcf06c7bba77450c6b3139517536021ead48e0d29904a9644f133d41b214a342139bb1292282768639ba36e97
7
+ data.tar.gz: bcc56c9011c521dc14f5fae3c92981cddf92c65da1021af89337d9c9f754ea5ef961cda784edbe17cae3d5acb16508c76e0fe45c7e80277f421a85b7ce654346
data/LICENSE CHANGED
@@ -175,7 +175,7 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
175
175
 
176
176
  END OF TERMS AND CONDITIONS
177
177
 
178
- Copyright 2014 Onddo Labs, SL. (www.onddo.com)
178
+ Copyright 2014 Xabier de Zuazo
179
179
 
180
180
  Licensed under the Apache License, Version 2.0 (the "License");
181
181
  you may not use this file except in compliance with the License.
data/README.md CHANGED
@@ -1,30 +1,29 @@
1
1
  # Chef Handler SNS
2
2
  [![Gem Version](http://img.shields.io/gem/v/chef-handler-sns.svg?style=flat)](http://badge.fury.io/rb/chef-handler-sns)
3
- [![Dependency Status](http://img.shields.io/gemnasium/onddo/chef-handler-sns.svg?style=flat)](https://gemnasium.com/onddo/chef-handler-sns)
4
- [![Code Climate](http://img.shields.io/codeclimate/github/onddo/chef-handler-sns.svg?style=flat)](https://codeclimate.com/github/onddo/chef-handler-sns)
5
- [![Build Status](http://img.shields.io/travis/onddo/chef-handler-sns.svg?style=flat)](https://travis-ci.org/onddo/chef-handler-sns)
6
- [![Coverage Status](http://img.shields.io/coveralls/onddo/chef-handler-sns.svg?style=flat)](https://coveralls.io/r/onddo/chef-handler-sns?branch=master)
3
+ [![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg?style=flat)](http://www.rubydoc.info/gems/chef-handler-sns)
4
+ [![GitHub](http://img.shields.io/badge/github-zuazo/chef--handler--sns-blue.svg?style=flat)](https://github.com/zuazo/chef-handler-sns)
5
+ [![License](https://img.shields.io/github/license/zuazo/chef-handler-sns.svg?style=flat)](#license-and-author)
6
+
7
+ [![Dependency Status](http://img.shields.io/gemnasium/zuazo/chef-handler-sns.svg?style=flat)](https://gemnasium.com/zuazo/chef-handler-sns)
8
+ [![Code Climate](http://img.shields.io/codeclimate/github/zuazo/chef-handler-sns.svg?style=flat)](https://codeclimate.com/github/zuazo/chef-handler-sns)
9
+ [![Build Status](http://img.shields.io/travis/zuazo/chef-handler-sns/2.0.0.svg?style=flat)](https://travis-ci.org/zuazo/chef-handler-sns)
10
+ [![Coverage Status](http://img.shields.io/coveralls/zuazo/chef-handler-sns/2.0.0.svg?style=flat)](https://coveralls.io/r/zuazo/chef-handler-sns?branch=2.0.0)
11
+ [![Inline docs](http://inch-ci.org/github/zuazo/chef-handler-sns.svg?branch=master&style=flat)](http://inch-ci.org/github/zuazo/chef-handler-sns)
7
12
 
8
13
  A simple Chef report handler that reports status of a Chef run through [Amazon SNS](http://aws.amazon.com/sns/), [including IAM roles support](#usage-with-amazon-iam-roles).
9
14
 
10
15
  [Amazon SNS](http://aws.amazon.com/sns/) can send notifications by SMS, email, [Amazon SQS](http://aws.amazon.com/sqs/) queues or to any HTTP endpoint.
11
16
 
12
- We recommend using the [chef_handler_sns cookbook](http://community.opscode.com/cookbooks/chef_handler_sns) for easy installation.
17
+ We recommend using the [`chef_handler_sns` cookbook](https://supermarket.chef.io/cookbooks/chef_handler_sns) for easy installation.
13
18
 
14
19
  This Chef Handler is heavily based on [Joshua Timberman](https://github.com/jtimberman) examples.
15
20
 
16
- * http://wiki.opscode.com/display/chef/Exception+and+Report+Handlers
21
+ * https://docs.chef.io/handlers.html#exception-report-handlers
17
22
 
18
23
  ## Requirements
19
24
 
20
25
  * Amazon AWS: uses Amazon SNS service.
21
- * Uses the `aws-sdk` library.
22
- * `aws-sdk` requires `nokogiri`, which also has the following requirements:
23
- * `libxml2-dev` and `libxslt-dev` installed (optional).
24
- * `gcc` and `make` installed (this will compile and install libxml2 and libxslt internally if not found).
25
- * For `Ruby 1.8`, you need to install old versions of the following dependencies:
26
- * `mime-types < 2.0`.
27
- * `nokogiri < 1.6`.
26
+ * Ruby `2` or higher (recommended `2.1` or higher).
28
27
 
29
28
  ## Usage
30
29
 
@@ -34,190 +33,131 @@ You can install this handler in two ways:
34
33
 
35
34
  You can install the RubyGem and configure Chef to use it:
36
35
 
37
- gem install chef-handler-sns
36
+ $ gem install chef-handler-sns
38
37
 
39
38
  Then add to the configuration (`/etc/chef/solo.rb` for chef-solo or `/etc/chef/client.rb` for chef-client):
40
39
 
41
40
  ```ruby
42
- require "chef/handler/sns"
41
+ require 'chef/handler/sns'
43
42
 
44
43
  # Create the handler
45
44
  sns_handler = Chef::Handler::Sns.new
46
45
 
47
46
  # Your Amazon AWS credentials
48
- sns_handler.access_key "***AMAZON-KEY***"
49
- sns_handler.secret_key "***AMAZON-SECRET***"
47
+ sns_handler.access_key '***AMAZON-KEY***'
48
+ sns_handler.secret_key '***AMAZON-SECRET***'
50
49
 
51
50
  # Some Amazon SNS configurations
52
- sns_handler.topic_arn "arn:aws:sns:***"
53
- sns_handler.region "us-east-1" # optional
51
+ sns_handler.topic_arn 'arn:aws:sns:***'
52
+ sns_handler.region 'us-east-1' # optional
54
53
 
55
54
  # Add your handler
56
55
  exception_handlers << sns_handler
57
56
  ```
58
57
 
59
- ### Method 2: in a Recipe with the chef_handler LWRP
58
+ ### Method 2: in a Recipe with the `chef_handler` LWRP
60
59
 
61
60
  **Note:** This method will not catch errors before the convergence phase. Use the previous method if you want to be able to report such errors.
62
61
 
63
- Use the [chef_handler LWRP](http://community.opscode.com/cookbooks/chef_handler), creating a recipe with the following:
62
+ Use the [`chef_handler` LWRP](https://supermarket.chef.io/cookbooks/chef_handler), creating a recipe with the following:
64
63
 
65
64
  ```ruby
66
65
  # Handler configuration options
67
66
  argument_array = [
68
- :access_key => "***AMAZON-KEY***",
69
- :secret_key => "***AMAZON-SECRET***",
70
- :topic_arn => "arn:aws:sns:***",
67
+ access_key: '***AMAZON-KEY***',
68
+ secret_key: '***AMAZON-SECRET***',
69
+ topic_arn: 'arn:aws:sns:***'
71
70
  ]
72
71
 
73
- # Depends on the `xml` cookbook to install nokogiri
74
- include_recipe "xml::ruby"
75
-
76
72
  # Install the `chef-handler-sns` RubyGem during the compile phase
77
- chef_gem "chef-handler-sns"
78
-
79
- # Then activate the handler with the `chef_handler` LWRP
80
- chef_handler "Chef::Handler::Sns" do
81
- source "#{Gem::Specification.find_by_name("chef-handler-sns").lib_dirs_glob}/chef/handler/sns"
82
- arguments argument_array
83
- supports :exception => true
84
- action :enable
73
+ chef_gem 'chef-handler-sns' do
74
+ compile_time true # Only for Chef 12
85
75
  end
86
- ```
87
-
88
- #### Method 2.1: in a Recipe with the chef_handler LWRP Using Gem < 1.8.6
89
-
90
- If you have an old version of gem package (< 1.8.6) without `find_by_name` or old chef-client (< 0.10.10) without `chef_gem`, you can try creating a recipe similar to the following:
91
-
92
- ```ruby
93
- # Handler configuration options
94
- argument_array = [
95
- :access_key => "***AMAZON-KEY***",
96
- :secret_key => "***AMAZON-SECRET***",
97
- :topic_arn => "arn:aws:sns:***",
98
- ]
99
-
100
- # Depends on the `xml` cookbook to install nokogiri
101
- include_recipe "xml::ruby"
102
-
103
- # Install the `chef-handler-sns` RubyGem during the compile phase
104
- if defined?(Chef::Resource::ChefGem)
105
- chef_gem "chef-handler-sns"
106
- else
107
- gem_package("chef-handler-sns") do
108
- action :nothing
109
- end.run_action(:install)
110
- end
111
-
112
- # Get the installed `chef-handler-sns` gem path
113
- sns_handler_path = Gem::Specification.respond_to?("find_by_name") ?
114
- Gem::Specification.find_by_name("chef-handler-sns").lib_dirs_glob :
115
- Gem.all_load_paths.grep(/chef-handler-sns/).first
116
76
 
117
77
  # Then activate the handler with the `chef_handler` LWRP
118
- chef_handler "Chef::Handler::Sns" do
119
- source "#{sns_handler_path}/chef/handler/sns"
78
+ chef_handler 'Chef::Handler::Sns' do
79
+ source 'chef/handler/sns'
120
80
  arguments argument_array
121
- supports :exception => true
81
+ supports exception: true
122
82
  action :enable
123
83
  end
124
84
  ```
125
85
 
126
- #### Method 2.2: in a Recipe with the chef_handler LWRP Inside AWS OpsWorks
86
+ See the [`chef_handler_sns` cookbook provider code](https://github.com/zuazo/chef_handler_sns-cookbook/blob/master/providers/default.rb) for a more complete working example.
127
87
 
128
- If you are inside [AWS OpsWorks](http://aws.amazon.com/opsworks/) or running Chef inside _Bundler_, you might receive the following error:
88
+ ### Method 3: Using the `chef-client` Cookbook
129
89
 
130
- Gem::LoadError
131
- --------------
132
- Could not find 'chef-handler-sns' (>= 0) among XX total gem(s)
133
-
134
- To fix this error, you should get the handler installation path using a code similar to the following:
90
+ You can also use the `node['chef_client']['config']` attribute of the [`chef-client`](https://github.com/chef-cookbooks/chef-client/tree/v4.3.2#start-report-exception-handlers) cookbook:
135
91
 
136
92
  ```ruby
137
- # Handler configuration options
138
- argument_array = [
139
- :access_key => "***AMAZON-KEY***",
140
- :secret_key => "***AMAZON-SECRET***",
141
- :topic_arn => "arn:aws:sns:***",
142
- ]
143
-
144
- # Depends on the `xml` cookbook to install nokogiri
145
- include_recipe "xml::ruby"
146
-
147
- # Install the `chef-handler-sns` RubyGem during the compile phase
148
- chef_gem "chef-handler-sns"
149
-
150
- # Get the installed `chef-handler-sns` gem path from Bundler
151
- sns_handler_path = nil
152
- bundle_path = ::File.join(Bundler.bundle_path.to_s, "specifications")
153
- Dir[::File.join(bundle_path, "*.gemspec")].each do |path|
154
- spec = Gem::Specification.load(path.untaint)
155
- if spec.name == "chef-handler-sns"
156
- sns_handler_path = spec.lib_dirs_glob
157
- end
158
- end
159
- if sns_handler_path.nil?
160
- Chef::Application.fatal!("chef-handler-sns not found inside Bundler path: #{bundle_path}")
161
- end
162
-
163
- # Then activate the handler with the `chef_handler` LWRP
164
- chef_handler "Chef::Handler::Sns" do
165
- source "#{Gem::Specification.find_by_name("chef-handler-sns").lib_dirs_glob}/chef/handler/sns"
166
- arguments argument_array
167
- supports :exception => true
168
- action :enable
169
- end
93
+ node.default['chef_client']['config']['exception_handlers'] = [{
94
+ 'class' => 'Chef::Handler::Sns',
95
+ 'arguments' => {
96
+ access_key: '***AMAZON-KEY***',
97
+ secret_key: '***AMAZON-SECRET***',
98
+ topic_arn: 'arn:aws:sns:***'
99
+ }.map { |k, v| "#{k}: #{v.inspect}" }
100
+ }]
170
101
  ```
171
102
 
172
- See the [`chef_handler_sns` cookbook provider code](https://github.com/onddo/chef_handler_sns-cookbook/blob/master/providers/default.rb) for a more complete working example.
173
-
174
103
  ### Usage with Amazon IAM Roles
175
104
 
176
105
  If you are using AWS [IAM roles](http://docs.aws.amazon.com/IAM/latest/UserGuide/WorkingWithRoles.html) with your server, probably you only need to specify the `topic_arn` parameter. A few simple examples:
177
106
 
178
- #### Method 1: in the Chef Config File
107
+ #### IAM Roles Method 1: in the Chef Config File
179
108
 
180
109
  You can install the RubyGem and configure Chef to use it:
181
110
 
182
- gem install chef-handler-sns
111
+ $ gem install chef-handler-sns
183
112
 
184
113
  Then add to the configuration (`/etc/chef/solo.rb` for chef-solo or `/etc/chef/client.rb` for chef-client):
185
114
 
186
115
  ```ruby
187
- require "chef/handler/sns"
116
+ require 'chef/handler/sns'
188
117
 
189
- exception_handlers << Chef::Handler::Sns.new({
190
- :topic_arn => "arn:aws:sns:us-east-1:12341234:MyTopicName"
191
- })
118
+ exception_handlers << Chef::Handler::Sns.new(
119
+ topic_arn: 'arn:aws:sns:us-east-1:12341234:MyTopicName'
120
+ )
192
121
  ```
193
122
 
194
- #### Method 2: in a Recipe with the chef_handler LWRP
123
+ #### IAM Roles Method 2: in a Recipe with the `chef_handler` LWRP
195
124
 
196
- Use the [chef_handler LWRP](http://community.opscode.com/cookbooks/chef_handler), creating a recipe with the following:
125
+ Use the [`chef_handler` LWRP](https://supermarket.chef.io/cookbooks/chef_handler), creating a recipe with the following:
197
126
 
198
127
  ```ruby
199
- # Depends on the `xml` cookbook to install nokogiri
200
- include_recipe "xml::ruby"
201
-
202
128
  # Install the `chef-handler-sns` RubyGem during the compile phase
203
- chef_gem "chef-handler-sns"
129
+ chef_gem 'chef-handler-sns' do
130
+ compile_time true # Only for Chef 12
131
+ end
204
132
 
205
133
  # Then activate the handler with the `chef_handler` LWRP
206
- chef_handler "Chef::Handler::Sns" do
207
- source "#{Gem::Specification.find_by_name("chef-handler-sns").lib_dirs_glob}/chef/handler/sns"
208
- arguments { :topic_arn => "arn:aws:sns:us-east-1:12341234:MyTopicName" }
209
- supports :exception => true
134
+ chef_handler 'Chef::Handler::Sns' do
135
+ source 'chef/handler/sns'
136
+ arguments topic_arn: 'arn:aws:sns:us-east-1:12341234:MyTopicName'
137
+ supports exception: true
210
138
  action :enable
211
139
  end
212
140
  ```
213
141
 
142
+ ### IAM Roles Method 3: Using the `chef-client` Cookbook
143
+
144
+ You can also use the `node['chef_client']['config']` attribute of the [`chef-client`](https://github.com/chef-cookbooks/chef-client/tree/v4.3.2#start-report-exception-handlers) cookbook:
145
+
146
+ ```ruby
147
+ node.default['chef_client']['config']['exception_handlers'] = [{
148
+ 'class' => 'Chef::Handler::Sns',
149
+ 'arguments' => ['topic_arn: "arn:aws:sns:***"']
150
+ }]
151
+ ```
152
+
214
153
  #### OpsWorks: Filter Notifications by Activity
154
+
215
155
  An optional array of OpsWorks activities can be supplied. If the array is set, notifications will
216
156
  only be triggered for the activities in the array, everything else will be discarded.
217
157
 
218
158
  ```ruby
219
159
  argument_array = [
220
- :filter_opsworks_activities => ["deploy","configure"]
160
+ filter_opsworks_activities: %w(deploy configure)
221
161
  ]
222
162
  ```
223
163
 
@@ -225,41 +165,46 @@ argument_array = [
225
165
 
226
166
  The following options are available to configure the handler:
227
167
 
228
- * `access_key` - AWS access key (required, but will try to read it from ohai with IAM roles).
229
- * `secret_key` - AWS secret key (required, but will try to read it from ohai with IAM roles).
230
- * `token` - AWS security token (optional, read from ohai with IAM roles). Set to `false` to disable the token detected by ohai.
168
+ * `access_key` - AWS access key (required, but will try to read it from Ohai with IAM roles).
169
+ * `secret_key` - AWS secret key (required, but will try to read it from Ohai with IAM roles).
170
+ * `token` - AWS security token (optional, read from Ohai with IAM roles). Set to `false` to disable the token detected by Ohai.
231
171
  * `topic_arn` - AWS topic ARN name (required).
232
172
  * `region` - AWS region (optional).
233
173
  * `subject` - Message subject string in erubis format (optional).
234
174
  * `body_template` - Full path of an erubis template file to use for the message body (optional).
235
175
  * `filter_opsworks_activities` - An array of OpsWorks activities to be triggered with (optional). When set, everything else will be discarded.
236
176
 
237
- **Note:** When the machine has an IAM role, will try to read the credentials from ohai. So in the best case, you only need to specify the `topic_arn`.
177
+ **Note:** When the machine has an IAM role, will try to read the credentials from Ohai. So in the best case, you only need to specify the `topic_arn`.
238
178
 
239
- ### subject
179
+ ### `subject` Configuration Option
240
180
 
241
181
  Here is an example of the `subject` configuration option using the ruby configuration file (`solo.rb` or `client.rb`):
242
182
 
243
183
  ```ruby
244
- sns_handler.subject: "Chef-run: <%= node.name %> - <%= run_status.success? ? "ok" : "error" %>"
184
+ sns_handler.subject(
185
+ "Chef-run: <%= node.name %> - <%= run_status.success? ? 'ok' : 'error' %>"
186
+ )
245
187
  ```
246
188
 
247
- Using the [chef_handler LWRP](http://community.opscode.com/cookbooks/chef_handler):
189
+ Using the [`chef_handler` LWRP](https://supermarket.chef.io/cookbooks/chef_handler):
190
+
248
191
  ```ruby
249
192
  argument_array = [
250
- :access_key => "***AMAZON-KEY***",
251
- :secret_key => "***AMAZON-SECRET***",
252
- :topic_arn => "arn:aws:sns:***",
253
- :subject => "Chef-run: <%= node.name %> - <%= run_status.success? ? "ok" : "error" %>",
193
+ access_key: '***AMAZON-KEY***',
194
+ secret_key: '***AMAZON-SECRET***',
195
+ topic_arn: 'arn:aws:sns:***',
196
+ subject:
197
+ "Chef-run: <%= node.name %> - <%= run_status.success? ? 'ok' : 'error' %>"
254
198
  # [...]
255
199
  ]
256
- chef_handler "Chef::Handler::Sns" do
200
+
201
+ chef_handler 'Chef::Handler::Sns' do
257
202
  # [...]
258
203
  arguments argument_array
259
204
  end
260
205
  ```
261
206
 
262
- The following variables are accesible inside the template:
207
+ The following variables are accessible inside the template:
263
208
 
264
209
  * `start_time` - The time the chef run started.
265
210
  * `end_time` - The time the chef run ended.
@@ -268,48 +213,49 @@ The following variables are accesible inside the template:
268
213
  * `exception` - The uncaught Exception that terminated the chef run, or nil if the run completed successfully.
269
214
  * `backtrace` - The backtrace captured by the uncaught exception that terminated the chef run, or nil if the run completed successfully.
270
215
  * `node` - The Chef::Node for this client run.
271
- * `all_resources` - An Array containing all resources in the chef run's resource_collection.
216
+ * `all_resources` - An Array containing all resources in the chef-run resource collection.
272
217
  * `updated_resources` - An Array containing all resources that were updated during the chef run.
273
218
  * `success?` - Was the chef run successful? True if the chef run did not raise an uncaught exception.
274
219
  * `failed?` - Did the chef run fail? True if the chef run raised an uncaught exception.
275
220
 
276
- ### body_template
221
+ ### `body_template` Configuration Option
277
222
 
278
- This configuration option needs to contain the full path of an erubis template. For example:
223
+ This configuration option needs to contain the full path of an Erubis template. For example:
279
224
 
280
225
  ```ruby
281
- # recipe "myapp::sns_handler"
226
+ # recipe 'myapp::sns_handler'
282
227
 
283
- cookbook_file "chef_handler_sns_body.erb" do
284
- path "/tmp/chef_handler_sns_body.erb"
228
+ cookbook_file 'chef_handler_sns_body.erb' do
229
+ path '/tmp/chef_handler_sns_body.erb'
285
230
  # [...]
286
231
  end
287
232
 
288
233
  argument_array = [
289
- :access_key => "***AMAZON-KEY***",
290
- :secret_key => "***AMAZON-SECRET***",
291
- :topic_arn => "arn:aws:sns:***",
292
- :body_template => "/tmp/chef_handler_sns_body.erb",
234
+ access_key: '***AMAZON-KEY***',
235
+ secret_key: '***AMAZON-SECRET***',
236
+ topic_arn: 'arn:aws:sns:***',
237
+ body_template: '/tmp/chef_handler_sns_body.erb'
293
238
  # [...]
294
239
  ]
295
- chef_handler "Chef::Handler::Sns" do
240
+
241
+ chef_handler 'Chef::Handler::Sns' do
296
242
  # [...]
297
243
  arguments argument_array
298
244
  end
299
245
  ```
300
246
 
301
247
  ```erb
302
- <%# file "myapp/files/default/chef_handler_sns_body.erb" %>
248
+ <%# file 'myapp/files/default/chef_handler_sns_body.erb' %>
303
249
 
304
250
  Node Name: <%= node.name %>
305
- <% if node.attribute?("fqdn") -%>
251
+ <% if node.attribute?('fqdn') -%>
306
252
  Hostname: <%= node.fqdn %>
307
253
  <% end -%>
308
254
 
309
255
  Chef Run List: <%= node.run_list.to_s %>
310
256
  Chef Environment: <%= node.chef_environment %>
311
257
 
312
- <% if node.attribute?("ec2") -%>
258
+ <% if node.attribute?('ec2') -%>
313
259
  Instance Id: <%= node.ec2.instance_id %>
314
260
  Instance Public Hostname: <%= node.ec2.public_hostname %>
315
261
  Instance Hostname: <%= node.ec2.hostname %>
@@ -329,15 +275,15 @@ Stacktrace:
329
275
  <% end -%>
330
276
  ```
331
277
 
332
- See the [subject](#subject) documentation for more details on the variables accesible inside the template.
278
+ See the [subject](#subject) documentation for more details on the variables accessible inside the template.
333
279
 
334
280
  ## IAM Role Credentials from Ohai
335
281
 
336
- IAM Role information and credentials are gathered from ohai by default if they exists.
282
+ IAM Role information and credentials are gathered from Ohai by default if they exists.
337
283
 
338
- No aditional ohai plugin is required. This is natively supported by ohai since version `6.16.0` ([OHAI-400](https://tickets.opscode.com/browse/OHAI-400)).
284
+ No aditional Ohai plugin is required. This is natively supported by Ohai since version `6.16.0` ([OHAI-400](https://tickets.opscode.com/browse/OHAI-400)).
339
285
 
340
- These are the used ohai attributes:
286
+ These are the used Ohai attributes:
341
287
 
342
288
  ```
343
289
  ec2
@@ -350,29 +296,29 @@ ec2
350
296
  └── Token
351
297
  ```
352
298
 
353
- ## Running the Tests
354
-
355
- Minitest tests can be run as usual:
299
+ ## Testing
356
300
 
357
- rake test
301
+ See [TESTING.md](https://github.com/zuazo/chef-handler-sns/blob/master/TESTING.md).
358
302
 
359
303
  ## Contributing
360
304
 
361
- 1. Fork the repository on Github.
362
- 2. Create a named feature branch (like `add_component_x`).
363
- 3. Write tests for your change.
364
- 4. Write your change.
365
- 5. Run the tests, ensuring they all pass (try as much as possible not to reduce coverage).
366
- 6. Submit a [Pull Request using Github])(http://github.com/onddo/chef-handler-sns/pulls).
305
+ Please do not hesitate to [open an issue](https://github.com/zuazo/chef-handler-sns/issues/new) with any questions or problems.
306
+
307
+ See [CONTRIBUTING.md](https://github.com/zuazo/chef-handler-sns/blob/master/CONTRIBUTING.md).
308
+
309
+ ## TODO
310
+
311
+ See [TODO.md](https://github.com/zuazo/chef-handler-sns/blob/master/TODO.md).
367
312
 
368
313
  ## License and Author
369
314
 
370
315
  | | |
371
316
  |:---------------------|:-----------------------------------------|
372
- | **Author:** | [Xabier de Zuazo](https://github.com/zuazo) (<xabier@onddo.com>)
317
+ | **Author:** | [Xabier de Zuazo](https://github.com/zuazo) (<xabier@zuazo.org>)
373
318
  | **Contributor:** | [Florian Holzhauer](https://github.com/fh)
374
319
  | **Contributor:** | [Michael Hobbs](https://github.com/michaelshobbs)
375
- | **Copyright:** | Copyright (c) 2013-2014 Onddo Labs, SL. (www.onddo.com)
320
+ | **Copyright:** | Copyright (c) 2015 Xabier de Zuazo
321
+ | **Copyright:** | Copyright (c) 2013-2014 Onddo Labs, SL.
376
322
  | **License:** | Apache License, Version 2.0
377
323
 
378
324
  Licensed under the Apache License, Version 2.0 (the "License");