MovableInkAWS 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/movable_ink/aws/ec2.rb +10 -6
- data/lib/movable_ink/version.rb +1 -1
- data/spec/ec2_spec.rb +29 -2
- 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: ac88eb29fbafb05b27ad196f6308d5184b38d9220f6213d38965915b22505c76
|
4
|
+
data.tar.gz: 36df30eeaeb57db6f742d95819266d902b9ea118f14ca56c685ffba62a4172b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d1df5299ea1db3985f1747779ac4b626605880062286c8b97872485cd8d1c848b18c06d2f09ec223c670c6c6ec674a60c93951c6299f0495ed5b919ec849cf4
|
7
|
+
data.tar.gz: 509c3fe4f8257378bf70a816b3c9631141aa8d7b36ece74ee5dcafbb5006f1b76b7b2b9465331017ab1836f19a0f2c0231686bc37216bb99940a538b75953ab5
|
data/lib/movable_ink/aws/ec2.rb
CHANGED
@@ -91,11 +91,15 @@ module MovableInk
|
|
91
91
|
@me ||= all_instances.select{|instance| instance.instance_id == instance_id}
|
92
92
|
end
|
93
93
|
|
94
|
-
def instances(role:, region: my_region, availability_zone: nil)
|
94
|
+
def instances(role:, region: my_region, availability_zone: nil, exact_match: false)
|
95
95
|
instances = all_instances(region: region).select { |instance|
|
96
96
|
instance.tags.select{ |tag| tag.key == 'mi:roles' }.detect { |tag|
|
97
97
|
roles = tag.value.split(/\s*,\s*/)
|
98
|
-
|
98
|
+
if exact_match
|
99
|
+
roles == [role]
|
100
|
+
else
|
101
|
+
roles.include?(role) && !roles.include?('decommissioned')
|
102
|
+
end
|
99
103
|
}
|
100
104
|
}
|
101
105
|
|
@@ -120,12 +124,12 @@ module MovableInk
|
|
120
124
|
instances.map(&:private_ip_address)
|
121
125
|
end
|
122
126
|
|
123
|
-
def instance_ip_addresses_by_role(role:, region: my_region, availability_zone: nil)
|
124
|
-
private_ip_addresses(instances(role: role, region: region, availability_zone: availability_zone))
|
127
|
+
def instance_ip_addresses_by_role(role:, region: my_region, availability_zone: nil, exact_match: false)
|
128
|
+
private_ip_addresses(instances(role: role, region: region, availability_zone: availability_zone, exact_match: exact_match))
|
125
129
|
end
|
126
130
|
|
127
|
-
def instance_ip_addresses_by_role_ordered(role:, region: my_region)
|
128
|
-
instances = instances(role: role, region: region)
|
131
|
+
def instance_ip_addresses_by_role_ordered(role:, region: my_region, exact_match: false)
|
132
|
+
instances = instances(role: role, region: region, exact_match: exact_match)
|
129
133
|
instances_in_my_az = instances.select { |instance| instance.placement.availability_zone == availability_zone }
|
130
134
|
ordered_instances = instances_in_my_az.shuffle + (instances - instances_in_my_az).shuffle
|
131
135
|
private_ip_addresses(ordered_instances)
|
data/lib/movable_ink/version.rb
CHANGED
data/spec/ec2_spec.rb
CHANGED
@@ -202,7 +202,23 @@ describe MovableInk::AWS::EC2 do
|
|
202
202
|
value: 'app_db, db'
|
203
203
|
}
|
204
204
|
],
|
205
|
-
private_ip_address: '10.0.0.
|
205
|
+
private_ip_address: '10.0.0.3',
|
206
|
+
placement: {
|
207
|
+
availability_zone: other_availability_zone
|
208
|
+
}
|
209
|
+
},
|
210
|
+
{
|
211
|
+
tags: [
|
212
|
+
{
|
213
|
+
key: 'mi:name',
|
214
|
+
value: 'instance4'
|
215
|
+
},
|
216
|
+
{
|
217
|
+
key: 'mi:roles',
|
218
|
+
value: 'app_db_replica'
|
219
|
+
}
|
220
|
+
],
|
221
|
+
private_ip_address: '10.0.0.4',
|
206
222
|
placement: {
|
207
223
|
availability_zone: other_availability_zone
|
208
224
|
}
|
@@ -218,11 +234,22 @@ describe MovableInk::AWS::EC2 do
|
|
218
234
|
allow(aws).to receive(:ec2).and_return(ec2)
|
219
235
|
|
220
236
|
instances = aws.instances(role: 'app_db_replica')
|
221
|
-
expect(instances.map{|i| i.tags.first.value }).to eq(['instance1', 'instance2'])
|
237
|
+
expect(instances.map{|i| i.tags.first.value }).to eq(['instance1', 'instance2', 'instance4'])
|
222
238
|
|
223
239
|
instances = aws.instances(role: 'db')
|
224
240
|
expect(instances.map{|i| i.tags.first.value }).to eq(['instance2', 'instance3'])
|
225
241
|
end
|
242
|
+
|
243
|
+
it "returns roles with exactly the specified role" do
|
244
|
+
ec2.stub_responses(:describe_instances, instance_data)
|
245
|
+
allow(aws).to receive(:mi_env).and_return('test')
|
246
|
+
allow(aws).to receive(:availability_zone).and_return(my_availability_zone)
|
247
|
+
allow(aws).to receive(:my_region).and_return('us-east-1')
|
248
|
+
allow(aws).to receive(:ec2).and_return(ec2)
|
249
|
+
|
250
|
+
instances = aws.instances(role: 'app_db_replica', exact_match: true)
|
251
|
+
expect(instances.map{|i| i.tags.first.value }).to eq(['instance4'])
|
252
|
+
end
|
226
253
|
end
|
227
254
|
|
228
255
|
context "ordered roles" 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: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Chesler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|