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 +4 -4
- data/Gemfile.lock +6 -2
- data/MovableInkAWS.gemspec +1 -0
- data/lib/movable_ink/aws/route53.rb +18 -18
- data/lib/movable_ink/aws/ssm.rb +14 -11
- data/lib/movable_ink/aws.rb +5 -1
- data/lib/movable_ink/version.rb +1 -1
- data/spec/ssm_spec.rb +10 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb359b343b37bc026f547aa8edc0dcd01fc85786947ef5dc8a6d9ef8b6da05d1
|
4
|
+
data.tar.gz: f0c0c888ac995d1f1c895ae359ff19bc93e46b3ea621852733b39475cad138e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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.
|
124
|
+
2.3.11
|
data/MovableInkAWS.gemspec
CHANGED
@@ -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
|
data/lib/movable_ink/aws/ssm.rb
CHANGED
@@ -3,26 +3,29 @@ require 'aws-sdk-ssm'
|
|
3
3
|
module MovableInk
|
4
4
|
class AWS
|
5
5
|
module SSM
|
6
|
-
|
7
|
-
|
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
|
-
@
|
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
|
data/lib/movable_ink/aws.rb
CHANGED
@@ -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)
|
data/lib/movable_ink/version.rb
CHANGED
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.
|
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-
|
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
|