MovableInkAWS 1.0.16 → 1.0.17

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8da5fcf1d95cc4642ae47bc180040671d9baeb9bbabb3c92bdf8c7a1a387b33b
4
- data.tar.gz: ebb0966bf640735e8e5d2e2b0903ac246a8e61f85eb3f21a2950afd935ca338d
3
+ metadata.gz: 4563a27230a7711f44768ef561751a2366e03195de236dfb18a29bbff559c78b
4
+ data.tar.gz: b42568ac0c14f98d09420d4c2819b58eb047be5c31ca9a2e576c61685f69445b
5
5
  SHA512:
6
- metadata.gz: 635c4fe35a5c3bb404ec5ea1621345a5dca26bb8e85a911e772ad2420cbd6469a0ac896a1311f4f86326948fc25298d006981451521df244333d50d2654c82b1
7
- data.tar.gz: af18dbf13eab9fc4b06a3006c593289f7a6323afc779e08fe881f6b3e93a2ce76a0091ef36855653e848b17887d369745750c9d857085ea4816d6070e6b62053
6
+ metadata.gz: e9d9d52abbe8c75ce57a6cbd4165ea5188341106c4cf79cdc49fb96b9eda8db2b1e2216b948c750867c6333a9d29c682ef12084fd75186619b29d435606a99b7
7
+ data.tar.gz: c956e15226b703d33fdf7d74b367dac8259106cea459f5ca00ddfbe7fd05b17ccca18bdee22bde39c697370c7fb33ddd1ddf6210141efeea329f35b23f0a95c8
@@ -1,7 +1,8 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 2.2
4
+ - 2.5
5
+ - 2.6
5
6
 
6
7
  bundler_args: "--retry=3"
7
8
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- MovableInkAWS (1.0.16)
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.25.0)
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.36.0)
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.37.0)
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.96.1)
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.163.0)
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.34.0)
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.31.0)
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.84.0)
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.34.0)
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.66.0)
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.23.0)
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.78.0)
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.3)
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)
@@ -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
- instances = all_instances(region: region).select { |instance|
96
- instance.tags.select{ |tag| tag.key == 'mi:roles' }.detect { |tag|
97
- roles = tag.value.split(/\s*,\s*/)
98
- if exact_match
99
- roles == [role]
100
- else
101
- exclude_roles.push('decommissioned')
102
- roles.include?(role) && !roles.any? { |role| exclude_roles.include?(role) }
103
- end
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|
@@ -1,5 +1,5 @@
1
1
  module MovableInk
2
2
  class AWS
3
- VERSION = '1.0.16'
3
+ VERSION = '1.0.17'
4
4
  end
5
5
  end
@@ -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(:instance_data) { ec2.stub_data(:describe_instances, reservations: [
187
- instances: [
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, instance_data)
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.16
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-28 00:00:00.000000000 Z
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