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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 673dc5d1f0f353ad1795ea2e27bed707c2e67571dfd1b62080c49dd91d50e1dd
4
- data.tar.gz: a85ec079fa09d003068621e092cb0268a1aa9ed2106fcf744b996f178f0562d6
3
+ metadata.gz: aee7128060ef1c160ab30f71a01ba8dc906b3cc19e600ebef7b48df7d0fd29d2
4
+ data.tar.gz: 36d923a0fca6ca5098f8e9dd4c12ee8257f9c0896853d56a2979e9bbe461ac5b
5
5
  SHA512:
6
- metadata.gz: 94aea2b4db39beff8cf8abf6bc5c0953855b15f3bd2d82a333b055a7e191a74702670c0a4aa9c2a5ec530f32ebe0d9c15681dd71f333f8db28914a950f0fcce8
7
- data.tar.gz: e1e34005c48e3677b18c4e88a8414f543919ccce8d35ec66710f0e01e0ac1c3172a0ff59a72e62f6fb436b19b62b6d58de184916b73b754e36e8bc995c486370
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.5.0)
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.1.1)
27
- aws-partitions (1.445.0)
28
- aws-sdk-athena (1.37.0)
29
- aws-sdk-core (~> 3, >= 3.112.0)
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.60.0)
32
- aws-sdk-core (~> 3, >= 3.112.0)
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.51.0)
35
- aws-sdk-core (~> 3, >= 3.112.0)
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.114.0)
37
+ aws-sdk-core (3.130.0)
38
38
  aws-eventstream (~> 1, >= 1.0.2)
39
- aws-partitions (~> 1, >= 1.239.0)
39
+ aws-partitions (~> 1, >= 1.525.0)
40
40
  aws-sigv4 (~> 1.1)
41
41
  jmespath (~> 1.0)
42
- aws-sdk-ec2 (1.234.0)
43
- aws-sdk-core (~> 3, >= 3.112.0)
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.51.0)
46
- aws-sdk-core (~> 3, >= 3.112.0)
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.55.0)
49
- aws-sdk-core (~> 3, >= 3.112.0)
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.43.0)
52
- aws-sdk-core (~> 3, >= 3.112.0)
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.118.0)
55
- aws-sdk-core (~> 3, >= 3.112.0)
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.49.0)
58
- aws-sdk-core (~> 3, >= 3.112.0)
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.93.1)
61
- aws-sdk-core (~> 3, >= 3.112.0)
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-sns (1.39.0)
65
- aws-sdk-core (~> 3, >= 3.112.0)
67
+ aws-sdk-ssm (1.134.0)
68
+ aws-sdk-core (~> 3, >= 3.127.0)
66
69
  aws-sigv4 (~> 1.1)
67
- aws-sdk-ssm (1.108.0)
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.1)
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.4.0)
86
- mime-types (3.3.1)
85
+ jmespath (1.6.1)
86
+ mime-types (3.4.1)
87
87
  mime-types-data (~> 3.2015)
88
- mime-types-data (3.2021.0225)
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.3
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 retrieve_metadata(key, tries: 3)
16
+ def retrieve_data(url, tries: 3)
16
17
  tries.times do |num|
17
18
  num += 1
18
- request = Net::HTTP::Get.new("/latest/meta-data/#{key}")
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
@@ -1,5 +1,5 @@
1
1
  module MovableInk
2
2
  class AWS
3
- VERSION = '2.5.0'
3
+ VERSION = '2.6.0'
4
4
  end
5
5
  end
@@ -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.5.0
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-02-22 00:00:00.000000000 Z
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