@@ -2,6 +2,9 @@ package compute
2
2
3
3
import (
4
4
"context"
5
+ "strings"
6
+
7
+ "github.com/Sirupsen/logrus"
5
8
6
9
"github.com/docker/docker/api/types"
7
10
"github.com/docker/docker/api/types/container"
@@ -12,9 +15,36 @@ import (
12
15
dutils "github.com/rancher/agent/utilities/docker"
13
16
)
14
17
18
+ const (
19
+ RancherDNSPriority = "io.rancher.container.dns.priority"
20
+ RancherDomain = "rancher.internal"
21
+ )
22
+
15
23
func setupPublishPorts (hostConfig * container.HostConfig , instance model.Instance ) {}
16
24
17
25
func setupDNSSearch (hostConfig * container.HostConfig , instance model.Instance ) error {
26
+ var defaultDomains []string
27
+ var svcNameSpace string
28
+ var stackNameSpace string
29
+
30
+ if instance .Data .Fields .Labels != nil {
31
+ setRancherSearchDomains := true
32
+ if strings .EqualFold (strings .TrimSpace (instance .Data .Fields .Labels [RancherDNSPriority ]), "None" ) {
33
+ setRancherSearchDomains = false
34
+ }
35
+ if setRancherSearchDomains {
36
+ if value , ok := instance .Data .Fields .Labels ["io.rancher.stack_service.name" ]; ok {
37
+ splitted := strings .Split (value , "/" )
38
+ svc := strings .ToLower (splitted [1 ])
39
+ stack := strings .ToLower (splitted [0 ])
40
+ svcNameSpace = svc + "." + stack + "." + RancherDomain
41
+ stackNameSpace = stack + "." + RancherDomain
42
+ defaultDomains = append (defaultDomains , svcNameSpace )
43
+ defaultDomains = append (defaultDomains , stackNameSpace )
44
+ }
45
+ }
46
+ }
47
+ hostConfig .DNSSearch = defaultDomains
18
48
return nil
19
49
}
20
50
@@ -70,14 +100,26 @@ var cmdDNS = []string{
70
100
func configureDNS (dockerClient * client.Client , containerID string ) error {
71
101
var err error
72
102
var execObj types.ContainerExecCreateResponse
103
+ var currentCMD []string
104
+ currentCMD = append (currentCMD , cmdDNS ... )
105
+ //Setup dns search list
106
+ info , err := dockerClient .ContainerInspect (context .Background (), containerID )
107
+ if err == nil && len (info .HostConfig .DNSSearch ) != 0 {
108
+ dnsSearch := []string {}
109
+ for i := 0 ; i < len (info .HostConfig .DNSSearch ); i ++ {
110
+ dnsSearch = append (dnsSearch , `"` + info .HostConfig .DNSSearch [i ]+ `"` )
111
+ }
112
+ currentCMD [1 ] = currentCMD [1 ] + "; Set-DnsClientGlobalSetting -SuffixSearchList " + strings .Join (dnsSearch , "," )
113
+ }
114
+ logrus .Info (currentCMD )
73
115
execConfig := types.ExecConfig {
74
116
AttachStdout : true ,
75
117
AttachStdin : true ,
76
118
AttachStderr : true ,
77
119
Privileged : true ,
78
120
Tty : false ,
79
121
Detach : false ,
80
- Cmd : cmdDNS ,
122
+ Cmd : currentCMD ,
81
123
}
82
124
83
125
if execObj , err = dockerClient .ContainerExecCreate (context .Background (), containerID , execConfig ); err == nil {
0 commit comments