MovableInkAWS 2.7.0 → 2.7.3

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
  SHA256:
3
- metadata.gz: 0c539b888e241eca594269dd052c7742eefdad57ab4dd5eeb0790a0fad507cff
4
- data.tar.gz: 0ae613422476b0371f818eee49d7b8da5f659f93e4d8541f361816fb93afb3c4
3
+ metadata.gz: e63c5966f197e0bce1048cd51aae3a310fea5f76bc25e3d116b6a08e5113c25d
4
+ data.tar.gz: b72b5c3f38e8344217e7d999c2cd086bc9328fcf196f476f70c12b2f7bd58543
5
5
  SHA512:
6
- metadata.gz: 31f107ee7940dd7b18d7e7c50764fcc2971c63660eafc14ae642cf1819389487a118b2b26438912cd7e234b00e4009f95d60c58308a8200d31f47c86971390a3
7
- data.tar.gz: 70b71c81bd0fe0a7806824b034dea3c4d08151582377de6eec2c9416a6d5fecc1fb4fae20f62ffe948a2c5c609f6399a70460d2fa4ba5cebdaae3726abc7bc8d
6
+ metadata.gz: 3bd418547afcad6e528d987863eacf8e2c85b48f04ec3cbc990c0ab6fde12fc33699bc8469bed92d3e4dabcb0de833b95991fc2387ee6bb229389d4d87983742
7
+ data.tar.gz: fd7eee67d42e52e1677eb79e9d2a2be393bbd8a74c7fd511e3aad0bfd3f9a3fb52224cf79e03916760bc343b9d4028f4417091b5298f2239327bb2370d29ea34
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- MovableInkAWS (2.7.0)
4
+ MovableInkAWS (2.7.3)
5
5
  aws-sdk-athena (~> 1)
6
6
  aws-sdk-autoscaling (~> 1)
7
7
  aws-sdk-cloudwatch (~> 1)
@@ -22,7 +22,7 @@ PATH
22
22
  GEM
23
23
  remote: https://rubygems.org/
24
24
  specs:
25
- addressable (2.7.0)
25
+ addressable (2.8.0)
26
26
  public_suffix (>= 2.0.2, < 5.0)
27
27
  aws-eventstream (1.2.0)
28
28
  aws-partitions (1.605.0)
@@ -73,8 +73,8 @@ GEM
73
73
  aws-sigv4 (~> 1.1)
74
74
  aws-sigv4 (1.5.0)
75
75
  aws-eventstream (~> 1, >= 1.0.2)
76
- crack (0.4.3)
77
- safe_yaml (~> 1.0.0)
76
+ crack (0.4.5)
77
+ rexml
78
78
  deep_merge (1.2.2)
79
79
  diff-lcs (1.3)
80
80
  diplomat (2.4.2)
@@ -82,7 +82,7 @@ GEM
82
82
  faraday (>= 0.9, < 1.1.0)
83
83
  faraday (1.0.1)
84
84
  multipart-post (>= 1.2, < 3)
85
- hashdiff (1.0.0)
85
+ hashdiff (1.0.1)
86
86
  httparty (0.16.3)
87
87
  mime-types (~> 3.0)
88
88
  multi_xml (>= 0.5.2)
@@ -92,7 +92,8 @@ GEM
92
92
  mime-types-data (3.2022.0105)
93
93
  multi_xml (0.6.0)
94
94
  multipart-post (2.2.3)
95
- public_suffix (4.0.5)
95
+ public_suffix (4.0.7)
96
+ rexml (3.2.5)
96
97
  rspec (3.9.0)
97
98
  rspec-core (~> 3.9.0)
98
99
  rspec-expectations (~> 3.9.0)
@@ -106,9 +107,8 @@ GEM
106
107
  diff-lcs (>= 1.2.0, < 2.0)
107
108
  rspec-support (~> 3.9.0)
108
109
  rspec-support (3.9.3)
109
- safe_yaml (1.0.5)
110
- webmock (3.7.6)
111
- addressable (>= 2.3.6)
110
+ webmock (3.17.1)
111
+ addressable (>= 2.8.0)
112
112
  crack (>= 0.3.2)
113
113
  hashdiff (>= 0.4.0, < 2.0.0)
114
114
 
@@ -121,4 +121,4 @@ DEPENDENCIES
121
121
  webmock
122
122
 
123
123
  BUNDLED WITH
124
- 2.3.14
124
+ 2.3.11
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
6
6
  s.version = MovableInk::AWS::VERSION
7
7
  s.summary = 'AWS Utility methods for MovableInk'
8
8
  s.description = 'AWS Utility methods for MovableInk'
9
- s.authors = ['Matt Chesler']
10
- s.email = 'mchesler@movableink.com'
9
+ s.authors = ['MI SRE']
10
+ s.email = 'devops@movableink.com'
11
11
 
12
12
  s.add_runtime_dependency 'aws-sdk-core', '~> 3'
13
13
  s.add_runtime_dependency 'aws-sdk-athena', '~> 1'
@@ -8,6 +8,21 @@ module MovableInk
8
8
  class InvalidDiscoveryTypeError < StandardError; end
9
9
  class RoleNameRequiredError < StandardError; end
10
10
  class RoleNameInvalidError < StandardError; end
