cloudutil 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +6 -0
- data/cloudutil.gemspec +3 -3
- data/lib/cloudutil/aws/core.rb +2 -2
- data/lib/cloudutil/aws/ec2.rb +34 -23
- data/lib/cloudutil/aws/iam.rb +39 -0
- data/lib/cloudutil/aws/s3.rb +20 -0
- data/lib/cloudutil/aws/sns.rb +22 -12
- data/lib/cloudutil/version.rb +1 -1
- metadata +20 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 849723cdf05020f6c584616d536ae41af8734ab7
|
4
|
+
data.tar.gz: 6c5d11c532f79f7c1db613fe0bdf219ce5c35646
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b2853968e0776e5569d83a63f08fcd38e05d6a954a59f2a0a39ab9698ec295cebf47a6c500cbf7226a3654a44f3b52a0c1b9986b4ca86641fae9fa5bf880f3c
|
7
|
+
data.tar.gz: 8b5bd8b1a520c7d7361235d9d77ba22a3bf746587998d8ba888c5020e3fa060a0dbf72bd64661bf0d2abe1ca70d5ef565fd15f2d093cccc08409422ec68a42f6
|
data/.rubocop.yml
CHANGED
data/cloudutil.gemspec
CHANGED
@@ -14,8 +14,8 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
|
-
spec.executables = spec.files.grep(
|
18
|
-
spec.test_files = spec.files.grep(
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_development_dependency 'bundler', '~> 1.6'
|
@@ -23,5 +23,5 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency 'rspec'
|
24
24
|
spec.add_development_dependency 'rubocop'
|
25
25
|
|
26
|
-
spec.add_dependency 'aws-sdk', '~> 1.44'
|
26
|
+
spec.add_dependency 'aws-sdk-v1', '~> 1.44'
|
27
27
|
end
|
data/lib/cloudutil/aws/core.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'aws-sdk'
|
1
|
+
require 'aws-sdk-v1'
|
2
2
|
|
3
3
|
module Cloudutil
|
4
4
|
module AWS
|
@@ -25,7 +25,7 @@ module Cloudutil
|
|
25
25
|
# be called to create one
|
26
26
|
#
|
27
27
|
def initialize(*args)
|
28
|
-
if args.
|
28
|
+
if args.is_a? Hash
|
29
29
|
_process_hash_init(args.to_h)
|
30
30
|
elsif args[0].respond_to? :to_h
|
31
31
|
_process_hash_init(args[0].to_h)
|
data/lib/cloudutil/aws/ec2.rb
CHANGED
@@ -89,7 +89,7 @@ module Cloudutil
|
|
89
89
|
# Resolve the provided value to an array of AWS AMI objects. By default, the search is not
|
90
90
|
# case-sensitive, but that can be overridden by supplying 'false' as a second argument to this method.
|
91
91
|
def lookup_ami(ami, ignore_case = true, nap = 2, retries = 5)
|
92
|
-
ec2
|
92
|
+
ec2 = ::AWS::EC2.new
|
93
93
|
amis = []
|
94
94
|
|
95
95
|
begin
|
@@ -98,10 +98,7 @@ module Cloudutil
|
|
98
98
|
else
|
99
99
|
# Don't bother memoizing, this is fast
|
100
100
|
imgs = ec2.images.filter('image-type', 'machine').filter('state', 'available')
|
101
|
-
|
102
|
-
amis = do_ami_lookup_by_name_tag(imgs, ami, ignore_case)
|
103
|
-
amis = do_private_ami_lookup_by_name(imgs, ami, ignore_case) if amis.nil? || amis.empty?
|
104
|
-
amis = do_ami_lookup_by_name(imgs, ami, ignore_case) if amis.nil? || amis.empty?
|
101
|
+
amis = lookup_amis(imgs, ami, ignore_case)
|
105
102
|
end
|
106
103
|
rescue ::AWS::EC2::Errors::RequestLimitExceeded, ::AWS::Errors::ServerError
|
107
104
|
raise if retries < 1
|
@@ -120,16 +117,28 @@ module Cloudutil
|
|
120
117
|
|
121
118
|
protected
|
122
119
|
|
120
|
+
def lookup_amis(filter, ami, ignore_case)
|
121
|
+
amis = do_ami_lookup_by_name_tag(filter, ami, ignore_case)
|
122
|
+
|
123
|
+
if amis.nil? || amis.empty
|
124
|
+
amis = do_private_ami_lookup_by_name(filter, ami, ignore_case)
|
125
|
+
amis = do_ami_lookup_by_name(filter, ami, ignore_case) if amis.nil? || amis.empty?
|
126
|
+
end
|
127
|
+
|
128
|
+
amis
|
129
|
+
end
|
130
|
+
|
123
131
|
# Find an AMI based on the value of the 'Name' tag
|
124
132
|
def do_ami_lookup_by_name_tag(filter, ami, ignore_case)
|
125
133
|
# Using memoization, this is fast, relativly speaking (can be < 1 sec, 15-20 sec w/o memoization)
|
126
134
|
::AWS.memoize do
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
135
|
+
filter.tagged('Name').select do |obj|
|
136
|
+
!obj.tags.Name.nil? &&
|
137
|
+
if ignore_case
|
138
|
+
obj.tags.Name.casecmp(ami) == 0
|
139
|
+
else
|
140
|
+
obj.tags.Name.eql?(ami)
|
141
|
+
end
|
133
142
|
end
|
134
143
|
end
|
135
144
|
end
|
@@ -165,12 +174,13 @@ module Cloudutil
|
|
165
174
|
# Find a VPC subnet based on the 'Name' tag (subnets don't have a name attribute)
|
166
175
|
def do_subnet_lookup(filter, subnet, ignore_case)
|
167
176
|
::AWS.memoize do
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
177
|
+
filter.tagged('Name').select do |obj|
|
178
|
+
!obj.tags.Name.nil? &&
|
179
|
+
if ignore_case
|
180
|
+
obj.tags.Name.casecmp(subnet) == 0
|
181
|
+
else
|
182
|
+
obj.tags.Name.eql?(subnet)
|
183
|
+
end
|
174
184
|
end
|
175
185
|
end
|
176
186
|
end
|
@@ -189,12 +199,13 @@ module Cloudutil
|
|
189
199
|
# Find a VPC security group based on the 'Name' tag
|
190
200
|
def do_security_group_lookup_by_name_tag(ec2, group, ignore_case)
|
191
201
|
::AWS.memoize do
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
202
|
+
ec2.security_groups.tagged('Name').select do |obj|
|
203
|
+
!obj.tags.Name.nil? &&
|
204
|
+
if ignore_case
|
205
|
+
obj.tags.Name.casecmp(group) == 0
|
206
|
+
else
|
207
|
+
obj.tags.Name.eql?(group)
|
208
|
+
end
|
198
209
|
end
|
199
210
|
end
|
200
211
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative './core.rb'
|
2
|
+
|
3
|
+
module Cloudutil::AWS
|
4
|
+
# A class of utility methods for the AWS IAM service
|
5
|
+
class SNS < Cloudutil::AWS::Core
|
6
|
+
IAM_ARN = 'arn:aws:iam:'
|
7
|
+
|
8
|
+
def resolve_server_certificate_arn(name, ignore_case = true, nap = 2, retries = 5)
|
9
|
+
iam = ::AWS::IAM.new
|
10
|
+
arn = nil
|
11
|
+
|
12
|
+
begin
|
13
|
+
if aws_server_certificate_arn? name
|
14
|
+
arn = name
|
15
|
+
else
|
16
|
+
arn = ::AWS.memoize do
|
17
|
+
if ignore_case
|
18
|
+
c_obj = iam.server_certificates.find { |c| c.name.casecmp(name) == 0 }
|
19
|
+
else
|
20
|
+
c_obj = iam.server_certificates[name]
|
21
|
+
end
|
22
|
+
|
23
|
+
c_obj.arn unless c_obj.nil?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
rescue ::AWS::EC2::Errors::RequestLimitExceeded, ::AWS::Errors::ServerError
|
27
|
+
raise if retries < 1
|
28
|
+
sleep nap
|
29
|
+
resolve_server_certificate_arn(name, ignore_case, (nap * 2), (retries - 1))
|
30
|
+
end
|
31
|
+
|
32
|
+
arn
|
33
|
+
end
|
34
|
+
|
35
|
+
def aws_server_certificate_arn?(name)
|
36
|
+
name.strip.downcase.match("^#{IAM_ARN}:\w+:server-certificate\/\w+").nil?
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative './core.rb'
|
2
|
+
|
3
|
+
module Cloudutil::AWS
|
4
|
+
# A class of utility methods for the AWS S3 service
|
5
|
+
class S3 < Cloudutil::AWS::Core
|
6
|
+
S3_ARN_PREFIX = 'arn:aws:s3:::'
|
7
|
+
|
8
|
+
def resolve_bucket_arn(name)
|
9
|
+
if aws_bucket_arn? name
|
10
|
+
name
|
11
|
+
else
|
12
|
+
S3_ARN_PREFIX + name
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def aws_bucket_arn?(name)
|
17
|
+
name.strip.downcase.start_with? S3_ARN_PREFIX
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/cloudutil/aws/sns.rb
CHANGED
@@ -4,23 +4,16 @@ module Cloudutil
|
|
4
4
|
module AWS
|
5
5
|
# A class of utility methods for the AWS SNS service
|
6
6
|
class SNS < Cloudutil::AWS::Core
|
7
|
+
SNS_ARN = 'arn:aws:sns:'
|
8
|
+
|
7
9
|
def resolve_topic_arn(topic, ignore_case = true, nap = 2, retries = 5)
|
8
|
-
sns = ::AWS::SNS.new
|
9
10
|
arn = nil
|
10
11
|
|
11
12
|
begin
|
12
13
|
if aws_topic_arn? topic
|
13
14
|
arn = topic
|
14
15
|
else
|
15
|
-
arn =
|
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
|
16
|
+
arn = lookup_topic_arn(topic)
|
24
17
|
end
|
25
18
|
rescue ::AWS::EC2::Errors::RequestLimitExceeded, ::AWS::Errors::ServerError
|
26
19
|
raise if retries < 1
|
@@ -32,8 +25,25 @@ module Cloudutil
|
|
32
25
|
end
|
33
26
|
|
34
27
|
def aws_topic_arn?(topic)
|
35
|
-
|
36
|
-
|
28
|
+
topic.strip.downcase.start_with? SNS_ARN
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def lookup_topic_arn(topic)
|
34
|
+
sns = ::AWS::SNS.new
|
35
|
+
|
36
|
+
::AWS.memoize do
|
37
|
+
t_obj = sns.topics.find do |t|
|
38
|
+
if ignore_case
|
39
|
+
t.name.casecmp(topic) == 0
|
40
|
+
else
|
41
|
+
t.name.eql? topic
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
t_obj.arn unless t_obj.nil?
|
46
|
+
end
|
37
47
|
end
|
38
48
|
end
|
39
49
|
end
|
data/lib/cloudutil/version.rb
CHANGED
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudutil
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.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: 2015-
|
11
|
+
date: 2015-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.6'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rubocop
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: aws-sdk
|
70
|
+
name: aws-sdk-v1
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '1.44'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.44'
|
83
83
|
description: |
|
@@ -125,8 +125,8 @@ executables: []
|
|
125
125
|
extensions: []
|
126
126
|
extra_rdoc_files: []
|
127
127
|
files:
|
128
|
-
- .gitignore
|
129
|
-
- .rubocop.yml
|
128
|
+
- ".gitignore"
|
129
|
+
- ".rubocop.yml"
|
130
130
|
- Gemfile
|
131
131
|
- LICENSE
|
132
132
|
- README.md
|
@@ -136,6 +136,8 @@ 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/iam.rb
|
140
|
+
- lib/cloudutil/aws/s3.rb
|
139
141
|
- lib/cloudutil/aws/sns.rb
|
140
142
|
- lib/cloudutil/version.rb
|
141
143
|
- spec/aws_core_spec.rb
|
@@ -151,17 +153,17 @@ require_paths:
|
|
151
153
|
- lib
|
152
154
|
required_ruby_version: !ruby/object:Gem::Requirement
|
153
155
|
requirements:
|
154
|
-
- -
|
156
|
+
- - ">="
|
155
157
|
- !ruby/object:Gem::Version
|
156
158
|
version: '0'
|
157
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
160
|
requirements:
|
159
|
-
- -
|
161
|
+
- - ">="
|
160
162
|
- !ruby/object:Gem::Version
|
161
163
|
version: '0'
|
162
164
|
requirements: []
|
163
165
|
rubyforge_project:
|
164
|
-
rubygems_version: 2.
|
166
|
+
rubygems_version: 2.4.4
|
165
167
|
signing_key:
|
166
168
|
specification_version: 4
|
167
169
|
summary: A utility library for performing helpful tasks with various cloud platform
|