diff --git a/agent/dns.go b/agent/dns.go index d8e20003d..fa1718c56 100644 --- a/agent/dns.go +++ b/agent/dns.go @@ -1171,12 +1171,16 @@ func (d *DNSServer) trimDNSResponse(cfg *dnsConfig, network string, req, resp *d // lookupServiceNodes returns nodes with a given service. func (d *DNSServer) lookupServiceNodes(cfg *dnsConfig, lookup serviceLookup) (structs.IndexedCheckServiceNodes, error) { + serviceTags := []string{} + if lookup.Tag != "" { + serviceTags = []string{lookup.Tag} + } args := structs.ServiceSpecificRequest{ Connect: lookup.Connect, Ingress: lookup.Ingress, Datacenter: lookup.Datacenter, ServiceName: lookup.Service, - ServiceTags: []string{lookup.Tag}, + ServiceTags: serviceTags, TagFilter: lookup.Tag != "", QueryOptions: structs.QueryOptions{ Token: d.agent.tokens.UserToken(), diff --git a/agent/rpcclient/health/health.go b/agent/rpcclient/health/health.go index c374bbb3f..2b28cbf3f 100644 --- a/agent/rpcclient/health/health.go +++ b/agent/rpcclient/health/health.go @@ -50,7 +50,6 @@ func (c *Client) getServiceNodes( ) (structs.IndexedCheckServiceNodes, cache.ResultMeta, error) { var out structs.IndexedCheckServiceNodes - req.ServiceName = strings.ToLower(req.ServiceName) if !req.QueryOptions.UseCache { err := c.NetRPC.RPC("Health.ServiceNodes", &req, &out) return out, cache.ResultMeta{}, err @@ -75,19 +74,12 @@ func (c *Client) getServiceNodes( } func filterTags(out *structs.IndexedCheckServiceNodes, req structs.ServiceSpecificRequest) structs.IndexedCheckServiceNodes { - if len(req.ServiceTags) == 0 || len(out.Nodes) == 0 { + if !req.TagFilter || len(req.ServiceTags) == 0 || len(out.Nodes) == 0 { return *out } tags := make([]string, 0, len(req.ServiceTags)) for _, r := range req.ServiceTags { - // DNS has the bad habit to setting [""] for ServiceTags - if r != "" { - tags = append(tags, strings.ToLower(r)) - } - } - // No need to filter - if len(tags) == 0 { - return *out + tags = append(tags, strings.ToLower(r)) } results := make(structs.CheckServiceNodes, 0, len(out.Nodes)) for _, service := range out.Nodes {