chef-handler-sns 1.1.0 → 1.2.0.beta.1

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: bc3b47ba35513e1fa3c1d7df3ac62d95feaa396d
4
- data.tar.gz: c3936aaa918435c64cd476f51f05c8c78e1ba4d2
3
+ metadata.gz: 75a18e73a5d271e121792cb61dd8ceffa4b9a71f
4
+ data.tar.gz: d6a1e0119112e417d988b18ef27e1fa4d07782f2
5
5
  SHA512:
6
- metadata.gz: a36d6e4ff9da8f1a5d502e4d02510ac78793d7c7863c3acd9587bd7a991c7ecb123e3522f2dcae236f7df1a46fadf140205bb632664d26ad70ed5d3bf5971b7d
7
- data.tar.gz: f1a242ae00a139aea03b43432143e0dcbf5c052d086d040f1c8e8d9e48bddb49b818c244848ff5e796085e4e666f6ded83f2561cd1ca2f005ba9a60ad33939d9
6
+ metadata.gz: 37f868ea988256a0a84dac96a480bb90d33bc37f031b07d3589285fc1a53ce4d94791801fa50726a7191976c1ac2073053f78d31f4d9bbae9bb569c9789e46ac
7
+ data.tar.gz: bdfc6b843d17ce232b9eb1bb45aafc3235f70f2e11359c082b596b352136592a8f3bd98ebeb83aa788d34ce56e5ff8aaefd071a9323a436146c6ea223e1fb8f4
data/README.md CHANGED
@@ -31,7 +31,7 @@ This Chef Handler is heavily based on [Joshua Timberman](https://github.com/jtim
31
31
 
32
32
  You can install this handler in two ways:
33
33
 
34
- ### Method 1: In the Chef config file
34
+ ### Method 1: in the Chef Config File
35
35
 
36
36
  You can install the RubyGem and configure Chef to use it:
37
37
 
@@ -57,7 +57,9 @@ sns_handler.region "us-east-1" # optional
57
57
  exception_handlers << sns_handler
58
58
  ```
59
59
 
60
- ### Method 2: In a recipe with the chef_handler LWRP
60
+ ### Method 2: in a Recipe with the chef_handler LWRP
61
+
62
+ **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.
61
63
 
62
64
  Use the [chef_handler LWRP](http://community.opscode.com/cookbooks/chef_handler), creating a recipe with the following:
63
65
 
@@ -84,6 +86,8 @@ chef_handler "Chef::Handler::Sns" do
84
86
  end
85
87
  ```
86
88
 
89
+ #### Method 2.1: in a Recipe with the chef_handler LWRP Using Gem < 1.8.6
90
+
87
91
  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:
88
92
 
89
93
  ```ruby
@@ -120,11 +124,59 @@ chef_handler "Chef::Handler::Sns" do
120
124
  end
121
125
  ```
122
126
 
123
- ### Usage with Amazon IAM roles
127
+ #### Method 2.2: in a Recipe with the chef_handler LWRP Inside AWS OpsWorks
128
+
129
+ If you are inside [AWS OpsWorks](http://aws.amazon.com/opsworks/) or running Chef inside _Bundler_, you might receive the following error:
130
+
131
+ Gem::LoadError
132
+ --------------
133
+ Could not find 'chef-handler-sns' (>= 0) among XX total gem(s)
134
+
135
+ To fix this error, you should get the handler installation path using a code similar to the following:
136
+
137
+ ```ruby
138
+ # Handler configuration options
139
+ argument_array = [
140
+ :access_key => "***AMAZON-KEY***",
141
+ :secret_key => "***AMAZON-SECRET***",
142
+ :topic_arn => "arn:aws:sns:***",
143
+ ]
144
+
145
+ # Depends on the `xml` cookbook to install nokogiri
146
+ include_recipe "xml::ruby"
147
+
148
+ # Install the `chef-handler-sns` RubyGem during the compile phase
149
+ chef_gem "chef-handler-sns"
150
+
151
+ # Get the installed `chef-handler-sns` gem path from Bundler
152
+ sns_handler_path = nil
153
+ bundle_path = ::File.join(Bundler.bundle_path.to_s, "specifications")
154
+ Dir[::File.join(bundle_path, "*.gemspec")].each do |path|
155
+ spec = Gem::Specification.load(path.untaint)
156
+ if spec.name == "chef-handler-sns"
157
+ sns_handler_path = spec.lib_dirs_glob
158
+ end
159
+ end
160
+ if sns_handler_path.nil?
161
+ Chef::Application.fatal!("chef-handler-sns not found inside Bundler path: #{bundle_path}")
162
+ end
163
+
164
+ # Then activate the handler with the `chef_handler` LWRP
165
+ chef_handler "Chef::Handler::Sns" do
166
+ source "#{Gem::Specification.find_by_name("chef-handler-sns").lib_dirs_glob}/chef/handler/sns"
167
+ arguments argument_array
168
+ supports :exception => true
169
+ action :enable
170
+ end
171
+ ```
172
+
173
+ 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.
174
+
175
+ ### Usage with Amazon IAM Roles
124
176
 
125
177
  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:
126
178
 
127
- #### Method 1: In the Chef config file
179
+ #### Method 1: in the Chef Config File
128
180
 
129
181
  You can install the RubyGem and configure Chef to use it:
130
182
 
@@ -140,7 +192,7 @@ exception_handlers << Chef::Handler::Sns.new({
140
192
  })
141
193
  ```
142
194
 
143
- #### Method 2: In a recipe with the chef_handler LWRP
195
+ #### Method 2: in a Recipe with the chef_handler LWRP
144
196
 
145
197
  Use the [chef_handler LWRP](http://community.opscode.com/cookbooks/chef_handler), creating a recipe with the following:
146
198
 
@@ -160,13 +212,13 @@ chef_handler "Chef::Handler::Sns" do
160
212
  end
161
213
  ```
162
214
 
163
- ##### Opsworks: Filter Notifications by Activity
164
- An optional array of opsworks activities can be supplied. If the array is set, notifications will
215
+ #### OpsWorks: Filter Notifications by Activity
216
+ An optional array of OpsWorks activities can be supplied. If the array is set, notifications will
165
217
  only be triggered for the activities in the array, everything else will be discarded.
166
218
 
167
219
  ```ruby
168
220
  argument_array = [
169
- :filter_opsworks_activities => ['deploy','configure']
221
+ :filter_opsworks_activities => ["deploy","configure"]
170
222
  ]
171
223
  ```
172
224
 
@@ -176,11 +228,12 @@ The following options are available to configure the handler:
176
228
 
177
229
  * `access_key` - AWS access key (required, but will try to read it from ohai with IAM roles).
178
230
  * `secret_key` - AWS secret key (required, but will try to read it from ohai with IAM roles).
179
- * `token` - AWS security token (optional, read from ohai with IAM roles).
231
+ * `token` - AWS security token (optional, read from ohai with IAM roles). Set to `false` to disable the token detected by ohai.
180
232
  * `topic_arn` - AWS topic ARN name (required).
181
233
  * `region` - AWS region (optional).
182
234
  * `subject` - Message subject string in erubis format (optional).
183
235
  * `body_template` - Full path of an erubis template file to use for the message body (optional).
236
+ * `filter_opsworks_activities` - An array of OpsWorks activities to be triggered with (optional). When set, everything else will be discarded.
184
237
 
185
238
  **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`.
186
239
 
@@ -189,7 +242,7 @@ The following options are available to configure the handler:
189
242
  Here is an example of the `subject` configuration option using the ruby configuration file (`solo.rb` or `client.rb`):
190
243
 
191
244
  ```ruby
192
- sns_handler.subject: "Chef-run: <%= node.name %> - <%= run_status.success? ? 'ok' : 'error' %>"
245
+ sns_handler.subject: "Chef-run: <%= node.name %> - <%= run_status.success? ? "ok" : "error" %>"
193
246
  ```
194
247
 
195
248
  Using the [chef_handler LWRP](http://community.opscode.com/cookbooks/chef_handler):
@@ -198,7 +251,7 @@ argument_array = [
198
251
  :access_key => "***AMAZON-KEY***",
199
252
  :secret_key => "***AMAZON-SECRET***",
200
253
  :topic_arn => "arn:aws:sns:***",
201
- :subject => "Chef-run: <%= node.name %> - <%= run_status.success? ? 'ok' : 'error' %>",
254
+ :subject => "Chef-run: <%= node.name %> - <%= run_status.success? ? "ok" : "error" %>",
202
255
  # [...]
203
256
  ]
204
257
  chef_handler "Chef::Handler::Sns" do
@@ -279,7 +332,26 @@ Stacktrace:
279
332
 
280
333
  See the [subject](#subject) documentation for more details on the variables accesible inside the template.
281
334
 
282
- ## Running the tests
335
+ ## IAM Role Credentials from Ohai
336
+
337
+ IAM Role information and credentials are gathered from ohai by default if they exists.
338
+
339
+ 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)).
340
+
341
+ These are the used ohai attributes:
342
+
343
+ ```
344
+ ec2
345
+ ├── placement_availability_zone: region is set from here.
346
+ └── iam
347
+ └── security-credentials
348
+ └── IAMRoleName
349
+ ├── AccessKeyId
350
+ ├── SecretAccessKey
351
+ └── Token
352
+ ```
353
+
354
+ ## Running the Tests
283
355
 
284
356
  Minitest tests can be run as usual:
285
357
 
@@ -94,7 +94,7 @@ class Chef
94
94
  set_or_return(
95
95
  :token,
96
96
  arg,
97
- :kind_of => String
97
+ :kind_of => [ String, FalseClass ]
98
98
  )
99
99
  end
100
100
 
@@ -2,7 +2,7 @@
2
2
  class Chef
3
3
  class Handler
4
4
  class Sns < ::Chef::Handler
5
- VERSION = '1.1.0'
5
+ VERSION = '1.2.0.beta.1'
6
6
  end
7
7
  end
8
8
  end
@@ -17,6 +17,7 @@ describe Chef::Handler::Sns::Config do
17
17
  @config_params = {
18
18
  :access_key => '***AMAZON-KEY***',
19
19
  :secret_key => '***AMAZON-SECRET***',
20
+ :token => '***AMAZON-TOKEN***',
20
21
  :topic_arn => 'arn:aws:sns:***',
21
22
  }
22
23
  @node = Chef::Node.new
@@ -54,13 +55,24 @@ describe Chef::Handler::Sns::Config do
54
55
  @sns_config.send(option, "test")
55
56
  end
56
57
 
57
- [ true, false, 25, Object.new ].each do |bad_value|
58
+ it "should set '#{option}' option correctly" do
59
+ @sns_config.send(option, "test")
60
+
61
+ assert_equal @sns_config.send(option), "test"
62
+ end
63
+
64
+ [ true, 25, Object.new ].each do |bad_value|
58
65
  it "should throw and exception wen '#{option}' option is set to #{bad_value.to_s}" do
59
66
  assert_raises(Chef::Exceptions::ValidationFailed) { @sns_config.send(option, bad_value) }
60
67
  end
61
68
  end
62
69
  end
63
70
 
71
+ it 'should accept false value to reset the token' do
72
+ @sns_config.token(false)
73
+ assert_equal @sns_config.token, false
74
+ end
75
+
64
76
  it 'should throw an exception when the body template file does not exist' do
65
77
  @sns_config.body_template('/tmp/nonexistent-template.erb')
66
78
  ::File.stubs(:exists?).with(@sns_config.body_template).returns(false)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-handler-sns
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Onddo Labs, SL.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-17 00:00:00.000000000 Z
11
+ date: 2014-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -155,9 +155,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
155
155
  version: '0'
156
156
  required_rubygems_version: !ruby/object:Gem::Requirement
157
157
  requirements:
158
- - - '>='
158
+ - - '>'
159
159
  - !ruby/object:Gem::Version
160
- version: '0'
160
+ version: 1.3.1
161
161
  requirements: []
162
162
  rubyforge_project:
163
163
  rubygems_version: 2.0.6