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 +4 -4
- data/Gemfile.lock +19 -19
- data/MovableInkAWS.gemspec +2 -2
- data/lib/movable_ink/aws/errors.rb +15 -0
- data/lib/movable_ink/aws/route53.rb +11 -9
- data/lib/movable_ink/aws.rb +8 -2
- data/lib/movable_ink/version.rb +1 -1
- data/spec/route53_spec.rb +28 -4
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 062a7d89881a8deb80193260cee046fd05bc2f354614b4184c9b4f219e6bbfb5
|
4
|
+
data.tar.gz: 2f539ce1e8ffe789ac796f13eb0626eeb7beed534bb2487dd2962341eadfffe3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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.
|
29
|
-
aws-sdk-athena (1.
|
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.
|
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.
|
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.
|
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.
|
43
|
-
aws-sdk-ec2 (1.
|
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.
|
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.
|
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.
|
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
|
+
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
124
|
+
2.3.14
|
data/MovableInkAWS.gemspec
CHANGED
@@ -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 = ['
|
10
|
-
s.email = '
|
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}.
|
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
|
-
|
21
|
-
return if
|
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
|
-
|
26
|
-
|
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
|
data/lib/movable_ink/aws.rb
CHANGED
@@ -61,7 +61,8 @@ module MovableInk
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
|
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
|
data/lib/movable_ink/version.rb
CHANGED
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(
|
27
|
-
expect(aws.resource_record_sets('Z123').
|
28
|
-
expect(aws.resource_record_sets('Z123').
|
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
|
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.
|
4
|
+
version: 2.7.2
|
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-
|
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:
|
238
|
+
email: devops@movableink.com
|
239
239
|
executables: []
|
240
240
|
extensions: []
|
241
241
|
extra_rdoc_files: []
|