MovableInkAWS 2.2.0 → 2.2.1

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