MovableInkAWS 2.5.2 → 2.6.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: 363e1c1c55ce4788534ff1c245a354e862e9320d179770c9ccacc54fd335177c
4
- data.tar.gz: d453d58d25b0ec69b236d0e5aa3392615099b526294eac9966cebd46bf068b2f
3
+ metadata.gz: fb359b343b37bc026f547aa8edc0dcd01fc85786947ef5dc8a6d9ef8b6da05d1
4
+ data.tar.gz: f0c0c888ac995d1f1c895ae359ff19bc93e46b3ea621852733b39475cad138e1
5
5
  SHA512:
6
- metadata.gz: 2d305359f482dc45af20f878acf18f6569438356121fe63c9f8861277b5cb8a192d65e41c3de9f6dbbf47c0e368b235671f172749a08ad0dc61cbfb1d1c500a3
7
- data.tar.gz: 3a2bc49178a06fae7316ed380f693ad86502db0e0df71be9e6144fd10bfe888a625c756e4e631d7b47ef24cb5efe3237b075cecda011c4087c32e82950818042
6
+ metadata.gz: 698f828137a5d649ebe788b5d9c4ab42f333e0a80eeca47708044121703c8afa79248bd86ab8ec0f6afac221c8506d3e52e10356a6f2a3213a09a45926d2d4f0
7
+ data.tar.gz: 2d68a15e5b41f608411a498fad5db04ec837cdf88791605a73f285e64d1f58964bb7b6d49d7ff6d570e8c919f3c280f607bf6bbc84554339cfbf1ea29eb8de88
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- MovableInkAWS (2.5.2)
4
+ MovableInkAWS (2.6.2)
5
5
  aws-sdk-athena (~> 1)
6
6
  aws-sdk-autoscaling (~> 1)
7
7
  aws-sdk-cloudwatch (~> 1)
@@ -9,6 +9,7 @@ PATH
9
9
  aws-sdk-ec2 (~> 1)
10
10
  aws-sdk-eks (~> 1)
11
11
  aws-sdk-elasticache (~> 1)
12
+ aws-sdk-iam (~> 1)
12
13
  aws-sdk-rds (~> 1)
13
14
  aws-sdk-route53 (~> 1)
14
15
  aws-sdk-s3 (~> 1)
@@ -48,6 +49,9 @@ GEM
48
49
  aws-sdk-elasticache (1.76.0)
49
50
  aws-sdk-core (~> 3, >= 3.127.0)
50
51
  aws-sigv4 (~> 1.1)
52
+ aws-sdk-iam (1.68.0)
53
+ aws-sdk-core (~> 3, >= 3.127.0)
54
+ aws-sigv4 (~> 1.1)
51
55
  aws-sdk-kms (1.55.0)
52
56
  aws-sdk-core (~> 3, >= 3.127.0)
53
57
  aws-sigv4 (~> 1.1)
@@ -117,4 +121,4 @@ DEPENDENCIES
117
121
  webmock
118
122
 
119
123
  BUNDLED WITH
120
- 2.1.4
124
+ 2.3.11
@@ -16,6 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.add_runtime_dependency 'aws-sdk-ec2', '~> 1'
17
17
  s.add_runtime_dependency 'aws-sdk-eks', '~> 1'
18
18
  s.add_runtime_dependency 'aws-sdk-elasticache', '~> 1'
19
+ s.add_runtime_dependency 'aws-sdk-iam', '~> 1'
19
20
  s.add_runtime_dependency 'aws-sdk-rds', '~> 1'
20
21
  s.add_runtime_dependency 'aws-sdk-route53', '~> 1'
21
22
  s.add_runtime_dependency 'aws-sdk-s3', '~> 1'
@@ -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
@@ -12,6 +12,7 @@ require_relative 'aws/elasticache'
12
12
  require_relative 'aws/api_gateway'
13
13
  require_relative 'consul/consul'
14
14
  require 'aws-sdk-cloudwatch'
15
+ require 'aws-sdk-iam'
15
16
 
16
17
 
17
18
  module MovableInk
@@ -84,7 +85,10 @@ module MovableInk
84
85
  Aws::SSM::Errors::Http503Error,
85
86
  Aws::SSM::Errors::Http502Error,
86
87
  Aws::Athena::Errors::ThrottlingException,
87
- MovableInk::AWS::Errors::NoEnvironmentTagError
88
+ MovableInk::AWS::Errors::NoEnvironmentTagError,
89
+ Aws::IAM::Errors::LimitExceededException,
90
+ Aws::IAM::Errors::RequestLimitExceeded,
91
+ Aws::IAM::Errors::Throttling
88
92
  sleep_time = (num+1)**2 + rand(10)
89
93
  if quiet
90
94
  (num >= tries - 1) ? notify_and_sleep(sleep_time, $!.class) : sleep(sleep_time)
@@ -1,5 +1,5 @@
1
1
  module MovableInk
2
2
  class AWS
3
- VERSION = '2.5.2'
3
+ VERSION = '2.6.2'
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.2
4
+ version: 2.6.2
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-04-04 00:00:00.000000000 Z
11
+ date: 2022-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1'
111
+ - !ruby/object:Gem::Dependency
112
+ name: aws-sdk-iam
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: aws-sdk-rds
113
127
  requirement: !ruby/object:Gem::Requirement