forked from rancher/external-dns
/
metadata.go
76 lines (65 loc) · 1.84 KB
/
metadata.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package main
import (
"github.com/Sirupsen/logrus"
"github.com/rancher/external-dns/providers"
"github.com/rancher/go-rancher-metadata/metadata"
"strings"
)
type ServiceDnsRecord struct {
DomainName string
ServiceName string
StackName string
}
func getMetadataDnsRecords(m *metadata.Client) (map[string]providers.DnsRecord, error) {
dnsEntries := make(map[string]providers.DnsRecord)
err := getContainersDnsRecords(m, dnsEntries, "", "")
if err != nil {
return dnsEntries, err
}
return dnsEntries, nil
}
func getContainersDnsRecords(m *metadata.Client, dnsEntries map[string]providers.DnsRecord, serviceName string, stackName string) error {
containers, err := m.GetContainers()
if err != nil {
return err
}
for _, container := range containers {
if len(container.ServiceName) == 0 {
continue
}
if len(serviceName) != 0 {
if serviceName != container.ServiceName {
continue
}
if stackName != container.StackName {
continue
}
}
if len(container.Ports) == 0 {
continue
}
hostUUID := container.HostUUID
if len(hostUUID) == 0 {
logrus.Debugf("Container's %v host_uuid is empty", container.Name)
continue
}
host, err := m.GetHost(hostUUID)
if err != nil {
logrus.Infof("%v", err)
continue
}
ip := host.AgentIP
domainNameEntries := []string{container.ServiceName, container.StackName, EnvironmentName, providers.RootDomainName}
domainName := strings.ToLower(strings.Join(domainNameEntries, "."))
records := []string{ip}
dnsEntry := providers.DnsRecord{domainName, records, "A", 300}
addToDnsEntries(dnsEntry, dnsEntries)
}
return nil
}
func convertToServiceDnsRecord(dnsRecord providers.DnsRecord) ServiceDnsRecord {
domainName := dnsRecord.DomainName
splitted := strings.Split(domainName, ".")
record := ServiceDnsRecord{domainName, splitted[0], splitted[1]}
return record
}