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 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