From b707cd6175de25e4ac225f81ca663c89d7f10654 Mon Sep 17 00:00:00 2001 From: Paul Arnett <51244713+Hypernoodle@users.noreply.github.com> Date: Sat, 1 Jun 2019 07:22:33 -0400 Subject: [PATCH] Updated Consul discovery to resolve hostname (#909) * Updated Consul discovery to resolve target API location to hostname if known Consul node, to allow SSL API certificate validation * Handling added for null response from Consul client when querying nodes --- src/Ocelot.Provider.Consul/Consul.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Ocelot.Provider.Consul/Consul.cs b/src/Ocelot.Provider.Consul/Consul.cs index 2625d3f7..f300aa6e 100644 --- a/src/Ocelot.Provider.Consul/Consul.cs +++ b/src/Ocelot.Provider.Consul/Consul.cs @@ -34,7 +34,16 @@ { if (IsValid(serviceEntry)) { - services.Add(BuildService(serviceEntry)); + var nodes = await _consul.Catalog.Nodes(); + if (nodes.Response == null) + { + services.Add(BuildService(serviceEntry, null)); + } + else + { + var serviceNode = nodes.Response.FirstOrDefault(n => n.Address == serviceEntry.Service.Address); + services.Add(BuildService(serviceEntry, serviceNode)); + } } else { @@ -45,11 +54,11 @@ return services.ToList(); } - private Service BuildService(ServiceEntry serviceEntry) + private Service BuildService(ServiceEntry serviceEntry, Node serviceNode) { return new Service( serviceEntry.Service.Service, - new ServiceHostAndPort(serviceEntry.Service.Address, serviceEntry.Service.Port), + new ServiceHostAndPort(serviceNode == null ? serviceEntry.Service.Address : serviceNode.Name, serviceEntry.Service.Port), serviceEntry.Service.ID, GetVersionFromStrings(serviceEntry.Service.Tags), serviceEntry.Service.Tags ?? Enumerable.Empty());