MovableInkAWS 2.6.5 → 2.7.2

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: d617b4671eb664f2e36fc1f1df11607066c0a46c1c5e536a552eb2c7ac451545
4
- data.tar.gz: 5d975ee847ec37369c1488dd7c4ecc11c5d4abae33bb9131308260af256a557d
3
+ metadata.gz: 062a7d89881a8deb80193260cee046fd05bc2f354614b4184c9b4f219e6bbfb5
4
+ data.tar.gz: 2f539ce1e8ffe789ac796f13eb0626eeb7beed534bb2487dd2962341eadfffe3
5
5
  SHA512:
6
- metadata.gz: 70ace6a3c1a4f9d4a60e1053f93c0d37e10e5737800b149c358f804b02b3de9522dd9624dc0723b1da66bc2912544ce91de18ee8852926e39665c61cc2d8a6d5
7
- data.tar.gz: b51afda56e2c80126efa86737ef9359327698324a61fc67e9c86774e4f0eb191cead2c235e665f843c8fb4f0f7b6be881dee04c271671a6c9d3e70680f5862ad
6
+ metadata.gz: 5a8aaca866b301926dd14e435dc811d1b20d99e78f5e3a91a40a3d6e0258c07df66d15e74d69123e2548272fb89ce64763d2a5eac010b8a137556fd44c69511f
7
+ data.tar.gz: e9b2eac205025b400cea11b4692be05ec2e5e6ceca621187d0e8151fbab6996351b2ca2d4bfa4ccbcd7b65ec2fd564a6ecdd54cbe9daf78cfd57c59feff0a319
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- MovableInkAWS (2.6.5)
4
+ MovableInkAWS (2.7.2)
5
5
  aws-sdk-athena (~> 1)
6
6
  aws-sdk-autoscaling (~> 1)
7
7
  aws-sdk-cloudwatch (~> 1)
@@ -25,53 +25,53 @@ GEM
25
25
  addressable (2.7.0)
26
26
  public_suffix (>= 2.0.2, < 5.0)
27
27
  aws-eventstream (1.2.0)
28
- aws-partitions (1.573.0)
29
- aws-sdk-athena (1.52.0)
28
+ aws-partitions (1.605.0)
29
+ aws-sdk-athena (1.54.0)
30
30
  aws-sdk-core (~> 3, >= 3.127.0)
31
31
  aws-sigv4 (~> 1.1)
32
- aws-sdk-autoscaling (1.78.0)
32
+ aws-sdk-autoscaling (1.79.0)
33
33
  aws-sdk-core (~> 3, >= 3.127.0)
34
34
  aws-sigv4 (~> 1.1)
35
- aws-sdk-cloudwatch (1.62.0)
35
+ aws-sdk-cloudwatch (1.64.0)
36
36
  aws-sdk-core (~> 3, >= 3.127.0)
37
37
  aws-sigv4 (~> 1.1)
38
- aws-sdk-core (3.130.0)
38
+ aws-sdk-core (3.131.2)
39
39
  aws-eventstream (~> 1, >= 1.0.2)
40
40
  aws-partitions (~> 1, >= 1.525.0)
41
41
  aws-sigv4 (~> 1.1)
42
- jmespath (~> 1.0)
43
- aws-sdk-ec2 (1.305.0)
42
+ jmespath (~> 1, >= 1.6.1)
43
+ aws-sdk-ec2 (1.321.0)
44
44
  aws-sdk-core (~> 3, >= 3.127.0)
45
45
  aws-sigv4 (~> 1.1)
46
- aws-sdk-eks (1.74.0)
46
+ aws-sdk-eks (1.75.0)
47
47
  aws-sdk-core (~> 3, >= 3.127.0)
48
48
  aws-sigv4 (~> 1.1)
49
- aws-sdk-elasticache (1.76.0)
49
+ aws-sdk-elasticache (1.78.0)
50
50
  aws-sdk-core (~> 3, >= 3.127.0)
51
51
  aws-sigv4 (~> 1.1)
52
- aws-sdk-iam (1.68.0)
52
+ aws-sdk-iam (1.69.0)
53
53
  aws-sdk-core (~> 3, >= 3.127.0)
54
54
  aws-sigv4 (~> 1.1)
55
- aws-sdk-kms (1.55.0)
55
+ aws-sdk-kms (1.57.0)
56
56
  aws-sdk-core (~> 3, >= 3.127.0)
57
57
  aws-sigv4 (~> 1.1)
58
- aws-sdk-rds (1.142.0)
58
+ aws-sdk-rds (1.148.0)
59
59
  aws-sdk-core (~> 3, >= 3.127.0)
60
60
  aws-sigv4 (~> 1.1)
61
- aws-sdk-route53 (1.62.0)
61
+ aws-sdk-route53 (1.63.0)
62
62
  aws-sdk-core (~> 3, >= 3.127.0)
63
63
  aws-sigv4 (~> 1.1)
64
- aws-sdk-s3 (1.113.0)
64
+ aws-sdk-s3 (1.114.0)
65
65
  aws-sdk-core (~> 3, >= 3.127.0)
66
66
  aws-sdk-kms (~> 1)
67
67
  aws-sigv4 (~> 1.4)
68
68
  aws-sdk-sns (1.53.0)
69
69
  aws-sdk-core (~> 3, >= 3.127.0)
70
70
  aws-sigv4 (~> 1.1)
