MovableInkAWS 2.2.0 → 2.2.1

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: d7b1d77334dfeeb0283ce569cb62b7bce8a2518de96c73156f2b25693f0a2168
4
- data.tar.gz: 56b60538a821c7fab3e55ad7ee0a80ac85312ff003521764e0721dcf86d5577c
3
+ metadata.gz: eb083b13e12b669f0843ea32ea2b8b4280ccce9b5ac6055964d9ca1214d36f60
4
+ data.tar.gz: 967f30f88ebef0135620f12930075da3bdeb05d4b449c2e5612a267f3197ff73
5
5
  SHA512:
6
- metadata.gz: 4132433dd73377d07d141297180ec17f983c4f124811ef45e474a78aa31d493d44ec2df98ed393707d13b095821182e54fcbcf23eff61f924d915aaf4eec1edd
7
- data.tar.gz: e317ad0ac916a54ffd6042310906310ea5be40f3b6b88f83b3f8c6b45364bcea3df1282c5106a5d9032cf1804137e1c03002fd0cbc7942142ca2f7ec45245798
6
+ metadata.gz: 687824a79299c74f15b6c9d1f3fded4663020670ae533619045e2097b99a38782348c3572d51bcb0d130d6b0e4e84b0ee78b778795792ba375b45118a94aaba9
7
+ data.tar.gz: 85feb71050191506f20429f851fca622597090365fe6817b54091daf539f7c84918466b20ba8566d2c948c1326188f4a33bdc8b3989d2f80e9b82cb6ffeebedf
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- MovableInkAWS (2.2.0)
4
+ MovableInkAWS (2.2.1)
5
5
  aws-sdk-athena (~> 1)
6
6
  aws-sdk-autoscaling (~> 1)
7
7
  aws-sdk-cloudwatch (~> 1)
@@ -23,51 +23,51 @@ GEM
23
23
  specs:
24
24
  addressable (2.7.0)
25
25
  public_suffix (>= 2.0.2, < 5.0)
26
- aws-eventstream (1.1.0)
27
- aws-partitions (1.416.0)
28
- aws-sdk-athena (1.33.0)
29
- aws-sdk-core (~> 3, >= 3.109.0)
26
+ aws-eventstream (1.1.1)
27
+ aws-partitions (1.433.0)
28
+ aws-sdk-athena (1.37.0)
29
+ aws-sdk-core (~> 3, >= 3.112.0)
30
30
  aws-sigv4 (~> 1.1)
31
- aws-sdk-autoscaling (1.53.0)
32
- aws-sdk-core (~> 3, >= 3.109.0)
31
+ aws-sdk-autoscaling (1.58.0)
32
+ aws-sdk-core (~> 3, >= 3.112.0)
33
33
  aws-sigv4 (~> 1.1)
34
- aws-sdk-cloudwatch (1.47.0)
35
- aws-sdk-core (~> 3, >= 3.109.0)
34
+ aws-sdk-cloudwatch (1.50.0)
35
+ aws-sdk-core (~> 3, >= 3.112.0)
36
36
  aws-sigv4 (~> 1.1)
37
- aws-sdk-core (3.111.0)
37
+ aws-sdk-core (3.113.0)
38
38
  aws-eventstream (~> 1, >= 1.0.2)
39
39
  aws-partitions (~> 1, >= 1.239.0)
40
40
  aws-sigv4 (~> 1.1)
41
41
  jmespath (~> 1.0)
42
- aws-sdk-ec2 (1.220.0)
43
- aws-sdk-core (~> 3, >= 3.109.0)
42
+ aws-sdk-ec2 (1.227.0)
43
+ aws-sdk-core (~> 3, >= 3.112.0)
44
44
  aws-sigv4 (~> 1.1)
45
- aws-sdk-eks (1.46.0)
46
- aws-sdk-core (~> 3, >= 3.109.0)
45
+ aws-sdk-eks (1.51.0)
46
+ aws-sdk-core (~> 3, >= 3.112.0)
47
47
  aws-sigv4 (~> 1.1)
48
- aws-sdk-elasticache (1.50.0)
49
- aws-sdk-core (~> 3, >= 3.109.0)
48
+ aws-sdk-elasticache (1.54.0)
49
+ aws-sdk-core (~> 3, >= 3.112.0)
50
50
  aws-sigv4 (~> 1.1)
51
- aws-sdk-kms (1.41.0)
52
- aws-sdk-core (~> 3, >= 3.109.0)
51
+ aws-sdk-kms (1.43.0)
52
+ aws-sdk-core (~> 3, >= 3.112.0)
53
53
  aws-sigv4 (~> 1.1)
