From 211b5ca7d404705964ee7aefcd8ff984f971c238 Mon Sep 17 00:00:00 2001 From: janeczku Date: Tue, 28 Feb 2017 13:15:49 +0100 Subject: [PATCH] Fixes duplicate IP records issue for services without exposed ports --- metadata/metadata.go | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/metadata/metadata.go b/metadata/metadata.go index 4f68e7a..b0d1b22 100644 --- a/metadata/metadata.go +++ b/metadata/metadata.go @@ -130,33 +130,37 @@ func (m *MetadataClient) getContainersDnsRecords(dnsEntries map[string]utils.Dns fqdn := utils.FqdnFromTemplate(config.NameTemplate, container.ServiceName, container.StackName, m.EnvironmentName, config.RootDomainName) - records := []string{ip} - dnsEntry := utils.DnsRecord{fqdn, records, "A", config.TTL} - addToDnsEntries(dnsEntry, dnsEntries) + addToDnsEntries(fqdn, ip, dnsEntries) ourFqdns[fqdn] = struct{}{} } } if len(ourFqdns) > 0 { - fqdn := utils.StateFqdn(m.EnvironmentUUID, config.RootDomainName) - stateRec := utils.StateRecord(fqdn, config.TTL, ourFqdns) - addToDnsEntries(stateRec, dnsEntries) + stateFqdn := utils.StateFqdn(m.EnvironmentUUID, config.RootDomainName) + stateRec := utils.StateRecord(stateFqdn, config.TTL, ourFqdns) + dnsEntries[stateFqdn] = stateRec } return nil } -func addToDnsEntries(dnsEntry utils.DnsRecord, dnsEntries map[string]utils.DnsRecord) { +func addToDnsEntries(fqdn, ip string, dnsEntries map[string]utils.DnsRecord) { var records []string - if _, ok := dnsEntries[dnsEntry.Fqdn]; !ok { - records = dnsEntry.Records + if _, ok := dnsEntries[fqdn]; !ok { + records = []string{ip} } else { - records = dnsEntries[dnsEntry.Fqdn].Records - records = append(records, dnsEntry.Records...) + records = dnsEntries[fqdn].Records + // skip if the records already have that IP + for _, val := range records { + if val == ip { + return + } + } + records = append(records, ip) } - dnsEntry = utils.DnsRecord{dnsEntry.Fqdn, records, dnsEntry.Type, dnsEntry.TTL} - dnsEntries[dnsEntry.Fqdn] = dnsEntry + + dnsEntries[fqdn] = utils.DnsRecord{fqdn, records, "A", config.TTL} } func containerStateOK(container metadata.Container) bool {