71
- aws-sdk-ssm (1.134.0)
71
+ aws-sdk-ssm (1.137.0)
72
72
  aws-sdk-core (~> 3, >= 3.127.0)
73
73
  aws-sigv4 (~> 1.1)
74
- aws-sigv4 (1.4.0)
74
+ aws-sigv4 (1.5.0)
75
75
  aws-eventstream (~> 1, >= 1.0.2)
76
76
  crack (0.4.3)
77
77
  safe_yaml (~> 1.0.0)
@@ -91,7 +91,7 @@ GEM
91
91
  mime-types-data (~> 3.2015)
92
92
  mime-types-data (3.2022.0105)
93
93
  multi_xml (0.6.0)
94
- multipart-post (2.1.1)
94
+ multipart-post (2.2.3)
95
95
  public_suffix (4.0.5)
96
96
  rspec (3.9.0)
97
97
  rspec-core (~> 3.9.0)
@@ -121,4 +121,4 @@ DEPENDENCIES
121
121
  webmock
122
122
 
123
123
  BUNDLED WITH
124
- 2.3.11
124
+ 2.3.14
@@ -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
@@ -13,21 +13,23 @@ module MovableInk
13
13
  end
14
14
 
15
15
  def get_resource_record_sets_by_instance_name(zone, instance_name, client = nil)
16
- resource_record_sets(zone, client).select{|rrs| rrs.set_identifier == instance_name}.first.to_h
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)
20
- resource_record_set = get_resource_record_sets_by_instance_name(zone, instance_name, client)
21
- return if resource_record_set.empty?
19
+ def delete_resource_record_sets(zone, instance_name, client = nil, expected_errors = [])
20
+ resource_record_sets = get_resource_record_sets_by_instance_name(zone, instance_name, client)
21
+ return if resource_record_sets.empty?
22
22
 
23
23
  change_batch = {
24
- "changes": [{
25
- "action": 'DELETE',
26
- "resource_record_set": resource_record_set
27
- }]
24
+ "changes": resource_record_sets.map { |resource_record_set|
25
+ {
26
+ "action": 'DELETE',
27
+ "resource_record_set": resource_record_set
28
+ }
29
+ }
28
30
  }
29
31
 
30
- run_with_backoff do
32
+ run_with_backoff(expected_errors: expected_errors) do
31
33
  route53(client).change_resource_record_sets({change_batch: change_batch, hosted_zone_id: zone})
32
34
  end
33
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.6.5'
3
+ VERSION = '2.7.2'
4
4
  end
5
5
  end
data/spec/route53_spec.rb CHANGED
@@ -15,6 +15,11 @@ describe MovableInk::AWS::Route53 do
15
15
  name: 'host2.domain.tld.',
16
16
  set_identifier: '10_0_0_2',
17
17
  type: '???'
18
+ },
19
+ {
20
+ name: 'host2-other.domain.tld.',
21
+ set_identifier: '10_0_0_2',
22
+ type: '???'
18
23
  }
19
24
  ])
20
25
  }
@@ -23,12 +28,23 @@ describe MovableInk::AWS::Route53 do
23
28
  route53.stub_responses(:list_resource_record_sets, rrset_data)
24
29
  allow(aws).to receive(:route53).and_return(route53)
25
30
 
26
- expect(aws.resource_record_sets('Z123').count).to eq(2)
27
- expect(aws.resource_record_sets('Z123').first.name).to eq('host1.domain.tld.')
28
- expect(aws.resource_record_sets('Z123').last.name).to eq('host2.domain.tld.')
31
+ expect(aws.resource_record_sets('Z123').count).to eq(3)
32
+ expect(aws.resource_record_sets('Z123')[0].name).to eq('host1.domain.tld.')
33
+ expect(aws.resource_record_sets('Z123')[1].name).to eq('host2.domain.tld.')
34
+ expect(aws.resource_record_sets('Z123')[2].name).to eq('host2-other.domain.tld.')
35
+ end
36
+
37
+ it "returns all sets with an identifier" do
38
+ route53.stub_responses(:list_resource_record_sets, rrset_data)
39
+ allow(aws).to receive(:route53).and_return(route53)
40
+
41
+ sets = aws.get_resource_record_sets_by_instance_name('Z123', '10_0_0_2')
42
+ expect(sets.count).to eq(2)
43
+ expect(sets[0][:name]).to eq('host2.domain.tld.')
44
+ expect(sets[1][:name]).to eq('host2-other.domain.tld.')
29
45
  end
30
46
 
31
- it 'deletes a rrset that exists' do
47
+ it 'deletes rrsets that exist under the same identifier' do
32
48
  route53.stub_responses(:list_resource_record_sets, rrset_data)
33
49
  allow(aws).to receive(:route53).and_return(route53)
34
50
 
@@ -41,6 +57,14 @@ describe MovableInk::AWS::Route53 do
41
57
  type: "???",
42
58
  set_identifier: "10_0_0_2"
43
59
  }
60
+ },
61
+ {
62
+ action: "DELETE",
63
+ resource_record_set: {
64
+ name: "host2-other.domain.tld.",
65
+ type: "???",
66
+ set_identifier: "10_0_0_2"
67
+ }
44
68
  }]
45
69
  },
46
70
  hosted_zone_id: "Z123"
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.6.5
4
+ version: 2.7.2
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-06-17 00:00:00.000000000 Z
11
+ date: 2022-08-01 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: []