54
- aws-sdk-rds (1.110.0)
55
- aws-sdk-core (~> 3, >= 3.109.0)
54
+ aws-sdk-rds (1.117.0)
55
+ aws-sdk-core (~> 3, >= 3.112.0)
56
56
  aws-sigv4 (~> 1.1)
57
- aws-sdk-route53 (1.45.0)
58
- aws-sdk-core (~> 3, >= 3.109.0)
57
+ aws-sdk-route53 (1.47.0)
58
+ aws-sdk-core (~> 3, >= 3.112.0)
59
59
  aws-sigv4 (~> 1.1)
60
- aws-sdk-s3 (1.87.0)
61
- aws-sdk-core (~> 3, >= 3.109.0)
60
+ aws-sdk-s3 (1.91.0)
61
+ aws-sdk-core (~> 3, >= 3.112.0)
62
62
  aws-sdk-kms (~> 1)
63
63
  aws-sigv4 (~> 1.1)
64
- aws-sdk-sns (1.36.0)
65
- aws-sdk-core (~> 3, >= 3.109.0)
64
+ aws-sdk-sns (1.39.0)
65
+ aws-sdk-core (~> 3, >= 3.112.0)
66
66
  aws-sigv4 (~> 1.1)
67
- aws-sdk-ssm (1.102.0)
68
- aws-sdk-core (~> 3, >= 3.109.0)
67
+ aws-sdk-ssm (1.106.0)
68
+ aws-sdk-core (~> 3, >= 3.112.0)
69
69
  aws-sigv4 (~> 1.1)
70
- aws-sigv4 (1.2.2)
70
+ aws-sigv4 (1.2.3)
71
71
  aws-eventstream (~> 1, >= 1.0.2)
72
72
  crack (0.4.3)
73
73
  safe_yaml (~> 1.0.0)
@@ -85,7 +85,7 @@ GEM
85
85
  jmespath (1.4.0)
86
86
  mime-types (3.3.1)
87
87
  mime-types-data (~> 3.2015)
88
- mime-types-data (3.2020.1104)
88
+ mime-types-data (3.2021.0225)
89
89
  multi_xml (0.6.0)
90
90
  multipart-post (2.1.1)
91
91
  public_suffix (4.0.5)
@@ -124,31 +124,60 @@ module MovableInk
124
124
  # consul service naming conventions while still retaining the role name we use
125
125
  # within MI configuration
126
126
  Diplomat::Health.service(role.gsub('_', '-'), consul_service_options).map { |endpoint|
127
- OpenStruct.new (
128
- {
129
- private_ip_address: endpoint.Node['Address'],
130
- instance_id: endpoint.Node['Meta']['instance_id'],
131
- tags: [
132
- {
133
- key: 'Name',
134
- value: endpoint.Node['Node']
135
- },
136
- {
137
- key: 'mi:roles',
138
- value: endpoint.Node['Meta']['mi_roles']
139
- },
140
- {
141
- key: 'mi:monitoring_roles',
142
- value: endpoint.Node['Meta']['mi_monitoring_roles']
143
- }
144
- ],
145
- placement: {
146
- availability_zone: endpoint.Node['Meta']['availability_zone']
147
- }
148
- })
127
+ if endpoint.Node.dig('Meta', 'external-source') == 'kubernetes'
128
+ map_k8s_consul_endpoint(endpoint, role)
129
+ else
130
+ map_ec2_consul_endpoint(endpoint)
131
+ end
149
132
  }
150
133
  end
151
134
 
135
+ def map_k8s_consul_endpoint(endpoint, role)
136
+ OpenStruct.new ({
137
+ private_ip_address: endpoint.Service.dig('Address'),
138
+ instance_id: nil,
139
+ tags: [
140
+ {
141
+ key: 'Name',
142
+ value: endpoint.Service.dig('ID')
143
+ },
144
+ {
145
+ key: 'mi:roles',
146
+ value: role
147
+ },
148
+ {
149
+ key: 'mi:monitoring_roles',
150
+ value: role
151
+ }
152
+ ],
153
+ placement: { availability_zone: nil }
154
+ })
155
+ end
156
+
157
+ def map_ec2_consul_endpoint(endpoint)
158
+ OpenStruct.new ({
159
+ private_ip_address: endpoint.Node['Address'],
160
+ instance_id: endpoint.Node['Meta']['instance_id'],
161
+ tags: [
162
+ {
163
+ key: 'Name',
164
+ value: endpoint.Node['Node']
165
+ },
166
+ {
167
+ key: 'mi:roles',
168
+ value: endpoint.Node['Meta']['mi_roles']
169
+ },
170
+ {
171
+ key: 'mi:monitoring_roles',
172
+ value: endpoint.Node['Meta']['mi_monitoring_roles']
173
+ }
174
+ ],
175
+ placement: {
176
+ availability_zone: endpoint.Node['Meta']['availability_zone']
177
+ }
178
+ })
179
+ end
180
+
152
181
  def instances(role:, exclude_roles: [], region: my_region, availability_zone: nil, exact_match: false, use_cache: true, discovery_type: 'ec2')
