forked from lhartung/coredns-dockerdiscovery
-
Notifications
You must be signed in to change notification settings - Fork 0
/
resolvers.go
68 lines (53 loc) · 1.55 KB
/
resolvers.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
package dockerdiscovery
import (
dockerapi "github.com/fsouza/go-dockerclient"
"fmt"
"strings"
)
// resolvers implements ContainerDomainResolver
type SubDomainContainerNameResolver struct {
domain string
}
func (resolver SubDomainContainerNameResolver) resolve(container *dockerapi.Container) ([]string, error) {
var domains []string
domains = append(domains, fmt.Sprintf("%s.%s", strings.TrimLeft(container.Name, "/"), resolver.domain))
return domains, nil
}
type SubDomainHostResolver struct {
domain string
}
func (resolver SubDomainHostResolver) resolve(container *dockerapi.Container) ([]string, error) {
var domains []string
domains = append(domains, fmt.Sprintf("%s.%s", container.Config.Hostname, resolver.domain))
return domains, nil
}
type LabelResolver struct {
hostLabel string
}
func (resolver LabelResolver) resolve(container *dockerapi.Container) ([]string, error) {
var domains []string
for label, value := range container.Config.Labels {
if label == resolver.hostLabel {
domains = append(domains, value)
break;
}
}
return domains, nil
}
type NetworkAliasesResolver struct {
network string
}
func (resolver NetworkAliasesResolver) resolve(container *dockerapi.Container) ([]string, error) {
var domains []string
if resolver.network != "" {
network, ok := container.NetworkSettings.Networks[resolver.network]
if ok {
domains = append(domains, network.Aliases...)
}
} else {
for _, network := range container.NetworkSettings.Networks {
domains = append(domains, network.Aliases...)
}
}
return domains, nil
}