mirror of
https://github.com/containers/podman.git
synced 2025-05-21 00:56:36 +08:00
use resolvconf package from c/common/libnetwork
Podman and Buildah should use the same code the generate the resolv.conf file. This mostly moved the podman code into c/common and created a better API for it so buildah can use it as well. [NO NEW TESTS NEEDED] All existing tests should continue to pass. Fixes #13599 (There is no way to test this in CI without breaking the hosts resolv.conf) Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
@ -17,6 +17,7 @@ import (
|
||||
"github.com/containers/buildah/pkg/overlay"
|
||||
butil "github.com/containers/buildah/util"
|
||||
"github.com/containers/common/libnetwork/etchosts"
|
||||
"github.com/containers/common/libnetwork/resolvconf"
|
||||
"github.com/containers/common/pkg/cgroups"
|
||||
"github.com/containers/common/pkg/chown"
|
||||
"github.com/containers/common/pkg/config"
|
||||
@ -986,7 +987,7 @@ func (c *Container) checkDependenciesRunning() ([]string, error) {
|
||||
}
|
||||
|
||||
func (c *Container) completeNetworkSetup() error {
|
||||
var outResolvConf []string
|
||||
var nameservers []string
|
||||
netDisabled, err := c.NetworkDisabled()
|
||||
if err != nil {
|
||||
return err
|
||||
@ -1004,7 +1005,7 @@ func (c *Container) completeNetworkSetup() error {
|
||||
// collect any dns servers that cni tells us to use (dnsname)
|
||||
for _, status := range c.getNetworkStatus() {
|
||||
for _, server := range status.DNSServerIPs {
|
||||
outResolvConf = append(outResolvConf, fmt.Sprintf("nameserver %s", server))
|
||||
nameservers = append(nameservers, server.String())
|
||||
}
|
||||
}
|
||||
// check if we have a bindmount for /etc/hosts
|
||||
@ -1020,24 +1021,12 @@ func (c *Container) completeNetworkSetup() error {
|
||||
}
|
||||
|
||||
// check if we have a bindmount for resolv.conf
|
||||
resolvBindMount := state.BindMounts["/etc/resolv.conf"]
|
||||
if len(outResolvConf) < 1 || resolvBindMount == "" || len(c.config.NetNsCtr) > 0 {
|
||||
resolvBindMount := state.BindMounts[resolvconf.DefaultResolvConf]
|
||||
if len(nameservers) < 1 || resolvBindMount == "" || len(c.config.NetNsCtr) > 0 {
|
||||
return nil
|
||||
}
|
||||
// read the existing resolv.conf
|
||||
b, err := ioutil.ReadFile(resolvBindMount)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, line := range strings.Split(string(b), "\n") {
|
||||
// only keep things that don't start with nameserver from the old
|
||||
// resolv.conf file
|
||||
if !strings.HasPrefix(line, "nameserver") {
|
||||
outResolvConf = append([]string{line}, outResolvConf...)
|
||||
}
|
||||
}
|
||||
// write and return
|
||||
return ioutil.WriteFile(resolvBindMount, []byte(strings.Join(outResolvConf, "\n")), 0644)
|
||||
return resolvconf.Add(resolvBindMount, nameservers)
|
||||
}
|
||||
|
||||
// Initialize a container, creating it in the runtime
|
||||
|
Reference in New Issue
Block a user