chef-handler-sns 0.2.6 → 1.0.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: bfee82d47a8609452fe2dc49cb54f193a965196b
4
- data.tar.gz: fe7609957de5da440393d3872f7e079c2426b3c3
3
+ metadata.gz: d829c08cd526a8fa89e47bcc6c277807e9c85644
4
+ data.tar.gz: 6590d80bc3673b6b3a353c28451e431b1517d0f9
5
5
  SHA512:
6
- metadata.gz: 5b1c11e65fad0dc9f69d2425aa4f99b8e0f32d24c6f15ebad4ee4480b725fe4a55ad9cac28436e3fef18b779e1177d935fa69a84486724fad57401f314e61e66
7
- data.tar.gz: e6417a3f2b5aa1d8118b25b8a63b6b59697cab59c888e27d0f33a4a461bec508375250f7424093c829ac15cd655d635518416d3788478e452fc5ca8c56a1d5f4
6
+ metadata.gz: a203949fa961def921c58890f09e254615a4eb0c80cf5e82d120a0be02a63fdd3fa364cb844febccfb58daf41f9c7159c4d7af332fae8bdc5359a3c4083e6cdf
7
+ data.tar.gz: aa93a6fb844649dea3377851eea94b4cf436607ddfd683a1ac6aaf7e6d531c70f3b25d3ad0c225ee91f15c0dbaaef552ce5dcd8ae4f60aeb449146f6e33c8c9b
data/LICENSE CHANGED
@@ -175,18 +175,7 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
175
175
 
176
176
  END OF TERMS AND CONDITIONS
177
177
 
178
- APPENDIX: How to apply the Apache License to your work.
179
-
180
- To apply the Apache License to your work, attach the following
181
- boilerplate notice, with the fields enclosed by brackets "[]"
182
- replaced with your own identifying information. (Don't include
183
- the brackets!) The text should be enclosed in the appropriate
184
- comment syntax for the file format. We also recommend that a
185
- file or class name and description of purpose be included on the
186
- same "printed page" as the copyright notice for easier
187
- identification within third-party archives.
188
-
189
- Copyright [yyyy] [name of copyright owner]
178
+ Copyright 2014 Onddo Labs, SL. (www.onddo.com)
190
179
 
191
180
  Licensed under the Apache License, Version 2.0 (the "License");
192
181
  you may not use this file except in compliance with the License.
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Chef Handler SNS
2
2
 
