cloudutil 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +2 -1
- data/lib/cloudutil/aws/sns.rb +40 -0
- data/lib/cloudutil/aws.rb +1 -0
- data/lib/cloudutil/version.rb +1 -1
- data/spec/aws_sns_spec.rb +67 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68096f9d1dc06c6bc5e8d1c200ca5aaaf13a4455
|
4
|
+
data.tar.gz: fee3debc208932511be30e01a5585afd299ec5d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4461406ff58f5507d10947850f292107ba3f264a5d68a61961308cd4b8fe100bf31d6432968a39d6837e4f1a34c308028e5b7bae88ddae4fc894a550ec5fb5b
|
7
|
+
data.tar.gz: b5731e321ea25f227d239b9f84214dc40902c7debad9903b700c54e9e257c1972ca335995a18f1e436116468042cde6dbdaed113295c1ea10fd99a1d618e3037
|
data/Rakefile
CHANGED
@@ -16,7 +16,7 @@ end
|
|
16
16
|
desc 'Run rspec'
|
17
17
|
RSpec::Core::RakeTask.new(:spec, [:format, :tags]) do |t, args|
|
18
18
|
format = args[:format] || 'documentation'
|
19
|
-
tags = args[:tags] || []
|
19
|
+
tags = Array(args[:tags]) || []
|
20
20
|
t.verbose = false
|
21
21
|
t.fail_on_error = true
|
22
22
|
t.rspec_opts = "--format=#{format}"
|
@@ -26,4 +26,5 @@ RSpec::Core::RakeTask.new(:spec, [:format, :tags]) do |t, args|
|
|
26
26
|
end
|
27
27
|
|
28
28
|
t.ruby_opts = '-W0'
|
29
|
+
# rake spec\[documentation,~slow\] on cmdline to exclude only slow tests
|
29
30
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative './core.rb'
|
2
|
+
|
3
|
+
module Cloudutil
|
4
|
+
module AWS
|
5
|
+
# A class of utility methods for the AWS SNS service
|
6
|
+
class SNS < Cloudutil::AWS::Core
|
7
|
+
def resolve_topic_arn(topic, ignore_case = true, nap = 2, retries = 5)
|
8
|
+
sns = ::AWS::SNS.new
|
9
|
+
arn = nil
|
10
|
+
|
11
|
+
begin
|
12
|
+
if aws_topic_arn? topic
|
13
|
+
arn = topic
|
14
|
+
else
|
15
|
+
arn = ::AWS.memoize do
|
16
|
+
if ignore_case
|
17
|
+
t_obj = sns.topics.find { |t| t.name.casecmp(topic) == 0 }
|
18
|
+
else
|
19
|
+
t_obj = sns.topics.find { |t| t.name.eql? topic }
|
20
|
+
end
|
21
|
+
|
22
|
+
t_obj.arn unless t_obj.nil?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
rescue ::AWS::EC2::Errors::RequestLimitExceeded, ::AWS::Errors::ServerError
|
26
|
+
raise if retries < 1
|
27
|
+
sleep nap
|
28
|
+
resolve_topic_arn(topic, ignore_case, (nap * 2), (retries - 1))
|
29
|
+
end
|
30
|
+
|
31
|
+
arn
|
32
|
+
end
|
33
|
+
|
34
|
+
def aws_topic_arn?(topic)
|
35
|
+
return true if topic.strip.downcase.start_with? 'arn:aws:sns:'
|
36
|
+
false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/cloudutil/aws.rb
CHANGED
data/lib/cloudutil/version.rb
CHANGED
@@ -0,0 +1,67 @@
|
|
1
|
+
require_relative '../lib/cloudutil/aws.rb'
|
2
|
+
|
3
|
+
describe Cloudutil::AWS::SNS do
|
4
|
+
context 'object initialization' do
|
5
|
+
it 'creates an object using primary env vars' do
|
6
|
+
ENV.clear
|
7
|
+
ENV['AWS_ACCESS_KEY_ID'] = 'my_primary_access_key'
|
8
|
+
ENV['AWS_SECRET_ACCESS_KEY'] = 'my_primary_secret_key'
|
9
|
+
|
10
|
+
aws = Cloudutil::AWS::SNS.new
|
11
|
+
|
12
|
+
expect(aws.region).to eq 'us-east-1'
|
13
|
+
expect(aws.access_key).to eq 'my_primary_access_key'
|
14
|
+
expect(aws.secret_key).to eq 'my_primary_secret_key'
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'creates an object using implicit hash args' do
|
18
|
+
reg = 'us-west-1'
|
19
|
+
ak = 'my_access_key1'
|
20
|
+
sk = 'my_secret_key1'
|
21
|
+
|
22
|
+
aws = Cloudutil::AWS::SNS.new(region: reg, access_key: ak, secret_key: sk)
|
23
|
+
|
24
|
+
expect(aws.region).to eq reg
|
25
|
+
expect(aws.access_key).to eq ak
|
26
|
+
expect(aws.secret_key).to eq sk
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'resolving SNS topic ARNs' do
|
31
|
+
# Need to do this to read AWS creds from env
|
32
|
+
my_env = ENV.to_h
|
33
|
+
before(:each) do
|
34
|
+
@aws = Cloudutil::AWS::SNS.new(access_key: my_env['AWS_ACCESS_KEY_ID'], secret_key: my_env['AWS_SECRET_ACCESS_KEY'])
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'returns the given value if it looks like a topic ARN' do
|
38
|
+
data = 'arn:aws:sns:us-east-1:my-topic'
|
39
|
+
arn = @aws.resolve_topic_arn(data)
|
40
|
+
expect(arn).to eq data
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'returns a known topic ARN, case-sensitive', account_specific: true do
|
44
|
+
arn = @aws.resolve_topic_arn('storagegateway', false)
|
45
|
+
|
46
|
+
expect(arn).to_not be_nil
|
47
|
+
expect(arn).to match(/^arn:aws:sns:.*:storagegateway$/)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'returns a known topic ARN, case-insensitive', account_specific: true do
|
51
|
+
arn = @aws.resolve_topic_arn('sTOraGEgaTEwaY')
|
52
|
+
|
53
|
+
expect(arn).to_not be_nil
|
54
|
+
expect(arn).to match(/^arn:aws:sns:.*:storagegateway$/)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'returns nil for no case-sensitive match', account_specific: true do
|
58
|
+
arn = @aws.resolve_topic_arn('sTOraGEgaTEwaY', false)
|
59
|
+
expect(arn).to be_nil
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'returns nil for a bogus topic', account_specific: true do
|
63
|
+
arn = @aws.resolve_topic_arn('bogus-topic')
|
64
|
+
expect(arn).to be_nil
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudutil
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Morris
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -136,9 +136,11 @@ files:
|
|
136
136
|
- lib/cloudutil/aws.rb
|
137
137
|
- lib/cloudutil/aws/core.rb
|
138
138
|
- lib/cloudutil/aws/ec2.rb
|
139
|
+
- lib/cloudutil/aws/sns.rb
|
139
140
|
- lib/cloudutil/version.rb
|
140
141
|
- spec/aws_core_spec.rb
|
141
142
|
- spec/aws_ec2_spec.rb
|
143
|
+
- spec/aws_sns_spec.rb
|
142
144
|
homepage: ''
|
143
145
|
licenses:
|
144
146
|
- MIT
|
@@ -167,3 +169,4 @@ summary: A utility library for performing helpful tasks with various cloud platf
|
|
167
169
|
test_files:
|
168
170
|
- spec/aws_core_spec.rb
|
169
171
|
- spec/aws_ec2_spec.rb
|
172
|
+
- spec/aws_sns_spec.rb
|