Merge pull request #9730 from thockin/main
CRI: An empty DNSConfig != unspecified
This commit is contained in:
commit
db1e16da34
@ -268,25 +268,21 @@ func (c *Controller) setupSandboxFiles(id string, config *runtime.PodSandboxConf
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set DNS options. Maintain a resolv.conf for the sandbox.
|
// Set DNS options. Maintain a resolv.conf for the sandbox.
|
||||||
var err error
|
resolvPath := c.getResolvPath(id)
|
||||||
resolvContent := ""
|
|
||||||
if dnsConfig := config.GetDnsConfig(); dnsConfig != nil {
|
if dnsConfig := config.GetDnsConfig(); dnsConfig != nil {
|
||||||
resolvContent, err = parseDNSOptions(dnsConfig.Servers, dnsConfig.Searches, dnsConfig.Options)
|
resolvContent, err := parseDNSOptions(dnsConfig.Servers, dnsConfig.Searches, dnsConfig.Options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to parse sandbox DNSConfig %+v: %w", dnsConfig, err)
|
return fmt.Errorf("failed to parse sandbox DNSConfig %+v: %w", dnsConfig, err)
|
||||||
}
|
}
|
||||||
}
|
if err := c.os.WriteFile(resolvPath, []byte(resolvContent), 0644); err != nil {
|
||||||
resolvPath := c.getResolvPath(id)
|
return fmt.Errorf("failed to write resolv content to %q: %w", resolvPath, err)
|
||||||
if resolvContent == "" {
|
|
||||||
// copy host's resolv.conf to resolvPath
|
|
||||||
err = c.os.CopyFile(resolvConfPath, resolvPath, 0644)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("failed to copy host's resolv.conf to %q: %w", resolvPath, err)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err = c.os.WriteFile(resolvPath, []byte(resolvContent), 0644)
|
// The DnsConfig was nil - we interpret that to mean "use the global
|
||||||
if err != nil {
|
// default", which is dubious but backwards-compatible.
|
||||||
return fmt.Errorf("failed to write resolv content to %q: %w", resolvPath, err)
|
if err := c.os.CopyFile(resolvConfPath, resolvPath, 0644); err != nil {
|
||||||
|
return fmt.Errorf("failed to copy host's resolv.conf to %q: %w", resolvPath, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -511,6 +511,82 @@ options timeout:1
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "should create empty /etc/resolv.conf if DNSOptions is empty",
|
||||||
|
dnsConfig: &runtime.DNSConfig{},
|
||||||
|
ipcMode: runtime.NamespaceMode_NODE,
|
||||||
|
expectedCalls: []ostesting.CalledDetail{
|
||||||
|
{
|
||||||
|
Name: "Hostname",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "WriteFile",
|
||||||
|
Arguments: []interface{}{
|
||||||
|
filepath.Join(testRootDir, sandboxesDir, testID, "hostname"),
|
||||||
|
[]byte(realhostname + "\n"),
|
||||||
|
os.FileMode(0644),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "CopyFile",
|
||||||
|
Arguments: []interface{}{
|
||||||
|
"/etc/hosts",
|
||||||
|
filepath.Join(testRootDir, sandboxesDir, testID, "hosts"),
|
||||||
|
os.FileMode(0644),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "WriteFile",
|
||||||
|
Arguments: []interface{}{
|
||||||
|
filepath.Join(testRootDir, sandboxesDir, testID, "resolv.conf"),
|
||||||
|
[]byte{},
|
||||||
|
os.FileMode(0644),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "Stat",
|
||||||
|
Arguments: []interface{}{"/dev/shm"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc: "should copy host /etc/resolv.conf if DNSOptions is not set",
|
||||||
|
dnsConfig: nil,
|
||||||
|
ipcMode: runtime.NamespaceMode_NODE,
|
||||||
|
expectedCalls: []ostesting.CalledDetail{
|
||||||
|
{
|
||||||
|
Name: "Hostname",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "WriteFile",
|
||||||
|
Arguments: []interface{}{
|
||||||
|
filepath.Join(testRootDir, sandboxesDir, testID, "hostname"),
|
||||||
|
[]byte(realhostname + "\n"),
|
||||||
|
os.FileMode(0644),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "CopyFile",
|
||||||
|
Arguments: []interface{}{
|
||||||
|
"/etc/hosts",
|
||||||
|
filepath.Join(testRootDir, sandboxesDir, testID, "hosts"),
|
||||||
|
os.FileMode(0644),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "CopyFile",
|
||||||
|
Arguments: []interface{}{
|
||||||
|
filepath.Join("/etc/resolv.conf"),
|
||||||
|
filepath.Join(testRootDir, sandboxesDir, testID, "resolv.conf"),
|
||||||
|
os.FileMode(0644),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "Stat",
|
||||||
|
Arguments: []interface{}{"/dev/shm"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
desc: "should create sandbox shm when ipc namespace mode is not NODE",
|
desc: "should create sandbox shm when ipc namespace mode is not NODE",
|
||||||
ipcMode: runtime.NamespaceMode_POD,
|
ipcMode: runtime.NamespaceMode_POD,
|
||||||
|
Loading…
Reference in New Issue
Block a user