153
182
  if discovery_type == 'ec2'
154
183
  instances_with_ec2_discovery(role: role, exclude_roles: exclude_roles, region: region, availability_zone: availability_zone, exact_match: exact_match, use_cache: use_cache)
@@ -1,5 +1,5 @@
1
1
  module MovableInk
2
2
  class AWS
3
- VERSION = '2.2.0'
3
+ VERSION = '2.2.1'
4
4
  end
5
5
  end
data/spec/ec2_spec.rb CHANGED
@@ -386,6 +386,36 @@ describe MovableInk::AWS::EC2 do
386
386
  }]
387
387
  }
388
388
 
389
+ let(:consul_kubernetes_service_instances) do
390
+ [
391
+ {
392
+ "Node": {
393
+ "ID": "",
394
+ "Node": "k8s-sync",
395
+ "Address": "127.0.0.1",
396
+ "Datacenter": "my_datacenter",
397
+ "TaggedAddresses": nil,
398
+ "Meta": {
399
+ "external-source": "kubernetes",
400
+ "CreateIndex": 987654321,
401
+ "ModifyIndex": 123456789,
402
+ }
403
+ },
404
+ "Service": {
405
+ "ID": "pod-name-ac8f920827af",
406
+ "Service": "kubernetes-service-name",
407
+ "Tags": ["k8s"],
408
+ "Address": "10.0.0.1",
409
+ "Port": 8080,
410
+ "Meta": {
411
+ "external-source": "kubernetes",
412
+ "external-k8s-ns": "default",
413
+ }
414
+ }
415
+ }
416
+ ]
417
+ end
418
+
389
419
  before(:each) do
390
420
  allow(aws).to receive(:mi_env).and_return('test')
391
421
  allow(aws).to receive(:availability_zone).and_return(my_availability_zone)
@@ -445,6 +475,33 @@ describe MovableInk::AWS::EC2 do
445
475
  ojos_instances = aws.instances(role: 'ojos', availability_zone: other_availability_zone, discovery_type: 'consul')
446
476
  expect(ojos_instances.map{|i| i.tags.first[:value]}).to eq(['ojos_instance2', 'ojos_instance3'])
447
477
  end
478
+
479
+ it "returns backends that are synced from consul-k8s" do
480
+ miaws = double(MovableInk::AWS)
481
+ allow(miaws).to receive(:my_region).and_return('us-east-1')
482
+
483
+ json = JSON.generate(consul_kubernetes_service_instances)
484
+ stub_request(:get, "https://localhost:8501/v1/health/service/kubernetes-service-name?cached&dc=#{my_datacenter}&passing&stale")
485
+ .with({
486
+ headers: {
487
+ 'Accept'=>'*/*',
488
+ 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
489
+ 'User-Agent'=>'Faraday v1.0.1'
490
+ }
491
+ })
492
+ .to_return(status: 200, body: json, headers: {})
493
+
494
+ resp_instances = aws.instances(role: 'kubernetes-service-name', discovery_type: 'consul')
495
+ backend = resp_instances.first
496
+ name_tag = backend.tags.find {|t| t[:key] == 'Name' }
497
+ roles_tag = backend.tags.find {|t| t[:key] == 'mi:roles' }
498
+
499
+ expect(name_tag[:value]).to eq('pod-name-ac8f920827af')
500
+ expect(roles_tag[:value]).to eq('kubernetes-service-name')
501
+ expect(backend.instance_id).to eq(nil)
502
+ expect(backend.private_ip_address).to eq('10.0.0.1')
503
+ expect(backend.private_ip_address).to eq('10.0.0.1')
504
+ end
448
505
  end
449
506
 
450
507
  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: 2.2.0
4
+ version: 2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Chesler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-23 00:00:00.000000000 Z
11
+ date: 2021-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core