MovableInkAWS 2.11.4 → 2.11.6

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: 6b512cd51997315bd6fb546d10f60f6ac434a48cd5bb0f7cb6a3e530b5215fda
4
- data.tar.gz: 2551f3560ddf52873bfa7b1a80ce330844effde2765ac0bee8fad9ab87eaa651
3
+ metadata.gz: e435c7e7f7f63344b18f29da2e373d44bac9f990dc7514bc868deb1e18d0a01b
4
+ data.tar.gz: 7da29c9c9daf0ca24c0395422365f87c0ac596274620e98992fd5645ca053984
5
5
  SHA512:
6
- metadata.gz: a7b4ed079987785359a3f7b29af63a60fe8dfb999d4871d6166d1483505030f687a04c13999315759c84d3e8b6d4d4943216da0c6479e13bec3b233417fc6cc5
7
- data.tar.gz: e9b53f15118613fe8fd48a0502d0eed1b7d2af79829678bc99ab86543dff06f8541a64fe573b01a9424afb666951654fbf251cc290fed6a6cd1f77e92d85aa6d
6
+ metadata.gz: 3ee0936e7d71cfffe8bcbaaf861c0c2bfaf3e6d24e7288f485cd4f922abb430bf4a9c0ae8b400674ffaba46e4084c46493c26865340af1779cf2f901cdad8d3a
7
+ data.tar.gz: da6308796716af6dd1138dbb5c582da293f890247d1fe0de1f502ab668596be62485860795bc2c6d6046030261f718b86ec82aa186dae3790de285f7b97ce4f3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- MovableInkAWS (2.11.4)
4
+ MovableInkAWS (2.11.6)
5
5
  aws-sdk-athena (~> 1)
6
6
  aws-sdk-autoscaling (~> 1)
7
7
  aws-sdk-cloudwatch (~> 1)
@@ -136,7 +136,11 @@ module MovableInk
136
136
  # within MI configuration
137
137
  Diplomat::Health.service(role.gsub('_', '-'), consul_service_options).map { |endpoint|
138
138
  if endpoint.Node.dig('Meta', 'external-source') == 'kubernetes'
139
+ # Legacy catalog sync
139
140
  map_k8s_consul_endpoint(endpoint, role)
141
+ elsif endpoint.Service && endpoint.Service.dig('Meta', 'managed-by') == 'consul-k8s-endpoints-controller'
142
+ # Consul mesh with service mesh sidecar
143
+ map_k8s_consul_mesh_endpoint(endpoint, role)
140
144
  else
141
145
  map_ec2_consul_endpoint(endpoint)
142
146
  end
@@ -161,7 +165,41 @@ module MovableInk
161
165
  value: role
162
166
  }
163
167
  ],
164
- placement: { availability_zone: nil }
168
+ placement: { availability_zone: endpoint.Service.dig('Meta', 'external-k8s-topology-zone') }
169
+ })
170
+ end
171
+
172
+ def map_k8s_consul_mesh_endpoint(endpoint, role)
173
+ OpenStruct.new ({
174
+ private_ip_address: endpoint.Service.dig('Address'),
175
+ instance_id: nil,
176
+ tags: [
177
+ {
178
+ key: 'Name',
179
+ value: endpoint.Service.dig('Meta', 'pod-name')
180
+ },
181
+ {
182
+ key: 'mi:roles',
183
+ value: role
184
+ },
185
+ {
186
+ key: 'mi:monitoring_roles',
187
+ value: role
188
+ },
189
+ {
190
+ key: 'k8s:namespace',
191
+ value: endpoint.Service.dig('Meta', 'k8s-namespace')
192
+ },
193
+ {
194
+ key: 'k8s:service',
195
+ value: endpoint.Service.dig('Meta', 'k8s-service-name')
196
+ },
197
+ {
198
+ key: 'k8s:pod-uid',
199
+ value: endpoint.Service.dig('Meta', 'pod-uid')
200
+ }
201
+ ],
202
+ placement: { availability_zone: endpoint.Service.dig('Locality', 'Zone') }
165
203
  })
166
204
  end
167
205
 
@@ -1,5 +1,5 @@
1
1
  module MovableInk
2
2
  class AWS
3
- VERSION = '2.11.4'
3
+ VERSION = '2.11.6'
4
4
  end
5
5
  end
data/spec/ec2_spec.rb CHANGED
@@ -418,6 +418,7 @@ describe MovableInk::AWS::EC2 do
418
418
  "Meta": {
419
419
  "external-source": "kubernetes",
420
420
  "external-k8s-ns": "default",
421
+ "external-k8s-topology-zone": "us-east-1a",
421
422
  }
422
423
  }
423
424
  }
@@ -484,7 +485,100 @@ describe MovableInk::AWS::EC2 do
484
485
  expect(roles_tag[:value]).to eq('kubernetes-service-name')