3
- A simple Chef report handler that reports status of a Chef run through Amazon SNS.
3
+ 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).
4
+
5
+ [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.
4
6
 
5
7
  This Chef Handler is heavily based on [Joshua Timberman](https://github.com/jtimberman) examples.
6
8
 
@@ -14,7 +16,13 @@ This Chef Handler is heavily based on [Joshua Timberman](https://github.com/jtim
14
16
  ## Requirements
15
17
 
16
18
  * Amazon AWS: uses Amazon SNS service.
17
- * Uses the `right_aws` library.
19
+ * Uses the `aws-sdk` library.
20
+ * `aws-sdk` requires `nokogiri`, which also has the following requires:
21
+ * `libxml2-dev` and `libxslt-dev` installed (optional).
22
+ * `gcc` and `make` installed (this will compile and install libxml2 and libxslt internally if not found).
23
+ * For `Ruby 1.8`, you need to install old versions of the following dependencies:
24
+ * `mime-types < 2.0`.
25
+ * `nokogiri < 1.6`.
18
26
 
19
27
  ## Usage
20
28
 
@@ -103,17 +111,57 @@ chef_handler "Chef::Handler::Sns" do
103
111
  end
104
112
  ```
105
113
 
114
+ ### Usage with Amazon IAM roles
115
+
116
+ 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:
117
+
118
+ #### Method 1: In the Chef config file
119
+
120
+ You can install the RubyGem and configure Chef to use it:
121
+
122
+ gem install chef-handler-sns
123
+
124
+ Then add to the configuration (`/etc/chef/solo.rb` for chef-solo or `/etc/chef/client.rb` for chef-client):
125
+
126
+ ```ruby
127
+ require "chef/handler/sns"
128
+
129
+ exception_handlers << Chef::Handler::Sns.new({
130
+ :topic_arn => "arn:aws:sns:us-east-1:12341234:MyTopicName"
131
+ })
132
+ ```
133
+
134
+ #### Method 2: In a recipe with the chef_handler LWRP
135
+
136
+ Use the [chef_handler LWRP](http://community.opscode.com/cookbooks/chef_handler), creating a recipe with the following:
137
+
138
+ ```ruby
139
+ # Install the `chef-handler-sns` RubyGem during the compile phase
140
+ chef_gem "chef-handler-sns"
141
+
142
+ # Then activate the handler with the `chef_handler` LWRP
143
+ chef_handler "Chef::Handler::Sns" do
144
+ source "#{Gem::Specification.find_by_name("chef-handler-sns").lib_dirs_glob}/chef/handler/sns"
145
+ arguments { :topic_arn => "arn:aws:sns:us-east-1:12341234:MyTopicName" }
146
+ supports :exception => true
147
+ action :enable
148
+ end
149
+ ```
150
+
106
151
  ## Handler Configuration Options
107
152
 
108
153
  The following options are available to configure the handler:
109
154
 
110
- * `access_key` - AWS access key (required).
111
- * `secret_key` - AWS secret key (required).
155
+ * `access_key` - AWS access key (required, but will try to read it from ohai with IAM roles).
156
+ * `secret_key` - AWS secret key (required, but will try to read it from ohai with IAM roles).
157
+ * `token` - AWS security token (optional, read from ohai with IAM roles).
112
158
  * `topic_arn` - AWS topic ARN name (required).
113
159
  * `region` - AWS region (optional).
114
160
  * `subject` - Message subject string in erubis format (optional).
115
161
  * `body_template` - Full path of an erubis template file to use for the message body (optional).
116
162
 
163
+ **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`.
164
+
117
165
  ### subject
118
166
 
119
167
  Here is an example of the `subject` configuration option using the ruby configuration file (`solo.rb` or `client.rb`):
@@ -224,7 +272,7 @@ Minitest tests can be run as usual:
224
272
  | | |
225
273
  |:---------------------|:-----------------------------------------|
226
274
  | **Author:** | Xabier de Zuazo (<xabier@onddo.com>)
227
- | **Copyright:** | Copyright (c) 2013 Onddo Labs, SL. (www.onddo.com)
275
+ | **Copyright:** | Copyright (c) 2014 Onddo Labs, SL. (www.onddo.com)
228
276
  | **License:** | Apache License, Version 2.0
229
277
 
230
278
  Licensed under the Apache License, Version 2.0 (the "License");
@@ -0,0 +1,67 @@
1
+ #
2
+ # Author:: Xabier de Zuazo (<xabier@onddo.com>)
3
+ # Copyright:: Copyright (c) 2014 Onddo Labs, SL.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ class Chef
20
+ class Handler
21
+ class Sns < ::Chef::Handler
22
+ module Config
23
+ class Ohai
24
+
25
+ def initialize(node)
26
+ read_config(node)
27
+ end
28
+
29
+ def region
30
+ @region
31
+ end
32
+
33
+ def access_key
34
+ @access_key
35
+ end
36
+
37
+ def secret_key
38
+ @secret_key
39
+ end
40
+
41
+ def token
42
+ @token
43
+ end
44
+
45
+ protected
46
+
47
+ def read_config(node)
48
+ return unless node.attribute?('ec2')
49
+ if node.ec2.attribute?('placement_availability_zone') and
50
+ node.ec2.placement_availability_zone.kind_of?(String)
51
+ @region = node.ec2.placement_availability_zone.chop
52
+ end
53
+ if node.ec2.attribute?('iam') and node.ec2.iam.attribute?('security-credentials')
54
+ iam_role, credentials = node.ec2.iam['security-credentials'].first
55
+ unless credentials.nil?
56
+ @access_key = credentials['AccessKeyId']
57
+ @secret_key = credentials['SecretAccessKey']
58
+ @token = credentials['Token']
59
+ end
60
+ end
61
+ end
62
+
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Xabier de Zuazo (<xabier@onddo.com>)
3
- # Copyright:: Copyright (c) 2013 Onddo Labs, SL.
3
+ # Copyright:: Copyright (c) 2014 Onddo Labs, SL.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,6 +16,7 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
+ require 'chef/handler/sns/config/ohai'
19
20
  require 'chef/mixin/params_validate'
20
21
  require 'chef/exceptions'
21
22
 
@@ -27,7 +28,19 @@ class Chef
27
28
  include ::Chef::Mixin::ParamsValidate
28
29
 
29
30
  REQUIRED = [ 'access_key', 'secret_key', 'topic_arn' ]
30
-
31
+
32
+ def config_from_ohai(node)
33
+ config_ohai = Config::Ohai.new(node)
34
+ [
35
+ :region,
36
+ :access_key,
37
+ :secret_key,
38
+ :token,
39
+ ].each do |attr|
40
+ self.send(attr, config_ohai.send(attr)) if self.send(attr).nil?
41
+ end
42
+ end
43
+
31
44
  def config_init(config={})
32
45
  config.each do |key, value|
33
46
  if Config.respond_to?(key) and not /^config_/ =~ key.to_s
@@ -37,21 +50,22 @@ class Chef
37
50
  end
38
51
  end
39
52
  end
40
-
41
- def config_check
53
+
54
+ def config_check(node=nil)
55
+ config_from_ohai(node) if node
42
56
  REQUIRED.each do |key|
43
57
  if self.send(key).nil?
44
58
  raise Exceptions::ValidationFailed,
45
59
  "Required argument #{key.to_s} is missing!"
46
60
  end
47
61
  end
48
-
62
+
49
63
  if body_template and not ::File.exists?(body_template)
50
64
  raise Exceptions::ValidationFailed,
51
65
  "Template file not found: #{body_template}."
52
66
  end
53
67
  end
54
-
68
+
55
69
  def access_key(arg=nil)
56
70
  set_or_return(
57
71
  :access_key,
@@ -59,7 +73,7 @@ class Chef
59
73
  :kind_of => String
60
74
  )
61
75
  end
62
-
76
+
63
77
  def secret_key(arg=nil)
64
78
  set_or_return(
65
79
  :secret_key,
@@ -67,7 +81,7 @@ class Chef
67
81
  :kind_of => String
68
82
  )
69
83
  end
70
-
84
+
71
85
  def region(arg=nil)
72
86
  set_or_return(
73
87
  :region,
@@ -75,7 +89,7 @@ class Chef
75
89
  :kind_of => String
76
90
  )
77
91
  end
78
-
92
+
79
93
  def token(arg=nil)
80
94
  set_or_return(
81
95
  :token,
@@ -83,7 +97,7 @@ class Chef
83
97
  :kind_of => String
84
98
  )
85
99
  end
86
-
100
+
87
101
  def topic_arn(arg=nil)
88
102
  set_or_return(
89
103
  :topic_arn,
@@ -91,7 +105,7 @@ class Chef
91
105
  :kind_of => String
92
106
  )
93
107
  end
94
-
108
+
95
109
  def subject(arg=nil)
96
110
  set_or_return(
97
111
  :subject,
@@ -99,7 +113,7 @@ class Chef
99
113
  :kind_of => String
100
114
  )
101
115
  end
102
-
116
+
103
117
  def body_template(arg=nil)
104
118
  set_or_return(
105
119
  :body_template,
@@ -107,8 +121,8 @@ class Chef
107
121
  :kind_of => String
108
122
  )
109
123
  end
110
-
124
+
111
125
  end
112
- end
113
- end
114
- end
126
+ end
127
+ end
128
+ end
@@ -26,7 +26,7 @@ Instance Public IPv4: <%= node.ec2.public_ipv4 %>
26
26
  Instance Local IPv4: <%= node.ec2.local_ipv4 %>
27
27
  <% end -%>
28
28
  <% end -%>
29
-
29
+
30
30
  Chef Client Elapsed Time: <%= elapsed_time.to_s %>
31
31
  Chef Client Start Time: <%= start_time.to_s %>
32
32
  Chef Client Start Time: <%= end_time.to_s %>
@@ -2,7 +2,7 @@
2
2
  class Chef
3
3
  class Handler
4
4
  class Sns < ::Chef::Handler
5
- VERSION = '0.2.6'
5
+ VERSION = '1.0.0.beta.1'
6
6
  end
7
7
  end
8
8
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Xabier de Zuazo (<xabier@onddo.com>)
3
- # Copyright:: Copyright (c) 2013 Onddo Labs, SL.
3
+ # Copyright:: Copyright (c) 2014 Onddo Labs, SL.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,26 +18,29 @@
18
18
 
19
19
  require 'chef/handler'
20
20
  require 'chef/handler/sns/config'
21
- require 'right_aws'
21
+ require 'aws-sdk'
22
22
  require 'erubis'
23
23
 
24
24
  class Chef
25
25
  class Handler
26
26
  class Sns < ::Chef::Handler
27
27
  include ::Chef::Handler::Sns::Config
28
-
28
+
29
29
  def initialize(config={})
30
30
  Chef::Log.debug("#{self.class.to_s} initialized.")
31
31
  config_init(config)
32
32
  end
33
-
33
+
34
34
  def report
35
- config_check
36
- sns.publish(topic_arn, sns_body, sns_subject)
35
+ config_check(node)
36
+ sns.topics[topic_arn].publish(
37
+ sns_body,
38
+ { :subject => sns_subject }
39
+ )
37
40
  end
38
41
 
39
- def server
40
- @sns.params[:server]
42
+ def get_region
43
+ sns.config.region
41
44
  end
42
45
 
43
46
  protected
@@ -45,18 +48,16 @@ class Chef
45
48
  def sns
46
49
  @sns ||= begin
47
50
  params = {
51
+ :access_key_id => access_key,
52
+ :secret_access_key => secret_key,
48
53
  :logger => Chef::Log
49
54
  }
50
- if (region)
51
- params[:region] = region
52
- elsif node.attribute?('ec2') and node.ec2.attribute?('placement_availability_zone')
53
- params[:region] = node.ec2.placement_availability_zone.chop
54
- end
55
- params[:token] = token if token
56
- RightAws::SnsInterface.new(access_key, secret_key, params)
55
+ params[:region] = region if region
56
+ params[:session_token] = token if token
57
+ AWS::SNS.new(params)
57
58
  end
58
59
  end
59
-
60
+
60
61
  def sns_subject
61
62
  if subject
62
63
  context = self
@@ -68,14 +69,14 @@ class Chef
68
69
  "#{chef_client} #{status} in #{node.name}"
69
70
  end
70
71
  end
71
-
72
+
72
73
  def sns_body
73
74
  template = IO.read(body_template || "#{File.dirname(__FILE__)}/sns/templates/body.erb")
74
75
  context = self
75
76
  eruby = Erubis::Eruby.new(template)
76
77
  eruby.evaluate(context)
77
78
  end
78
-
79
+
79
80
  end
80
81
  end
81
82
  end
@@ -2,14 +2,20 @@ require 'helper'
2
2
  require 'chef/node'
3
3
  require 'chef/run_status'
4
4
 
5
- class RightAws::FakeSnsInterface < RightAws::SnsInterface
6
- attr_reader :sns_interface_new, :topic_arn, :message, :subject
5
+ class AWS::FakeSNS
6
+ attr_reader :sns_new
7
7
 
8
- def fake_new
9
- @sns_interface_new = true
8
+ def initialize(config)
9
+ @sns_new = true
10
10
  return self
11
11
  end
12
12
 
13
+ def topics
14
+ {
15
+ 'arn:aws:sns:***' => AWS::SNS::Topic.new('arn:aws:sns:***')
16
+ }
17
+ end
18
+
13
19
  end
14
20
 
15
21
  class Chef::Handler::FakeSns < Chef::Handler::Sns
@@ -26,17 +32,31 @@ end
26
32
 
27
33
  describe Chef::Handler::Sns do
28
34
  before do
29
- RightAws::SnsInterface.any_instance.stubs(:publish).returns(true)
35
+ AWS::SNS::Topic.any_instance.stubs(:publish).returns(true)
36
+ # avoid File.read("endpoints.json")
37
+ AWS::Core::Endpoints.stubs(:endpoints).returns({
38
+ 'regions' => {
39
+ 'us-east-1' => {
40
+ 'sns' => {
41
+ 'http' => true,
42
+ 'https' => true,
43
+ 'hostname' => 'sns.us-east-1.amazonaws.com',
44
+ }
45
+ }
46
+ }
47
+ })
30
48
 
31
49
  @node = Chef::Node.new
32
50
  @node.name('test')
33
51
  Chef::Handler::Sns.any_instance.stubs(:node).returns(@node)
52
+ Chef::Handler::FakeSns.any_instance.stubs(:node).returns(@node)
34
53
 
35
54
  @run_status = if Gem.loaded_specs['chef'].version > Gem::Version.new('0.12.0')
36
55
  Chef::RunStatus.new(@node, {})
37
56
  else
38
57
  Chef::RunStatus.new(@node)
39
58
  end
59
+
40
60
  @run_status.start_clock
41
61
  @run_status.stop_clock
42
62
 
@@ -63,18 +83,22 @@ describe Chef::Handler::Sns do
63
83
 
64
84
  it 'should try to send a SNS message when properly configured' do
65
85
  @sns_handler = Chef::Handler::Sns.new(@config)
66
- RightAws::SnsInterface.any_instance.expects(:publish).once
86
+ AWS::SNS::Topic.any_instance.expects(:publish).once
67
87
 
68
88
  @sns_handler.run_report_safely(@run_status)
69
89
  end
70
90
 
71
- it 'should create a RightAws::SnsInterface object' do
91
+ it 'should create a AWS::SNS object' do
72
92
  @sns_handler = Chef::Handler::Sns.new(@config)
73
- fake_sns = RightAws::FakeSnsInterface.new(@config[:access_key], @config[:secret_key], {:logger => Chef::Log})
74
- RightAws::SnsInterface.any_instance.stubs(:new).returns(fake_sns.fake_new)
93
+ fake_sns = AWS::FakeSNS.new({
94
+ :access_key_id => @config[:access_key],
95
+ :secret_access_key => @config[:secret_key],
96
+ :logger => Chef::Log
97
+ })
98
+ AWS::SNS.stubs(:new).returns(fake_sns)
75
99
  @sns_handler.run_report_safely(@run_status)
76
100
 
77
- assert_equal fake_sns.sns_interface_new, true
101
+ assert_equal fake_sns.sns_new, true
78
102
  end
79
103
 
80
104
  it 'should detect the AWS region automatically' do
@@ -82,7 +106,7 @@ describe Chef::Handler::Sns do
82
106
  @sns_handler = Chef::Handler::Sns.new(@config)
83
107
  @sns_handler.run_report_safely(@run_status)
84
108
 
85
- @sns_handler.server.must_match Regexp.new('eu-west-1')
109
+ @sns_handler.get_region.must_equal 'eu-west-1'
86
110
  end
87
111
 
88
112
  it 'should not detect AWS region automatically whan manually set' do
@@ -91,7 +115,7 @@ describe Chef::Handler::Sns do
91
115
  @sns_handler = Chef::Handler::Sns.new(@config)
92
116
  @sns_handler.run_report_safely(@run_status)
93
117
 
94
- @sns_handler.server.must_match Regexp.new('us-east-1')
118
+ @sns_handler.get_region.must_equal 'us-east-1'
95
119
  end
96
120
 
97
121
  it 'should be able to generate the default subject in chef-client' do
@@ -141,6 +165,9 @@ describe Chef::Handler::Sns do
141
165
  @config[:body_template] = '/tmp/existing-template.erb'
142
166
  ::File.stubs(:exists?).with(@config[:body_template]).returns(true)
143
167
  IO.stubs(:read).with(@config[:body_template]).returns(body_msg)
168
+
169
+ fake_sns = AWS::FakeSNS.new({})
170
+ AWS::SNS.stubs(:new).returns(fake_sns)
144
171
  @fake_sns_handler = Chef::Handler::FakeSns.new(@config)
145
172
  Chef::Handler::FakeSns.any_instance.stubs(:node).returns(@node)
146
173
  @fake_sns_handler.run_report_unsafe(@run_status)
@@ -5,6 +5,13 @@ class SnsConfig
5
5
  include Chef::Handler::Sns::Config
6
6
  end
7
7
 
8
+ module Chef::Handler::Sns::Config
9
+ class FakeOhai < Chef::Handler::Sns::Config::Ohai
10
+ def intialize
11
+ end
12
+ end
13
+ end
14
+
8
15
  describe Chef::Handler::Sns::Config do
9
16
  before do
10
17
  @config_params = {
@@ -12,6 +19,8 @@ describe Chef::Handler::Sns::Config do
12
19
  :secret_key => '***AMAZON-SECRET***',
13
20
  :topic_arn => 'arn:aws:sns:***',
14
21
  }
22
+ @node = Chef::Node.new
23
+ @node.name('test')
15
24
  @sns_config = SnsConfig.new
16
25
  end
17
26
 
@@ -86,4 +95,44 @@ describe Chef::Handler::Sns::Config do
86
95
 
87
96
  end
88
97
 
98
+ describe 'config_check' do
99
+
100
+ it 'should call #config_from_ohai method' do
101
+ @sns_config.access_key(@config_params[:access_key])
102
+ @sns_config.secret_key(@config_params[:secret_key])
103
+ @sns_config.topic_arn(@config_params[:topic_arn])
104
+ @sns_config.expects(:config_from_ohai).once
105
+
106
+ @sns_config.config_check(@node)
107
+ end
108
+
109
+ end
110
+
111
+ describe 'config_from_ohai' do
112
+ before do
113
+ @fake_ohai = Chef::Handler::Sns::Config::FakeOhai.new(@node)
114
+ Chef::Handler::Sns::Config::Ohai.stubs(:new).returns(@fake_ohai)
115
+ end
116
+
117
+ it 'should create Config::Ohai object' do
118
+ Chef::Handler::Sns::Config::Ohai.expects(:new).once.returns(@fake_ohai)
119
+
120
+ @sns_config.config_from_ohai(@node)
121
+ end
122
+
123
+ [
124
+ :region,
125
+ :access_key,
126
+ :secret_key,
127
+ :token,
128
+ ].each do |method|
129
+ it "should call Config::Ohai##{method} method" do
130
+ @fake_ohai.expects(method).once
131
+
132
+ @sns_config.config_from_ohai(@node)
133
+ end
134
+ end
135
+
136
+ end
137
+
89
138
  end
@@ -0,0 +1,75 @@
1
+ require 'helper'
2
+
3
+ describe Chef::Handler::Sns::Config::Ohai do
4
+ before do
5
+ @node = Chef::Node.new
6
+ @node.name('test')
7
+ @node.set['ec2'] = {
8
+ 'placement_availability_zone' => 'region1a',
9
+ 'iam' => {
10
+ 'security-credentials' => {
11
+ 'iam-role1' => {
12
+ 'AccessKeyId' => 'access_key1',
13
+ 'SecretAccessKey' => 'secret_key1',
14
+ 'Token' => 'token1',
15
+ }
16
+ }
17
+ }
18
+ }
19
+ end
20
+
21
+ describe 'read_config' do
22
+
23
+ it 'should read the region' do
24
+ config = Chef::Handler::Sns::Config::Ohai.new(@node)
25
+ assert_equal config.region, 'region1'
26
+ end
27
+
28
+ it 'should not read the region when not set' do
29
+ @node.set['ec2']['placement_availability_zone'] = nil
30
+ config = Chef::Handler::Sns::Config::Ohai.new(@node)
31
+ assert_equal config.region, nil
32
+ end
33
+
34
+ it 'should not read the credentials when has not IAM role' do
35
+ @node.set['ec2'] = {}
36
+ config = Chef::Handler::Sns::Config::Ohai.new(@node)
37
+ assert_equal config.access_key, nil
38
+ end
39
+
40
+ it 'should read the access_key' do
41
+ config = Chef::Handler::Sns::Config::Ohai.new(@node)
42
+ assert_equal config.access_key, 'access_key1'
43
+ end
44
+
45
+ it 'should not read the access_key when not set' do
46
+ @node.set['ec2']['iam']['security-credentials']['iam-role1']['AccessKeyId'] = nil
47
+ config = Chef::Handler::Sns::Config::Ohai.new(@node)
48
+ assert_equal config.access_key, nil
49
+ end
50
+
51
+ it 'should read the secret_key' do
52
+ config = Chef::Handler::Sns::Config::Ohai.new(@node)
53
+ assert_equal config.secret_key, 'secret_key1'
54
+ end
55
+
56
+ it 'should not read the secret_key when not set' do
57
+ @node.set['ec2']['iam']['security-credentials']['iam-role1']['SecretAccessKey'] = nil
58
+ config = Chef::Handler::Sns::Config::Ohai.new(@node)
59
+ assert_equal config.secret_key, nil
60
+ end
61
+
62
+ it 'should read the security token' do
63
+ config = Chef::Handler::Sns::Config::Ohai.new(@node)
64
+ assert_equal config.token, 'token1'
65
+ end
66
+
67
+ it 'should not read the security token when not set' do
68
+ @node.set['ec2']['iam']['security-credentials']['iam-role1']['Token'] = nil
69
+ config = Chef::Handler::Sns::Config::Ohai.new(@node)
70
+ assert_equal config.token, nil
71
+ end
72
+
73
+ end
74
+
75
+ end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-handler-sns
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 1.0.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: 2013-11-15 00:00:00.000000000 Z
11
+ date: 2014-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: right_aws
14
+ name: aws-sdk
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: '3.0'
26
+ version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: erubis
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: mime-types
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ~>
46
- - !ruby/object:Gem::Version
47
- version: '1.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ~>
53
- - !ruby/object:Gem::Version
54
- version: '1.0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: chef
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -136,7 +122,8 @@ dependencies:
136
122
  - - '>='
137
123
  - !ruby/object:Gem::Version
138
124
  version: '0'
139
- description: Chef report handler to send SNS notifications on failures or changes
125
+ description: Chef report handler to send Amazon SNS notifications on failures or changes,
126
+ includes IAM roles support
140
127
  email: team@onddo.com
141
128
  executables: []
142
129
  extensions: []
@@ -147,9 +134,11 @@ files:
147
134
  - lib/chef/handler/sns.rb
148
135
  - lib/chef/handler/sns/templates/body.erb
149
136
  - lib/chef/handler/sns/config.rb
137
+ - lib/chef/handler/sns/config/ohai.rb
150
138
  - lib/chef/handler/sns/version.rb
151
139
  - test/helper.rb
152
140
  - test/test_chef_handler_sns.rb
141
+ - test/test_chef_handler_sns_config_ohai.rb
153
142
  - test/test_chef_handler_sns_config.rb
154
143
  homepage: http://onddo.github.io/chef-handler-sns
155
144
  licenses:
@@ -166,9 +155,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
166
155
  version: '0'
167
156
  required_rubygems_version: !ruby/object:Gem::Requirement
168
157
  requirements:
169
- - - '>='
158
+ - - '>'
170
159
  - !ruby/object:Gem::Version
171
- version: '0'
160
+ version: 1.3.1
172
161
  requirements: []
173
162
  rubyforge_project:
174
163
  rubygems_version: 2.0.6
@@ -178,4 +167,5 @@ summary: Chef SNS reports
178
167
  test_files:
179
168
  - test/helper.rb
180
169
  - test/test_chef_handler_sns.rb
170
+ - test/test_chef_handler_sns_config_ohai.rb
181
171
  - test/test_chef_handler_sns_config.rb