MovableInkAWS 1.0.16 → 1.0.17
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/.travis.yml +2 -1
- data/Gemfile.lock +14 -14
- data/lib/movable_ink/aws/ec2.rb +20 -11
- data/lib/movable_ink/version.rb +1 -1
- data/spec/ec2_spec.rb +56 -4
- 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: 4563a27230a7711f44768ef561751a2366e03195de236dfb18a29bbff559c78b
|
4
|
+
data.tar.gz: b42568ac0c14f98d09420d4c2819b58eb047be5c31ca9a2e576c61685f69445b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e9d9d52abbe8c75ce57a6cbd4165ea5188341106c4cf79cdc49fb96b9eda8db2b1e2216b948c750867c6333a9d29c682ef12084fd75186619b29d435606a99b7
|
7
|
+
data.tar.gz: c956e15226b703d33fdf7d74b367dac8259106cea459f5ca00ddfbe7fd05b17ccca18bdee22bde39c697370c7fb33ddd1ddf6210141efeea329f35b23f0a95c8
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
MovableInkAWS (1.0.
|
4
|
+
MovableInkAWS (1.0.17)
|
5
5
|
aws-sdk-athena (~> 1)
|
6
6
|
aws-sdk-autoscaling (~> 1)
|
7
7
|
aws-sdk-cloudwatch (~> 1)
|
@@ -21,46 +21,46 @@ GEM
|
|
21
21
|
specs:
|
22
22
|
aws-eventstream (1.1.0)
|
23
23
|
aws-partitions (1.322.0)
|
24
|
-
aws-sdk-athena (1.
|
24
|
+
aws-sdk-athena (1.26.0)
|
25
25
|
aws-sdk-core (~> 3, >= 3.71.0)
|
26
26
|
aws-sigv4 (~> 1.1)
|
27
|
-
aws-sdk-autoscaling (1.
|
27
|
+
aws-sdk-autoscaling (1.37.0)
|
28
28
|
aws-sdk-core (~> 3, >= 3.71.0)
|
29
29
|
aws-sigv4 (~> 1.1)
|
30
|
-
aws-sdk-cloudwatch (1.
|
30
|
+
aws-sdk-cloudwatch (1.38.0)
|
31
31
|
aws-sdk-core (~> 3, >= 3.71.0)
|
32
32
|
aws-sigv4 (~> 1.1)
|
33
|
-
aws-sdk-core (3.
|
33
|
+
aws-sdk-core (3.97.0)
|
34
34
|
aws-eventstream (~> 1, >= 1.0.2)
|
35
35
|
aws-partitions (~> 1, >= 1.239.0)
|
36
36
|
aws-sigv4 (~> 1.1)
|
37
37
|
jmespath (~> 1.0)
|
38
|
-
aws-sdk-ec2 (1.
|
38
|
+
aws-sdk-ec2 (1.164.0)
|
39
39
|
aws-sdk-core (~> 3, >= 3.71.0)
|
40
40
|
aws-sigv4 (~> 1.1)
|
41
|
-
aws-sdk-elasticache (1.
|
41
|
+
aws-sdk-elasticache (1.35.0)
|
42
42
|
aws-sdk-core (~> 3, >= 3.71.0)
|
43
43
|
aws-sigv4 (~> 1.1)
|
44
|
-
aws-sdk-kms (1.
|
44
|
+
aws-sdk-kms (1.32.0)
|
45
45
|
aws-sdk-core (~> 3, >= 3.71.0)
|
46
46
|
aws-sigv4 (~> 1.1)
|
47
|
-
aws-sdk-rds (1.
|
47
|
+
aws-sdk-rds (1.85.0)
|
48
48
|
aws-sdk-core (~> 3, >= 3.71.0)
|
49
49
|
aws-sigv4 (~> 1.1)
|
50
|
-
aws-sdk-route53 (1.
|
50
|
+
aws-sdk-route53 (1.35.0)
|
51
51
|
aws-sdk-core (~> 3, >= 3.71.0)
|
52
52
|
aws-sigv4 (~> 1.1)
|
53
|
-
aws-sdk-s3 (1.
|
53
|
+
aws-sdk-s3 (1.67.0)
|
54
54
|
aws-sdk-core (~> 3, >= 3.96.1)
|
55
55
|
aws-sdk-kms (~> 1)
|
56
56
|
aws-sigv4 (~> 1.1)
|
57
|
-
aws-sdk-sns (1.
|
57
|
+
aws-sdk-sns (1.24.0)
|
58
58
|
aws-sdk-core (~> 3, >= 3.71.0)
|
59
59
|
aws-sigv4 (~> 1.1)
|
60
|
-
aws-sdk-ssm (1.
|
60
|
+
aws-sdk-ssm (1.79.0)
|
61
61
|
aws-sdk-core (~> 3, >= 3.71.0)
|
62
62
|
aws-sigv4 (~> 1.1)
|
63
|
-
aws-sigv4 (1.1.
|
63
|
+
aws-sigv4 (1.1.4)
|
64
64
|
aws-eventstream (~> 1.0, >= 1.0.2)
|
65
65
|
diff-lcs (1.3)
|
66
66
|
httparty (0.16.3)
|
data/lib/movable_ink/aws/ec2.rb
CHANGED
@@ -91,18 +91,27 @@ module MovableInk
|
|
91
91
|
@me ||= all_instances.select{|instance| instance.instance_id == instance_id}.first rescue nil
|
92
92
|
end
|
93
93
|
|
94
|
-
def instances(role:, exclude_roles: [], region: my_region, availability_zone: nil, exact_match: false)
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
94
|
+
def instances(role:, exclude_roles: [], region: my_region, availability_zone: nil, exact_match: false, use_cache: true)
|
95
|
+
roles = role.split(/\s*,\s*/)
|
96
|
+
if use_cache == false
|
97
|
+
filter = default_filter.push({
|
98
|
+
name: 'tag:mi:roles',
|
99
|
+
values: roles
|
100
|
+
})
|
101
|
+
instances = load_all_instances(my_region, filter: filter)
|
102
|
+
else
|
103
|
+
instances = all_instances(region: region).select { |instance|
|
104
|
+
instance.tags.select{ |tag| tag.key == 'mi:roles' }.detect { |tag|
|
105
|
+
tag_roles = tag.value.split(/\s*,\s*/)
|
106
|
+
if exact_match
|
107
|
+
tag_roles == roles
|
108
|
+
else
|
109
|
+
exclude_roles.push('decommissioned')
|
110
|
+
tag_roles.any? { |tag_role| roles.include?(tag_role) } && !tag_roles.any? { |role| exclude_roles.include?(role) }
|
111
|
+
end
|
112
|
+
}
|
104
113
|
}
|
105
|
-
|
114
|
+
end
|
106
115
|
|
107
116
|
if availability_zone
|
108
117
|
instances.select { |instance|
|
data/lib/movable_ink/version.rb
CHANGED
data/spec/ec2_spec.rb
CHANGED
@@ -183,8 +183,8 @@ describe MovableInk::AWS::EC2 do
|
|
183
183
|
context "instances" do
|
184
184
|
let(:my_availability_zone) { 'us-east-1a' }
|
185
185
|
let(:other_availability_zone) { 'us-east-1b' }
|
186
|
-
let(:
|
187
|
-
|
186
|
+
let(:instances) {
|
187
|
+
[
|
188
188
|
{
|
189
189
|
tags: [
|
190
190
|
{
|
@@ -252,12 +252,54 @@ describe MovableInk::AWS::EC2 do
|
|
252
252
|
placement: {
|
253
253
|
availability_zone: other_availability_zone
|
254
254
|
}
|
255
|
+
},
|
256
|
+
{
|
257
|
+
tags: [
|
258
|
+
{
|
259
|
+
key: 'mi:name',
|
260
|
+
value: 'instance5'
|
261
|
+
},
|
262
|
+
{
|
263
|
+
key: 'mi:roles',
|
264
|
+
value: 'app_db'
|
265
|
+
}
|
266
|
+
],
|
267
|
+
instance_id: 'i-321cba',
|
268
|
+
private_ip_address: '10.0.0.5',
|
269
|
+
placement: {
|
270
|
+
availability_zone: other_availability_zone
|
271
|
+
}
|
255
272
|
}
|
256
|
-
]
|
273
|
+
]
|
274
|
+
}
|
275
|
+
let(:single_role_instance_data) { ec2.stub_data(:describe_instances, reservations: [
|
276
|
+
instances: instances.select { |instance|
|
277
|
+
instance[:tags].detect { |tag| tag[:key] == 'mi:roles' && tag[:value] == 'app_db_replica' }
|
278
|
+
}
|
279
|
+
])}
|
280
|
+
let(:multi_role_instance_data) { ec2.stub_data(:describe_instances, reservations: [
|
281
|
+
instances: instances.select { |instance|
|
282
|
+
instance[:tags].detect { |tag|
|
283
|
+
tag[:key] == 'mi:roles' && ['app_db', 'app_db_replica'].any?(tag[:value])
|
284
|
+
}
|
285
|
+
}
|
286
|
+
])}
|
287
|
+
let(:all_roles_instance_data) { ec2.stub_data(:describe_instances, reservations: [ instances: instances ])
|
257
288
|
}
|
258
289
|
|
259
290
|
before(:each) do
|
260
|
-
ec2.stub_responses(:describe_instances,
|
291
|
+
ec2.stub_responses(:describe_instances, -> (context) {
|
292
|
+
if (context.params[:filters].length == 2)
|
293
|
+
all_roles_instance_data
|
294
|
+
else
|
295
|
+
role_filter = context.params[:filters].detect { |filter| filter[:name] == 'tag:mi:roles' }
|
296
|
+
if role_filter[:values].length == 1
|
297
|
+
single_role_instance_data
|
298
|
+
else
|
299
|
+
multi_role_instance_data
|
300
|
+
end
|
301
|
+
end
|
302
|
+
})
|
261
303
|
allow(aws).to receive(:mi_env).and_return('test')
|
262
304
|
allow(aws).to receive(:availability_zone).and_return(my_availability_zone)
|
263
305
|
allow(aws).to receive(:my_region).and_return('us-east-1')
|
@@ -283,6 +325,16 @@ describe MovableInk::AWS::EC2 do
|
|
283
325
|
expect(instances.map{|i| i.tags.first.value }).to eq(['instance4'])
|
284
326
|
end
|
285
327
|
|
328
|
+
it "returns roles with exactly the specified role, letting the API to the filtering" do
|
329
|
+
instances = aws.instances(role: 'app_db_replica', use_cache: false)
|
330
|
+
expect(instances.map{|i| i.tags.first.value }).to eq(['instance4'])
|
331
|
+
end
|
332
|
+
|
333
|
+
it "returns roles with any of the specified roles, letting the API to the filtering" do
|
334
|
+
instances = aws.instances(role: 'app_db,app_db_replica', use_cache: false)
|
335
|
+
expect(instances.map{|i| i.tags.first.value }).to eq(['instance4', 'instance5'])
|
336
|
+
end
|
337
|
+
|
286
338
|
it "excludes requested roles" do
|
287
339
|
instances = aws.instances(role: 'app_db_replica', exclude_roles: ['db'])
|
288
340
|
expect(instances.map{|i| i.tags.first.value }).to eq(['instance1', 'instance4'])
|
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: 1.0.
|
4
|
+
version: 1.0.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Chesler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-core
|