mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
libnetwork: move resolvconf consts into the resolvconf package
This allows using the package without having to import the "types" package, and without having to consume github.com/ishidawataru/sctp. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
b6919cb553
commit
c9ba301a49
5 changed files with 24 additions and 19 deletions
|
@ -28,7 +28,6 @@ import (
|
||||||
"github.com/docker/docker/integration-cli/cli"
|
"github.com/docker/docker/integration-cli/cli"
|
||||||
"github.com/docker/docker/integration-cli/cli/build"
|
"github.com/docker/docker/integration-cli/cli/build"
|
||||||
"github.com/docker/docker/libnetwork/resolvconf"
|
"github.com/docker/docker/libnetwork/resolvconf"
|
||||||
"github.com/docker/docker/libnetwork/types"
|
|
||||||
"github.com/docker/docker/pkg/stringid"
|
"github.com/docker/docker/pkg/stringid"
|
||||||
"github.com/docker/docker/runconfig"
|
"github.com/docker/docker/runconfig"
|
||||||
"github.com/docker/docker/testutil"
|
"github.com/docker/docker/testutil"
|
||||||
|
@ -1326,13 +1325,13 @@ func (s *DockerSuite) TestRunDNSOptionsBasedOnHostResolvConf(c *testing.T) {
|
||||||
c.Fatalf("/etc/resolv.conf does not exist")
|
c.Fatalf("/etc/resolv.conf does not exist")
|
||||||
}
|
}
|
||||||
|
|
||||||
hostNameservers := resolvconf.GetNameservers(origResolvConf, types.IP)
|
hostNameservers := resolvconf.GetNameservers(origResolvConf, resolvconf.IP)
|
||||||
hostSearch := resolvconf.GetSearchDomains(origResolvConf)
|
hostSearch := resolvconf.GetSearchDomains(origResolvConf)
|
||||||
|
|
||||||
var out string
|
var out string
|
||||||
out, _ = dockerCmd(c, "run", "--dns=127.0.0.1", "busybox", "cat", "/etc/resolv.conf")
|
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])
|
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")
|
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) {
|
if len(actualNameservers) != len(hostNameservers) {
|
||||||
c.Fatalf("expected %q nameserver(s), but it has: %q", len(hostNameservers), len(actualNameservers))
|
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)
|
hostSearch = resolvconf.GetSearchDomains(resolvConf)
|
||||||
|
|
||||||
out, _ = dockerCmd(c, "run", "busybox", "cat", "/etc/resolv.conf")
|
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)
|
c.Fatalf("expected '12.34.56.78', but has: %v", actualNameservers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/docker/docker/libnetwork/resolvconf/dns"
|
"github.com/docker/docker/libnetwork/resolvconf/dns"
|
||||||
"github.com/docker/docker/libnetwork/types"
|
|
||||||
"github.com/docker/docker/pkg/ioutils"
|
"github.com/docker/docker/pkg/ioutils"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
@ -21,6 +20,13 @@ const (
|
||||||
alternatePath = "/run/systemd/resolve/resolv.conf"
|
alternatePath = "/run/systemd/resolve/resolv.conf"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// constants for the IP address type
|
||||||
|
const (
|
||||||
|
IP = iota // IPv4 and IPv6
|
||||||
|
IPv4
|
||||||
|
IPv6
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
detectSystemdResolvConfOnce sync.Once
|
detectSystemdResolvConfOnce sync.Once
|
||||||
pathAfterSystemdDetection = defaultPath
|
pathAfterSystemdDetection = defaultPath
|
||||||
|
@ -44,7 +50,7 @@ func Path() string {
|
||||||
// silencing error as it will resurface at next calls trying to read defaultPath
|
// silencing error as it will resurface at next calls trying to read defaultPath
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
ns := GetNameservers(candidateResolvConf, types.IP)
|
ns := GetNameservers(candidateResolvConf, IP)
|
||||||
if len(ns) == 1 && ns[0] == "127.0.0.53" {
|
if len(ns) == 1 && ns[0] == "127.0.0.53" {
|
||||||
pathAfterSystemdDetection = alternatePath
|
pathAfterSystemdDetection = alternatePath
|
||||||
logrus.Infof("detected 127.0.0.53 nameserver, assuming systemd-resolved, so using resolv.conf: %s", 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
|
// if the resulting resolvConf has no more nameservers defined, add appropriate
|
||||||
// default DNS servers for IPv4 and (optionally) IPv6
|
// 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)
|
logrus.Infof("No non-localhost DNS nameservers are left in resolv.conf. Using default external servers: %v", defaultIPv4Dns)
|
||||||
dns := defaultIPv4Dns
|
dns := defaultIPv4Dns
|
||||||
if ipv6Enabled {
|
if ipv6Enabled {
|
||||||
|
@ -189,11 +195,11 @@ func GetNameservers(resolvConf []byte, kind int) []string {
|
||||||
nameservers := []string{}
|
nameservers := []string{}
|
||||||
for _, line := range getLines(resolvConf, []byte("#")) {
|
for _, line := range getLines(resolvConf, []byte("#")) {
|
||||||
var ns [][]byte
|
var ns [][]byte
|
||||||
if kind == types.IP {
|
if kind == IP {
|
||||||
ns = nsRegexp.FindSubmatch(line)
|
ns = nsRegexp.FindSubmatch(line)
|
||||||
} else if kind == types.IPv4 {
|
} else if kind == IPv4 {
|
||||||
ns = nsIPv4Regexpmatch.FindSubmatch(line)
|
ns = nsIPv4Regexpmatch.FindSubmatch(line)
|
||||||
} else if kind == types.IPv6 {
|
} else if kind == IPv6 {
|
||||||
ns = nsIPv6Regexpmatch.FindSubmatch(line)
|
ns = nsIPv6Regexpmatch.FindSubmatch(line)
|
||||||
}
|
}
|
||||||
if len(ns) > 0 {
|
if len(ns) > 0 {
|
||||||
|
@ -208,7 +214,7 @@ func GetNameservers(resolvConf []byte, kind int) []string {
|
||||||
// This function's output is intended for net.ParseCIDR
|
// This function's output is intended for net.ParseCIDR
|
||||||
func GetNameserversAsCIDR(resolvConf []byte) []string {
|
func GetNameserversAsCIDR(resolvConf []byte) []string {
|
||||||
nameservers := []string{}
|
nameservers := []string{}
|
||||||
for _, nameserver := range GetNameservers(resolvConf, types.IP) {
|
for _, nameserver := range GetNameservers(resolvConf, IP) {
|
||||||
var address string
|
var address string
|
||||||
// If IPv6, strip zone if present
|
// If IPv6, strip zone if present
|
||||||
if strings.Contains(nameserver, ":") {
|
if strings.Contains(nameserver, ":") {
|
||||||
|
|
|
@ -6,7 +6,6 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/docker/docker/libnetwork/types"
|
|
||||||
"github.com/docker/docker/pkg/ioutils"
|
"github.com/docker/docker/pkg/ioutils"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -48,7 +47,7 @@ nameserver 1.2.3.4
|
||||||
`search example.com
|
`search example.com
|
||||||
nameserver 1.2.3.4 # not 4.3.2.1`: {"1.2.3.4"},
|
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) {
|
if !strSlicesEqual(test, result) {
|
||||||
t.Fatalf("Wrong nameserver string {%s} should be %v. Input: %s", test, result, resolv)
|
t.Fatalf("Wrong nameserver string {%s} should be %v. Input: %s", test, result, resolv)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
if len(sb.config.dnsList) > 0 || len(sb.config.dnsSearchList) > 0 || len(sb.config.dnsOptionsList) > 0 {
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
dnsList = resolvconf.GetNameservers(currRC.Content, types.IP)
|
dnsList = resolvconf.GetNameservers(currRC.Content, resolvconf.IP)
|
||||||
dnsSearchList = resolvconf.GetSearchDomains(currRC.Content)
|
dnsSearchList = resolvconf.GetSearchDomains(currRC.Content)
|
||||||
dnsOptionsList = resolvconf.GetOptions(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
|
// After building the resolv.conf from the user config save the
|
||||||
// external resolvers in the sandbox. Note that --dns 127.0.0.x
|
// external resolvers in the sandbox. Note that --dns 127.0.0.x
|
||||||
// config refers to the loopback in the container namespace
|
// config refers to the loopback in the container namespace
|
||||||
sb.setExternalResolvers(newRC.Content, types.IPv4, false)
|
sb.setExternalResolvers(newRC.Content, resolvconf.IPv4, false)
|
||||||
} else {
|
} else {
|
||||||
// If the host resolv.conf file has 127.0.0.x container should
|
// If the host resolv.conf file has 127.0.0.x container should
|
||||||
// use the host resolver for queries. This is supported by the
|
// use the host resolver for queries. This is supported by the
|
||||||
// docker embedded DNS server. Hence save the external resolvers
|
// docker embedded DNS server. Hence save the external resolvers
|
||||||
// before filtering it out.
|
// 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)
|
// 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 {
|
if newRC, err = resolvconf.FilterResolvDNS(currRC.Content, true); err != nil {
|
||||||
|
@ -358,7 +358,7 @@ func (sb *sandbox) rebuildDNS() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(sb.extDNS) == 0 {
|
if len(sb.extDNS) == 0 {
|
||||||
sb.setExternalResolvers(currRC.Content, types.IPv4, false)
|
sb.setExternalResolvers(currRC.Content, resolvconf.IPv4, false)
|
||||||
}
|
}
|
||||||
var (
|
var (
|
||||||
dnsList = []string{sb.resolver.NameServer()}
|
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
|
// 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,
|
// 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
|
// remember the user's config so that unqualified names not in the docker
|
||||||
|
|
|
@ -12,6 +12,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// constants for the IP address type
|
// constants for the IP address type
|
||||||
|
// Deprecated: use the consts defined in github.com/docker/docker/libnetwork/resolvconf
|
||||||
const (
|
const (
|
||||||
IP = iota // IPv4 and IPv6
|
IP = iota // IPv4 and IPv6
|
||||||
IPv4
|
IPv4
|
||||||
|
|
Loading…
Add table
Reference in a new issue