-
Notifications
You must be signed in to change notification settings - Fork 29
/
resolvers.go
93 lines (73 loc) · 2.28 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package dockerdiscovery
import (
"fmt"
dockerapi "github.com/fsouza/go-dockerclient"
"log"
"strings"
)
func normalizeContainerName(container *dockerapi.Container) string {
return strings.TrimLeft(container.Name, "/")
}
// 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", normalizeContainerName(container), 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
}
// ComposeResolver sets names based on compose labels
type ComposeResolver struct {
domain string
}
func (resolver ComposeResolver) resolve(container *dockerapi.Container) ([]string, error) {
var domains []string
project, pok := container.Config.Labels["com.docker.compose.project"]
service, sok := container.Config.Labels["com.docker.compose.service"]
if !pok || !sok {
return domains, nil
}
domain := fmt.Sprintf("%s.%s.%s", service, project, resolver.domain)
domains = append(domains, domain)
log.Printf("[docker] Found compose domain for container %s: %s", container.ID[:12], domain)
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
}