cloudutil 0.1.0 → 0.2.0

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: 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