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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 68096f9d1dc06c6bc5e8d1c200ca5aaaf13a4455
4
- data.tar.gz: fee3debc208932511be30e01a5585afd299ec5d1
3
+ metadata.gz: 849723cdf05020f6c584616d536ae41af8734ab7
4
+ data.tar.gz: 6c5d11c532f79f7c1db613fe0bdf219ce5c35646
5
5
  SHA512:
6
- metadata.gz: a4461406ff58f5507d10947850f292107ba3f264a5d68a61961308cd4b8fe100bf31d6432968a39d6837e4f1a34c308028e5b7bae88ddae4fc894a550ec5fb5b
7
- data.tar.gz: b5731e321ea25f227d239b9f84214dc40902c7debad9903b700c54e9e257c1972ca335995a18f1e436116468042cde6dbdaed113295c1ea10fd99a1d618e3037
6
+ metadata.gz: 3b2853968e0776e5569d83a63f08fcd38e05d6a954a59f2a0a39ab9698ec295cebf47a6c500cbf7226a3654a44f3b52a0c1b9986b4ca86641fae9fa5bf880f3c
7
+ data.tar.gz: 8b5bd8b1a520c7d7361235d9d77ba22a3bf746587998d8ba888c5020e3fa060a0dbf72bd64661bf0d2abe1ca70d5ef565fd15f2d093cccc08409422ec68a42f6
@@ -22,3 +22,9 @@ CyclomaticComplexity:
22
22
 
23
23
  PerceivedComplexity:
24
24
  Max: 10
25
+
26
+ AbcSize:
27
+ Max: 20
28
+
29
+ ClassAndModuleChildren:
30
+ Enabled: false
@@ -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(/^bin\//) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(/^(test|spec|features)\//)
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
@@ -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.respond_to? :to_h
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)
@@ -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 = ::AWS::EC2.new
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
- if ignore_case
128
- filter.tagged('Name')
129
- .select { |obj| !obj.tags.Name.nil? && obj.tags.Name.casecmp(ami) == 0 }
130
- else
131
- filter.tagged('Name')
132
- .select { |obj| !obj.tags.Name.nil? && obj.tags.Name.eql?(ami) }
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
- if ignore_case
169
- filter.tagged('Name')
170
- .select { |obj| !obj.tags.Name.nil? && obj.tags.Name.casecmp(subnet) == 0 }
171
- else
172
- filter.tagged('Name')
173
- .select { |obj| !obj.tags.Name.nil? && obj.tags.Name.eql?(subnet) }
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
- if ignore_case
193
- ec2.security_groups.tagged('Name')
194
- .select { |obj| !obj.tags.Name.nil? && obj.tags.Name.casecmp(group) == 0 }
195
- else
196
- ec2.security_groups.tagged('Name')
197
- .select { |obj| !obj.tags.Name.nil? && obj.tags.Name.eql?(group) }
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
@@ -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 = ::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
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
- return true if topic.strip.downcase.start_with? 'arn:aws:sns:'
36
- false
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
@@ -1,4 +1,4 @@
1
1
  # Module to hold the version number for this library
2
2
  module Cloudutil
3
- VERSION = '0.1.0'
3
+ VERSION = '0.2.0'
4
4
  end
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.1.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-01-15 00:00:00.000000000 Z
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.2.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