diff --git a/integration-cli/docker_cli_run_test.go b/integration-cli/docker_cli_run_test.go index c60e7badde..d26dc4f927 100644 --- a/integration-cli/docker_cli_run_test.go +++ b/integration-cli/docker_cli_run_test.go @@ -28,7 +28,6 @@ import ( "github.com/docker/docker/integration-cli/cli" "github.com/docker/docker/integration-cli/cli/build" "github.com/docker/docker/libnetwork/resolvconf" - "github.com/docker/docker/libnetwork/types" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/runconfig" "github.com/docker/docker/testutil" @@ -1326,13 +1325,13 @@ func (s *DockerSuite) TestRunDNSOptionsBasedOnHostResolvConf(c *testing.T) { c.Fatalf("/etc/resolv.conf does not exist") } - hostNameservers := resolvconf.GetNameservers(origResolvConf, types.IP) + hostNameservers := resolvconf.GetNameservers(origResolvConf, resolvconf.IP) hostSearch := resolvconf.GetSearchDomains(origResolvConf) var out string out, _ = dockerCmd(c, "run", "--dns=127.0.0.1", "busybox", "cat", "/etc/resolv.conf") - if actualNameservers := resolvconf.GetNameservers([]byte(out), types.IP); actualNameservers[0] != "127.0.0.1" { + if actualNameservers := resolvconf.GetNameservers([]byte(out), resolvconf.IP); actualNameservers[0] != "127.0.0.1" { c.Fatalf("expected '127.0.0.1', but says: %q", actualNameservers[0]) } @@ -1348,7 +1347,7 @@ func (s *DockerSuite) TestRunDNSOptionsBasedOnHostResolvConf(c *testing.T) { out, _ = dockerCmd(c, "run", "--dns-search=mydomain", "busybox", "cat", "/etc/resolv.conf") - actualNameservers := resolvconf.GetNameservers([]byte(out), types.IP) + actualNameservers := resolvconf.GetNameservers([]byte(out), resolvconf.IP) if len(actualNameservers) != len(hostNameservers) { c.Fatalf("expected %q nameserver(s), but it has: %q", len(hostNameservers), len(actualNameservers)) } @@ -1382,7 +1381,7 @@ func (s *DockerSuite) TestRunDNSOptionsBasedOnHostResolvConf(c *testing.T) { hostSearch = resolvconf.GetSearchDomains(resolvConf) out, _ = dockerCmd(c, "run", "busybox", "cat", "/etc/resolv.conf") - if actualNameservers = resolvconf.GetNameservers([]byte(out), types.IP); actualNameservers[0] != "12.34.56.78" || len(actualNameservers) != 1 { + if actualNameservers = resolvconf.GetNameservers([]byte(out), resolvconf.IP); actualNameservers[0] != "12.34.56.78" || len(actualNameservers) != 1 { c.Fatalf("expected '12.34.56.78', but has: %v", actualNameservers) } diff --git a/libnetwork/resolvconf/resolvconf.go b/libnetwork/resolvconf/resolvconf.go index 9d6391577e..3665d0b72a 100644 --- a/libnetwork/resolvconf/resolvconf.go +++ b/libnetwork/resolvconf/resolvconf.go @@ -9,7 +9,6 @@ import ( "sync" "github.com/docker/docker/libnetwork/resolvconf/dns" - "github.com/docker/docker/libnetwork/types" "github.com/docker/docker/pkg/ioutils" "github.com/sirupsen/logrus" ) @@ -21,6 +20,13 @@ const ( alternatePath = "/run/systemd/resolve/resolv.conf" ) +// constants for the IP address type +const ( + IP = iota // IPv4 and IPv6 + IPv4 + IPv6 +) + var ( detectSystemdResolvConfOnce sync.Once pathAfterSystemdDetection = defaultPath @@ -44,7 +50,7 @@ func Path() string { // silencing error as it will resurface at next calls trying to read defaultPath return } - ns := GetNameservers(candidateResolvConf, types.IP) + ns := GetNameservers(candidateResolvConf, IP) if len(ns) == 1 && ns[0] == "127.0.0.53" { pathAfterSystemdDetection = alternatePath logrus.Infof("detected 127.0.0.53 nameserver, assuming systemd-resolved, so using resolv.conf: %s", alternatePath) @@ -153,7 +159,7 @@ func FilterResolvDNS(resolvConf []byte, ipv6Enabled bool) (*File, error) { } // if the resulting resolvConf has no more nameservers defined, add appropriate // default DNS servers for IPv4 and (optionally) IPv6 - if len(GetNameservers(cleanedResolvConf, types.IP)) == 0 { + if len(GetNameservers(cleanedResolvConf, IP)) == 0 { logrus.Infof("No non-localhost DNS nameservers are left in resolv.conf. Using default external servers: %v", defaultIPv4Dns) dns := defaultIPv4Dns if ipv6Enabled { @@ -189,11 +195,11 @@ func GetNameservers(resolvConf []byte, kind int) []string { nameservers := []string{} for _, line := range getLines(resolvConf, []byte("#")) { var ns [][]byte - if kind == types.IP { + if kind == IP { ns = nsRegexp.FindSubmatch(line) - } else if kind == types.IPv4 { + } else if kind == IPv4 { ns = nsIPv4Regexpmatch.FindSubmatch(line) - } else if kind == types.IPv6 { + } else if kind == IPv6 { ns = nsIPv6Regexpmatch.FindSubmatch(line) } if len(ns) > 0 { @@ -208,7 +214,7 @@ func GetNameservers(resolvConf []byte, kind int) []string { // This function's output is intended for net.ParseCIDR func GetNameserversAsCIDR(resolvConf []byte) []string { nameservers := []string{} - for _, nameserver := range GetNameservers(resolvConf, types.IP) { + for _, nameserver := range GetNameservers(resolvConf, IP) { var address string // If IPv6, strip zone if present if strings.Contains(nameserver, ":") { diff --git a/libnetwork/resolvconf/resolvconf_linux_test.go b/libnetwork/resolvconf/resolvconf_linux_test.go index 26d33ef50c..d5f304d999 100644 --- a/libnetwork/resolvconf/resolvconf_linux_test.go +++ b/libnetwork/resolvconf/resolvconf_linux_test.go @@ -6,7 +6,6 @@ import ( "os" "testing" - "github.com/docker/docker/libnetwork/types" "github.com/docker/docker/pkg/ioutils" ) @@ -48,7 +47,7 @@ nameserver 1.2.3.4 `search example.com nameserver 1.2.3.4 # not 4.3.2.1`: {"1.2.3.4"}, } { - test := GetNameservers([]byte(resolv), types.IP) + test := GetNameservers([]byte(resolv), IP) if !strSlicesEqual(test, result) { t.Fatalf("Wrong nameserver string {%s} should be %v. Input: %s", test, result, resolv) } diff --git a/libnetwork/sandbox_dns_unix.go b/libnetwork/sandbox_dns_unix.go index 9bf31caa0f..0a094778e4 100644 --- a/libnetwork/sandbox_dns_unix.go +++ b/libnetwork/sandbox_dns_unix.go @@ -233,7 +233,7 @@ func (sb *sandbox) setupDNS() error { if len(sb.config.dnsList) > 0 || len(sb.config.dnsSearchList) > 0 || len(sb.config.dnsOptionsList) > 0 { var ( err error - dnsList = resolvconf.GetNameservers(currRC.Content, types.IP) + dnsList = resolvconf.GetNameservers(currRC.Content, resolvconf.IP) dnsSearchList = resolvconf.GetSearchDomains(currRC.Content) dnsOptionsList = resolvconf.GetOptions(currRC.Content) ) @@ -253,13 +253,13 @@ func (sb *sandbox) setupDNS() error { // After building the resolv.conf from the user config save the // external resolvers in the sandbox. Note that --dns 127.0.0.x // config refers to the loopback in the container namespace - sb.setExternalResolvers(newRC.Content, types.IPv4, false) + sb.setExternalResolvers(newRC.Content, resolvconf.IPv4, false) } else { // If the host resolv.conf file has 127.0.0.x container should // use the host resolver for queries. This is supported by the // docker embedded DNS server. Hence save the external resolvers // before filtering it out. - sb.setExternalResolvers(currRC.Content, types.IPv4, true) + sb.setExternalResolvers(currRC.Content, resolvconf.IPv4, true) // Replace any localhost/127.* (at this point we have no info about ipv6, pass it as true) if newRC, err = resolvconf.FilterResolvDNS(currRC.Content, true); err != nil { @@ -358,7 +358,7 @@ func (sb *sandbox) rebuildDNS() error { } if len(sb.extDNS) == 0 { - sb.setExternalResolvers(currRC.Content, types.IPv4, false) + sb.setExternalResolvers(currRC.Content, resolvconf.IPv4, false) } var ( dnsList = []string{sb.resolver.NameServer()} @@ -367,7 +367,7 @@ func (sb *sandbox) rebuildDNS() error { ) // external v6 DNS servers has to be listed in resolv.conf - dnsList = append(dnsList, resolvconf.GetNameservers(currRC.Content, types.IPv6)...) + dnsList = append(dnsList, resolvconf.GetNameservers(currRC.Content, resolvconf.IPv6)...) // If the user config and embedded DNS server both have ndots option set, // remember the user's config so that unqualified names not in the docker diff --git a/libnetwork/types/types.go b/libnetwork/types/types.go index 42da71be0e..1045bdab99 100644 --- a/libnetwork/types/types.go +++ b/libnetwork/types/types.go @@ -12,6 +12,7 @@ import ( ) // constants for the IP address type +// Deprecated: use the consts defined in github.com/docker/docker/libnetwork/resolvconf const ( IP = iota // IPv4 and IPv6 IPv4