MovableInkAWS 2.7.1 → 2.7.4

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: 4bb30965f9a405275bbe54e8119bdc243bb4def14fb23af716488429639c6593
4
- data.tar.gz: 9d31d8cde5eac0c2ae5be1673f167c2f550b2648a5593d3bc68213ce437c075d
3
+ metadata.gz: 4fe63a733a1146744fab177c92681cab506b4b4b7734c4cd3a7c91d65de0fd84
4
+ data.tar.gz: a6eab91fdcf488895c874d5cedd53e9ef4ccabba9f679461cfcb9148cefd612b
5
5
  SHA512:
6
- metadata.gz: 94c2a5c1b1028585739c75c57e1a83ce5c9629539ad5c8dbb977e9b38a3abc0d9f81d47883c37a252cfe6c4dd2ee241c30349bdbf97ce0bfc37f732a8de0c6cc
7
- data.tar.gz: a7e9c6001f0f659178b1be1f50527d7d1e7495f4220dfefb1e8d8d2df3b297a3d94af39603161205b719e62053548c3ae397300ed0998b88b9f998c984ad15af
6
+ metadata.gz: 82769e75ee09f4c0a8dc5c8a4d75c8aba427c3affd5c56270fdffd3bc5124cd20f1b1459dead8adc458f8cb9da3855d5ad4526adf391e35fe4b36ab5a9569697
7
+ data.tar.gz: 3a07058264a557f11c2a80c9e2eaddcb6189514d2cd449c263ca7ce148407e8ddffb5c66acc351c81f2d9edaa69edd1d2686f02308640d951d232c042136d80f
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- MovableInkAWS (2.7.1)
4
+ MovableInkAWS (2.7.4)
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
@@ -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
@@ -75,6 +76,7 @@ module MovableInk
75
76
  Aws::SNS::Errors::Throttling,
76
77
  Aws::AutoScaling::Errors::Throttling,
77
78
  Aws::AutoScaling::Errors::ThrottledException,
79
+ Aws::AutoScaling::Errors::InternalFailure,
78
80
  Aws::S3::Errors::SlowDown,
79
81
  Aws::Route53::Errors::Throttling,
80
82
  Aws::Route53::Errors::ThrottlingException,
@@ -97,6 +99,7 @@ module MovableInk
97
99
  notify_and_sleep(sleep_time, $!.class)
98
100
  end
99
101
  rescue Aws::Errors::ServiceError => e
102
+ expected_errors.each {|expected_error| return if expected_error.match?(e) }
100
103
  message = "#{e.class}: #{e.message}\nFrom #{$0}\n```\n#{e.backtrace.first(3).join("\n").gsub("`","'")}\n```"
101
104
  notify_slack(subject: 'Unhandled AWS API Error', message: message)
102
105
  puts message
@@ -1,5 +1,5 @@
1
1
  module MovableInk
2
2
  class AWS
3
- VERSION = '2.7.1'
3
+ VERSION = '2.7.4'
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.1
4
+ version: 2.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - MI SRE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-20 00:00:00.000000000 Z
11
+ date: 2022-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core
@@ -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