11
+
12
+ class ExpectedError
13
+ def initialize(error_class, message_patterns = [])
14
+ @error_class = error_class
15
+ message_patterns.each { |pattern| raise StandardError.new("Invalid message pattern provided #{pattern.inspect}") unless pattern.class == Regexp }
16
+ @message_patterns = message_patterns
17
+ end
18
+
19
+ def match?(exception)
20
+ return false unless exception.class == @error_class
21
+ return true if @message_patterns.length == 0
22
+ @message_patterns.each {|pattern| return true if exception.message.match(pattern) }
23
+ false
24
+ end
25
+ end
11
26
  end
12
27
  end
13
28
  end
@@ -16,7 +16,7 @@ module MovableInk
16
16
  resource_record_sets(zone, client).select{|rrs| rrs.set_identifier == instance_name}.map(&:to_h)
17
17
  end
18
18
 
19
- def delete_resource_record_sets(zone, instance_name, client = nil)
19
+ def delete_resource_record_sets(zone, instance_name, client = nil, expected_errors = [])
20
20
  resource_record_sets = get_resource_record_sets_by_instance_name(zone, instance_name, client)
21
21
  return if resource_record_sets.empty?
22
22
 
@@ -29,7 +29,7 @@ module MovableInk
29
29
  }
30
30
  }
31
31
 
32
- run_with_backoff do
32
+ run_with_backoff(expected_errors: expected_errors) do
33
33
  route53(client).change_resource_record_sets({change_batch: change_batch, hosted_zone_id: zone})
34
34
  end
35
35
  end
@@ -61,7 +61,8 @@ module MovableInk
61
61
  end
62
62
  end
63
63
 
64
- def run_with_backoff(quiet: false, tries: 9)
64
+ # exected_errors[0].class == MovableInk::AWS::ExpectedError
65
+ def run_with_backoff(quiet: false, tries: 9, expected_errors: [])
65
66
  tries.times do |num|
66
67
  begin
67
68
  return yield
@@ -97,10 +98,11 @@ module MovableInk
97
98
  notify_and_sleep(sleep_time, $!.class)
98
99
  end
99
100
  rescue Aws::Errors::ServiceError => e
101
+ expected_errors.each {|expected_error| return if expected_error.match?(e) }
100
102
  message = "#{e.class}: #{e.message}\nFrom #{$0}\n```\n#{e.backtrace.first(3).join("\n").gsub("`","'")}\n```"
101
103
  notify_slack(subject: 'Unhandled AWS API Error', message: message)
102
104
  puts message
103
- raise MovableInk::AWS::Errors::ServiceError
105
+ raise MovableInk::AWS::Errors::ServiceError.new("#{e.class}: #{e.message}")
104
106
  end
105
107
  end
106
108
  message = "From: #{$0}\n```\n#{Thread.current.backtrace.first(3).join("\n").gsub("`","'")}\n```"
@@ -113,6 +115,10 @@ module MovableInk
113
115
  self.class.regions
114
116
  end
115
117
 
118
+ def my_aws_account_id
119
+ @my_aws_account_id ||= instance_identity_document['accountId'].to_i
120
+ end
121
+
116
122
  def my_region
117
123
  @my_region ||= if ENV['AWS_REGION'].nil?
118
124
  availability_zone.chop
@@ -1,5 +1,5 @@
1
1
  module MovableInk
2
2
  class AWS
3
- VERSION = '2.7.0'
3
+ VERSION = '2.7.3'
4
4
  end
5
5
  end
@@ -0,0 +1,21 @@
1
+ require_relative '../lib/movable_ink/aws'
2
+ require 'webmock/rspec'
3
+
4
+ describe MovableInk::AWS::Errors do
5
+ context 'ExpectedError' do
6
+ it 'matches exception by class name and pattern' do
7
+ expected = MovableInk::AWS::Errors::ExpectedError.new(Aws::Errors::ServiceError, [/something failed/])
8
+ expect(expected.match?(Aws::Errors::ServiceError.new(nil, 'There\'s something failed.'))).to eq(true)
9
+ end
10
+
11
+ it 'matches exception by class name only' do
12
+ expected = MovableInk::AWS::Errors::ExpectedError.new(Aws::Errors::ServiceError)
13
+ expect(expected.match?(Aws::Errors::ServiceError.new(nil, 'There\'s something failed.'))).to eq(true)
14
+ end
15
+
16
+ it 'matches exception by class name only - negative match' do
17
+ expected = MovableInk::AWS::Errors::ExpectedError.new(Aws::IAM::Errors::Throttling)
18
+ expect(expected.match?(Aws::Errors::ServiceError.new(nil, 'There\'s something failed.'))).to eq(false)
19
+ end
20
+ end
21
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: MovableInkAWS
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.0
4
+ version: 2.7.3
5
5
  platform: ruby
6
6
  authors:
7
- - Matt Chesler
7
+ - MI SRE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-14 00:00:00.000000000 Z
11
+ date: 2022-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core
@@ -235,7 +235,7 @@ dependencies:
235
235
  - !ruby/object:Gem::Version
236
236
  version: 2.4.2
237
237
  description: AWS Utility methods for MovableInk
238
- email: mchesler@movableink.com
238
+ email: devops@movableink.com
239
239
  executables: []
240
240
  extensions: []
241
241
  extra_rdoc_files: []
@@ -268,6 +268,7 @@ files:
268
268
  - spec/consul_spec.rb
269
269
  - spec/ec2_spec.rb
270
270
  - spec/elasticache_spec.rb
271
+ - spec/errors_spec.rb
271
272
  - spec/iam_spec.rb
272
273
  - spec/metadata_spec.rb
273
274
  - spec/route53_spec.rb