485
486
  expect(backend.instance_id).to eq(nil)
486
487
  expect(backend.private_ip_address).to eq('10.0.0.1')
487
- expect(backend.private_ip_address).to eq('10.0.0.1')
488
+ expect(backend.placement[:availability_zone]).to eq('us-east-1a')
489
+ end
490
+
491
+ it "returns backends that are synced from consul mesh with service mesh sidecar" do
492
+ consul_mesh_service_instances = [
493
+ {
494
+ "Node": {
495
+ "ID": "",
496
+ "Node": "k8s-mesh-virtual-node",
497
+ "Address": "10.0.0.10",
498
+ "Datacenter": my_datacenter,
499
+ "TaggedAddresses": nil,
500
+ "Meta": {
501
+ "synthetic-node": "true"
502
+ },
503
+ "CreateIndex": 12345,
504
+ "ModifyIndex": 12345
505
+ },
506
+ "Service": {
507
+ "ID": "test-service-abc123-xyz-test-service",
508
+ "Service": "test-service",
509
+ "Tags": [],
510
+ "Address": "10.0.0.11",
511
+ "Meta": {
512
+ "k8s-namespace": "default",
513
+ "k8s-service-name": "test-service",
514
+ "managed-by": "consul-k8s-endpoints-controller",
515
+ "pod-name": "test-service-abc123-xyz",
516
+ "pod-uid": "00000000-0000-0000-0000-000000000000",
517
+ "synthetic-node": "true"
518
+ },
519
+ "Port": 8080,
520
+ "Weights": {
521
+ "Passing": 1,
522
+ "Warning": 1
523
+ },
524
+ "EnableTagOverride": false,
525
+ "Locality": {
526
+ "Region": "us-east-1",
527
+ "Zone": "us-east-1b"
528
+ },
529
+ "Proxy": {
530
+ "Mode": "",
531
+ "MeshGateway": {},
532
+ "Expose": {}
533
+ },
534
+ "Connect": {},
535
+ "PeerName": "",
536
+ "CreateIndex": 12345,
537
+ "ModifyIndex": 12345
538
+ },
539
+ "Checks": [
540
+ {
541
+ "Node": "k8s-mesh-virtual-node",
542
+ "CheckID": "default/test-service-abc123-xyz-test-service",
543
+ "Name": "Kubernetes Readiness Check",
544
+ "Status": "passing",
545
+ "Notes": "",
546
+ "Output": "Kubernetes health checks passing",
547
+ "ServiceID": "test-service-abc123-xyz-test-service",
548
+ "ServiceName": "test-service",
549
+ "ServiceTags": [],
550
+ "Type": "kubernetes-readiness",
551
+ "Interval": "",
552
+ "Timeout": "",
553
+ "ExposedPort": 0,
554
+ "Definition": {},
555
+ "CreateIndex": 12345,
556
+ "ModifyIndex": 12345
557
+ }
558
+ ]
559
+ }
560
+ ]
561
+
562
+ json = JSON.generate(consul_mesh_service_instances)
563
+ stub_request(:get, "https://localhost:8501/v1/health/service/test-service?cached=true&dc=#{my_datacenter}&passing=true&stale=true")
564
+ .to_return(status: 200, body: json, headers: {})
565
+
566
+ resp_instances = aws.instances(role: 'test-service', discovery_type: 'consul')
567
+ backend = resp_instances.first
568
+ name_tag = backend.tags.find {|t| t[:key] == 'Name' }
569
+ roles_tag = backend.tags.find {|t| t[:key] == 'mi:roles' }
570
+ k8s_namespace_tag = backend.tags.find {|t| t[:key] == 'k8s:namespace' }
571
+ k8s_service_tag = backend.tags.find {|t| t[:key] == 'k8s:service' }
572
+ k8s_pod_uid_tag = backend.tags.find {|t| t[:key] == 'k8s:pod-uid' }
573
+
574
+ expect(name_tag[:value]).to eq('test-service-abc123-xyz')
575
+ expect(roles_tag[:value]).to eq('test-service')
576
+ expect(k8s_namespace_tag[:value]).to eq('default')
577
+ expect(k8s_service_tag[:value]).to eq('test-service')
578
+ expect(k8s_pod_uid_tag[:value]).to eq('00000000-0000-0000-0000-000000000000')
579
+ expect(backend.instance_id).to eq(nil)
580
+ expect(backend.private_ip_address).to eq('10.0.0.11')
581
+ expect(backend.placement[:availability_zone]).to eq('us-east-1b')
488
582
  end
489
583
  end
490
584
 
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.11.4
4
+ version: 2.11.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - MI SRE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-11-12 00:00:00.000000000 Z
11
+ date: 2026-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk-core