MovableInkAWS 2.5.0 → 2.6.0
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 +36 -36
- data/lib/movable_ink/aws/metadata.rb +18 -3
- data/lib/movable_ink/aws/route53.rb +18 -18
- data/lib/movable_ink/version.rb +1 -1
- data/spec/metadata_spec.rb +13 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aee7128060ef1c160ab30f71a01ba8dc906b3cc19e600ebef7b48df7d0fd29d2
|
4
|
+
data.tar.gz: 36d923a0fca6ca5098f8e9dd4c12ee8257f9c0896853d56a2979e9bbe461ac5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3328245aeb3822471f9a3c52f4e015c4cb60d0ae2950c5af09dff732081b66c0409607c8e4f3d21a676e6986ba8087f7509dc62a87862cfbbf3740af5d75f6a
|
7
|
+
data.tar.gz: a5decec040107d6b7240551412cc43827fdf78be921ae8eaae3fc61d419aa578d72a6af24851d8397f721e7674e03eda56cd662af8871eec9569e125a20a9199
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
MovableInkAWS (2.
|
4
|
+
MovableInkAWS (2.6.0)
|
5
5
|
aws-sdk-athena (~> 1)
|
6
6
|
aws-sdk-autoscaling (~> 1)
|
7
7
|
aws-sdk-cloudwatch (~> 1)
|
@@ -23,55 +23,55 @@ GEM
|
|
23
23
|
specs:
|
24
24
|
addressable (2.7.0)
|
25
25
|
public_suffix (>= 2.0.2, < 5.0)
|
26
|
-
aws-eventstream (1.
|
27
|
-
aws-partitions (1.
|
28
|
-
aws-sdk-athena (1.
|
29
|
-
aws-sdk-core (~> 3, >= 3.
|
26
|
+
aws-eventstream (1.2.0)
|
27
|
+
aws-partitions (1.573.0)
|
28
|
+
aws-sdk-athena (1.52.0)
|
29
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
30
30
|
aws-sigv4 (~> 1.1)
|
31
|
-
aws-sdk-autoscaling (1.
|
32
|
-
aws-sdk-core (~> 3, >= 3.
|
31
|
+
aws-sdk-autoscaling (1.78.0)
|
32
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
33
33
|
aws-sigv4 (~> 1.1)
|
34
|
-
aws-sdk-cloudwatch (1.
|
35
|
-
aws-sdk-core (~> 3, >= 3.
|
34
|
+
aws-sdk-cloudwatch (1.62.0)
|
35
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
36
36
|
aws-sigv4 (~> 1.1)
|
37
|
-
aws-sdk-core (3.
|
37
|
+
aws-sdk-core (3.130.0)
|
38
38
|
aws-eventstream (~> 1, >= 1.0.2)
|
39
|
-
aws-partitions (~> 1, >= 1.
|
39
|
+
aws-partitions (~> 1, >= 1.525.0)
|
40
40
|
aws-sigv4 (~> 1.1)
|
41
41
|
jmespath (~> 1.0)
|
42
|
-
aws-sdk-ec2 (1.
|
43
|
-
aws-sdk-core (~> 3, >= 3.
|
42
|
+
aws-sdk-ec2 (1.305.0)
|
43
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
44
44
|
aws-sigv4 (~> 1.1)
|
45
|
-
aws-sdk-eks (1.
|
46
|
-
aws-sdk-core (~> 3, >= 3.
|
45
|
+
aws-sdk-eks (1.74.0)
|
46
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
47
47
|
aws-sigv4 (~> 1.1)
|
48
|
-
aws-sdk-elasticache (1.
|
49
|
-
aws-sdk-core (~> 3, >= 3.
|
48
|
+
aws-sdk-elasticache (1.76.0)
|
49
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
50
50
|
aws-sigv4 (~> 1.1)
|
51
|
-
aws-sdk-kms (1.
|
52
|
-
aws-sdk-core (~> 3, >= 3.
|
51
|
+
aws-sdk-kms (1.55.0)
|
52
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
53
53
|
aws-sigv4 (~> 1.1)
|
54
|
-
aws-sdk-rds (1.
|
55
|
-
aws-sdk-core (~> 3, >= 3.
|
54
|
+
aws-sdk-rds (1.142.0)
|
55
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
56
56
|
aws-sigv4 (~> 1.1)
|
57
|
-
aws-sdk-route53 (1.
|
58
|
-
aws-sdk-core (~> 3, >= 3.
|
57
|
+
aws-sdk-route53 (1.62.0)
|
58
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
59
59
|
aws-sigv4 (~> 1.1)
|
60
|
-
aws-sdk-s3 (1.
|
61
|
-
aws-sdk-core (~> 3, >= 3.
|
60
|
+
aws-sdk-s3 (1.113.0)
|
61
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
62
62
|
aws-sdk-kms (~> 1)
|
63
|
+
aws-sigv4 (~> 1.4)
|
64
|
+
aws-sdk-sns (1.53.0)
|
65
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
63
66
|
aws-sigv4 (~> 1.1)
|
64
|
-
aws-sdk-
|
65
|
-
aws-sdk-core (~> 3, >= 3.
|
67
|
+
aws-sdk-ssm (1.134.0)
|
68
|
+
aws-sdk-core (~> 3, >= 3.127.0)
|
66
69
|
aws-sigv4 (~> 1.1)
|
67
|
-
aws-
|
68
|
-
aws-sdk-core (~> 3, >= 3.112.0)
|
69
|
-
aws-sigv4 (~> 1.1)
|
70
|
-
aws-sigv4 (1.2.3)
|
70
|
+
aws-sigv4 (1.4.0)
|
71
71
|
aws-eventstream (~> 1, >= 1.0.2)
|
72
72
|
crack (0.4.3)
|
73
73
|
safe_yaml (~> 1.0.0)
|
74
|
-
deep_merge (1.2.
|
74
|
+
deep_merge (1.2.2)
|
75
75
|
diff-lcs (1.3)
|
76
76
|
diplomat (2.4.2)
|
77
77
|
deep_merge (~> 1.0, >= 1.0.1)
|
@@ -82,10 +82,10 @@ GEM
|
|
82
82
|
httparty (0.16.3)
|
83
83
|
mime-types (~> 3.0)
|
84
84
|
multi_xml (>= 0.5.2)
|
85
|
-
jmespath (1.
|
86
|
-
mime-types (3.
|
85
|
+
jmespath (1.6.1)
|
86
|
+
mime-types (3.4.1)
|
87
87
|
mime-types-data (~> 3.2015)
|
88
|
-
mime-types-data (3.
|
88
|
+
mime-types-data (3.2022.0105)
|
89
89
|
multi_xml (0.6.0)
|
90
90
|
multipart-post (2.1.1)
|
91
91
|
public_suffix (4.0.5)
|
@@ -117,4 +117,4 @@ DEPENDENCIES
|
|
117
117
|
webmock
|
118
118
|
|
119
119
|
BUNDLED WITH
|
120
|
-
2.1.
|
120
|
+
2.1.4
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'net/http'
|
2
|
+
require 'json'
|
2
3
|
|
3
4
|
module MovableInk
|
4
5
|
class AWS
|
@@ -12,20 +13,34 @@ module MovableInk
|
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
15
|
-
def
|
16
|
+
def retrieve_data(url, tries: 3)
|
16
17
|
tries.times do |num|
|
17
18
|
num += 1
|
18
|
-
request = Net::HTTP::Get.new(
|
19
|
+
request = Net::HTTP::Get.new(url)
|
19
20
|
request['X-aws-ec2-metadata-token'] = imds_token
|
20
21
|
response = http(timeout_seconds: num * 3).request(request)
|
21
22
|
return response.body
|
22
|
-
rescue Net::OpenTimeout, Net::ReadTimeout, Errno::EHOSTDOWN
|
23
|
+
rescue Net::OpenTimeout, Net::ReadTimeout, Errno::EHOSTDOWN, Errno::ECONNREFUSED
|
23
24
|
sleep(num * 2)
|
24
25
|
end
|
25
26
|
|
26
27
|
raise MovableInk::AWS::Errors::MetadataTimeout
|
27
28
|
end
|
28
29
|
|
30
|
+
def retrieve_metadata(key, tries: 3)
|
31
|
+
retrieve_data("/latest/meta-data/#{key}", tries: tries)
|
32
|
+
end
|
33
|
+
|
34
|
+
def retrieve_dynamicdata(key, tries: 3)
|
35
|
+
retrieve_data("/latest/dynamic/#{key}", tries: tries)
|
36
|
+
end
|
37
|
+
|
38
|
+
def instance_identity_document
|
39
|
+
@instance_identity_document ||= JSON.parse(retrieve_dynamicdata('instance-identity/document'))
|
40
|
+
rescue JSON::ParserError
|
41
|
+
return
|
42
|
+
end
|
43
|
+
|
29
44
|
def availability_zone
|
30
45
|
@availability_zone ||= retrieve_metadata('placement/availability-zone')
|
31
46
|
end
|
@@ -3,21 +3,21 @@ require 'aws-sdk-route53'
|
|
3
3
|
module MovableInk
|
4
4
|
class AWS
|
5
5
|
module Route53
|
6
|
-
def route53
|
7
|
-
@route53_client ||= Aws::Route53::Client.new(region: 'us-east-1')
|
6
|
+
def route53(client = nil)
|
7
|
+
@route53_client ||= (client) ? client : Aws::Route53::Client.new(region: 'us-east-1')
|
8
8
|
end
|
9
9
|
|
10
|
-
def resource_record_sets(hosted_zone_id)
|
10
|
+
def resource_record_sets(hosted_zone_id, client = nil)
|
11
11
|
@resource_record_sets ||= {}
|
12
|
-
@resource_record_sets[hosted_zone_id] ||= list_all_r53_resource_record_sets(hosted_zone_id)
|
12
|
+
@resource_record_sets[hosted_zone_id] ||= list_all_r53_resource_record_sets(hosted_zone_id, client)
|
13
13
|
end
|
14
14
|
|
15
|
-
def get_resource_record_sets_by_instance_name(zone, instance_name)
|
16
|
-
resource_record_sets(zone).select{|rrs| rrs.set_identifier == instance_name}.first.to_h
|
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
|
17
17
|
end
|
18
18
|
|
19
|
-
def delete_resource_record_sets(zone, instance_name)
|
20
|
-
resource_record_set = get_resource_record_sets_by_instance_name(zone, instance_name)
|
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
21
|
return if resource_record_set.empty?
|
22
22
|
|
23
23
|
change_batch = {
|
@@ -28,36 +28,36 @@ module MovableInk
|
|
28
28
|
}
|
29
29
|
|
30
30
|
run_with_backoff do
|
31
|
-
route53.change_resource_record_sets({change_batch: change_batch, hosted_zone_id: zone})
|
31
|
+
route53(client).change_resource_record_sets({change_batch: change_batch, hosted_zone_id: zone})
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
-
def list_all_r53_resource_record_sets(hosted_zone_id)
|
35
|
+
def list_all_r53_resource_record_sets(hosted_zone_id, client = nil)
|
36
36
|
run_with_backoff do
|
37
|
-
route53.list_resource_record_sets({
|
37
|
+
route53(client).list_resource_record_sets({
|
38
38
|
hosted_zone_id: hosted_zone_id
|
39
39
|
}).flat_map(&:resource_record_sets)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
def list_health_checks
|
43
|
+
def list_health_checks(client = nil)
|
44
44
|
run_with_backoff do
|
45
|
-
route53.list_health_checks().flat_map(&:health_checks)
|
45
|
+
route53(client).list_health_checks().flat_map(&:health_checks)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
def get_health_check_tags(health_check_id)
|
49
|
+
def get_health_check_tags(health_check_id, client = nil)
|
50
50
|
run_with_backoff do
|
51
|
-
route53.list_tags_for_resource({
|
51
|
+
route53(client).list_tags_for_resource({
|
52
52
|
resource_type: 'healthcheck',
|
53
53
|
resource_id: health_check_id
|
54
54
|
}).resource_tag_set.tags
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
def find_health_check_by_tag(key, value)
|
59
|
-
list_health_checks.detect do |health_check|
|
60
|
-
get_health_check_tags(health_check.id).detect { |tag| tag.key == key && tag.value.include?(value) }
|
58
|
+
def find_health_check_by_tag(key, value, client = nil)
|
59
|
+
list_health_checks(client).detect do |health_check|
|
60
|
+
get_health_check_tags(health_check.id, client).detect { |tag| tag.key == key && tag.value.include?(value) }
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
data/lib/movable_ink/version.rb
CHANGED
data/spec/metadata_spec.rb
CHANGED
@@ -15,6 +15,19 @@ describe MovableInk::AWS::Metadata do
|
|
15
15
|
expect{ aws.availability_zone }.to raise_error(MovableInk::AWS::Errors::MetadataTimeout)
|
16
16
|
end
|
17
17
|
|
18
|
+
it 'should raise an error if the metadata service times out on getting dynamic data' do
|
19
|
+
aws = MovableInk::AWS.new
|
20
|
+
# stub an error making a request to the metadata api
|
21
|
+
stub_request(:put, 'http://169.254.169.254/latest/api/token').to_raise(Net::OpenTimeout)
|
22
|
+
expect{ aws.instance_identity_document }.to raise_error(MovableInk::AWS::Errors::MetadataTimeout)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should return nil if the metadata service returns unparseable dynamic data' do
|
26
|
+
aws = MovableInk::AWS.new
|
27
|
+
expect(aws).to receive(:retrieve_data).with('/latest/dynamic/instance-identity/document', {tries: 3}).and_return("something")
|
28
|
+
expect(aws.instance_identity_document).to eq(nil)
|
29
|
+
end
|
30
|
+
|
18
31
|
it 'should raise an error if trying to load private_ipv4 outside of EC2' do
|
19
32
|
aws = MovableInk::AWS.new
|
20
33
|
# stub an error making a request to the metadata api
|
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.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Chesler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-core
|