MovableInkAWS 2.5.1 → 2.6.1

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: bf00286ca6df97b28e2721514ae975f5033f1c1645270b787acdade801895431
4
- data.tar.gz: 18cced6b07a7ed5b683c6ccfe037aabadd6d54eb58eee399eb23cb2d0a2e152a
3
+ metadata.gz: 238d21eb16377f58da3db182b93157e34f26e05b5a12a8f233039153e581ab1a
4
+ data.tar.gz: 55249c69017ffb581c53478eedb109c026fce69fde1dec5f60580d66b42970af
5
5
  SHA512:
6
- metadata.gz: d690d05079f5d2b51b87003e5de4a6322110897935e8a2a5fa387fe12a242b017ed0b6fcad3dfbd9976a50d81c22a78788009bf2c52bce25c338ad784a5aa753
7
- data.tar.gz: 9026ea88eecfaa54abfbe18df7856d2e481279d4dd2ada91c1ed60b94a883b8cf527d402f513c24622227adb9b669bb2acbf43033a2f47b8841ba196e461ef85
6
+ metadata.gz: 365976f0e0e1ba918bfd8875e95e0d78d3ce59cf83ab6896b3c001250046cf5081e2cfe09b192196e01f7daef60c41523e647d720a5b8356980e2fca3900dfe2
7
+ data.tar.gz: 2fed258445a35f69973085710a2465e09845a1e98068f1f535551cefb3e1ebd11af9fdaed90781055b4757961eb107f8b92745bb4a0f3443cb25ebe95d7c8b75
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- MovableInkAWS (2.5.1)
4
+ MovableInkAWS (2.6.1)
5
5
  aws-sdk-athena (~> 1)
6
6
  aws-sdk-autoscaling (~> 1)
7
7
  aws-sdk-cloudwatch (~> 1)
@@ -24,48 +24,48 @@ GEM
24
24
  addressable (2.7.0)
25
25
  public_suffix (>= 2.0.2, < 5.0)
26
26
  aws-eventstream (1.2.0)
27
- aws-partitions (1.554.0)
28
- aws-sdk-athena (1.37.0)
29
- aws-sdk-core (~> 3, >= 3.112.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.126.1)
37
+ aws-sdk-core (3.130.0)
38
38
  aws-eventstream (~> 1, >= 1.0.2)
39
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)
66
- aws-sigv4 (~> 1.1)
67
- aws-sdk-ssm (1.108.0)
68
- aws-sdk-core (~> 3, >= 3.112.0)
67
+ aws-sdk-ssm (1.134.0)
68
+ aws-sdk-core (~> 3, >= 3.127.0)
69
69
  aws-sigv4 (~> 1.1)
70
70
  aws-sigv4 (1.4.0)
71
71
  aws-eventstream (~> 1, >= 1.0.2)
@@ -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.6.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)
@@ -20,7 +20,7 @@ module MovableInk
20
20
  request['X-aws-ec2-metadata-token'] = imds_token
21
21
  response = http(timeout_seconds: num * 3).request(request)
22
22
  return response.body
23
- rescue Net::OpenTimeout, Net::ReadTimeout, Errno::EHOSTDOWN
23
+ rescue Net::OpenTimeout, Net::ReadTimeout, Errno::EHOSTDOWN, Errno::ECONNREFUSED
24
24
  sleep(num * 2)
25
25
  end
26
26
 
@@ -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
@@ -3,26 +3,29 @@ require 'aws-sdk-ssm'
3
3
  module MovableInk
4
4
  class AWS
5
5
  module SSM
6
- def ssm_client
7
- @ssm_client ||= Aws::SSM::Client.new(region: 'us-east-1')
6
+
7
+ def ssm_client(region = nil)
8
+ @ssm_clients_map ||= {}
9
+ @ssm_clients_map[region] ||= Aws::SSM::Client.new(region: (region.nil?) ? 'us-east-1' : region)
8
10
  end
9
11
 
10
- def ssm_client_failover
11
- @ssm_client_failover ||= Aws::SSM::Client.new(region: 'us-west-2')
12
+ def ssm_client_failover(failregion = nil)
13
+ @ssm_failover_clients_map ||= {}
14
+ @ssm_failover_clients_map[failregion] ||= Aws::SSM::Client.new(region: (failregion.nil?) ? 'us-west-2' : failregion)
12
15
  end
13
16
 
14
- def run_with_backoff_and_client_fallback(&block)
17
+ def run_with_backoff_and_client_fallback(region = nil, failregion = nil, &block)
15
18
  run_with_backoff do
16
- block.call(ssm_client)
19
+ block.call(ssm_client(region))
17
20
  end
18
21
  rescue MovableInk::AWS::Errors::FailedWithBackoff => e
19
22
  run_with_backoff(tries: 3) do
20
- block.call(ssm_client_failover)
23
+ block.call(ssm_client_failover(failregion))
21
24
  end
22
25
  end
23
26
 
24
- def get_secret(environment: mi_env, role:, attribute:)
25
- run_with_backoff_and_client_fallback do |ssm|
27
+ def get_secret(environment: mi_env, role:, attribute:, region: nil, failregion: nil)
28
+ run_with_backoff_and_client_fallback(region, failregion) do |ssm|
26
29
  begin
27
30
  resp = ssm.get_parameter(
28
31
  name: "/#{environment}/#{role}/#{attribute}",
@@ -35,9 +38,9 @@ module MovableInk
35
38
  end
36
39
  end
37
40
 
38
- def get_role_secrets(environment: mi_env, role:)
41
+ def get_role_secrets(environment: mi_env, role:, region: nil, failregion: nil)
39
42
  path = "/#{environment}/#{role}"
40
- run_with_backoff_and_client_fallback do |ssm|
43
+ run_with_backoff_and_client_fallback(region, failregion) do |ssm|
41
44
  ssm.get_parameters_by_path(
42
45
  path: path,
43
46
  with_decryption: true
@@ -1,5 +1,5 @@
1
1
  module MovableInk
2
2
  class AWS
3
- VERSION = '2.5.1'
3
+ VERSION = '2.6.1'
4
4
  end
5
5
  end
data/spec/ssm_spec.rb CHANGED
@@ -68,6 +68,11 @@ describe MovableInk::AWS::SSM do
68
68
  expect(Aws::SSM::Client).to receive(:new).with({ region: 'us-east-1' })
69
69
  aws.ssm_client
70
70
  end
71
+
72
+ it 'Allows region to be defined as a parameter' do
73
+ expect(Aws::SSM::Client).to receive(:new).with({ region: 'us-east-2' })
74
+ aws.ssm_client('us-east-2')
75
+ end
71
76
  end
72
77
 
73
78
  describe 'ssm_client_failover' do
@@ -75,6 +80,11 @@ describe MovableInk::AWS::SSM do
75
80
  expect(Aws::SSM::Client).to receive(:new).with({ region: 'us-west-2' })
76
81
  aws.ssm_client_failover
77
82
  end
83
+
84
+ it 'fails over to parameter defined region' do
85
+ expect(Aws::SSM::Client).to receive(:new).with({ region: 'us-west-1' })
86
+ aws.ssm_client_failover('us-west-1')
87
+ end
78
88
  end
79
89
 
80
90
  describe 'run_with_backoff_and_client_fallback' do
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.1
4
+ version: 2.6.1
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-03-31 00:00:00.000000000 Z
11
+ date: 2022-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core