add HostAlias support for HostNetwork pods
This commit is contained in:
parent
ceb33bde29
commit
4edd92f26d
@ -233,7 +233,7 @@ func ensureHostsFile(fileName, hostIP, hostName, hostDomainName string, hostAlia
|
||||
// if Pod is using host network, read hosts file from the node's filesystem.
|
||||
// `etcHostsPath` references the location of the hosts file on the node.
|
||||
// `/etc/hosts` for *nix systems.
|
||||
hostsFileContent, err = nodeHostsFileContent(etcHostsPath)
|
||||
hostsFileContent, err = nodeHostsFileContent(etcHostsPath, hostAliases)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -246,8 +246,13 @@ func ensureHostsFile(fileName, hostIP, hostName, hostDomainName string, hostAlia
|
||||
}
|
||||
|
||||
// nodeHostsFileContent reads the content of node's hosts file.
|
||||
func nodeHostsFileContent(hostsFilePath string) ([]byte, error) {
|
||||
return ioutil.ReadFile(hostsFilePath)
|
||||
func nodeHostsFileContent(hostsFilePath string, hostAliases []v1.HostAlias) ([]byte, error) {
|
||||
hostsFileContent, err := ioutil.ReadFile(hostsFilePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
hostsFileContent = append(hostsFileContent, hostsEntriesFromHostAliases(hostAliases)...)
|
||||
return hostsFileContent, nil
|
||||
}
|
||||
|
||||
// managedHostsFileContent generates the content of the managed etc hosts based on Pod IP and other
|
||||
|
@ -184,11 +184,23 @@ func TestMakeMounts(t *testing.T) {
|
||||
|
||||
func TestNodeHostsFileContent(t *testing.T) {
|
||||
testCases := []struct {
|
||||
hostsFileName string
|
||||
expectedContent string
|
||||
hostsFileName string
|
||||
hostAliases []v1.HostAlias
|
||||
rawHostsFileContent string
|
||||
expectedHostsFileContent string
|
||||
}{
|
||||
{
|
||||
"hosts_test_file1",
|
||||
[]v1.HostAlias{},
|
||||
`# hosts file for testing.
|
||||
127.0.0.1 localhost
|
||||
::1 localhost ip6-localhost ip6-loopback
|
||||
fe00::0 ip6-localnet
|
||||
fe00::0 ip6-mcastprefix
|
||||
fe00::1 ip6-allnodes
|
||||
fe00::2 ip6-allrouters
|
||||
123.45.67.89 some.domain
|
||||
`,
|
||||
`# hosts file for testing.
|
||||
127.0.0.1 localhost
|
||||
::1 localhost ip6-localhost ip6-loopback
|
||||
@ -201,6 +213,16 @@ fe00::2 ip6-allrouters
|
||||
},
|
||||
{
|
||||
"hosts_test_file2",
|
||||
[]v1.HostAlias{},
|
||||
`# another hosts file for testing.
|
||||
127.0.0.1 localhost
|
||||
::1 localhost ip6-localhost ip6-loopback
|
||||
fe00::0 ip6-localnet
|
||||
fe00::0 ip6-mcastprefix
|
||||
fe00::1 ip6-allnodes
|
||||
fe00::2 ip6-allrouters
|
||||
12.34.56.78 another.domain
|
||||
`,
|
||||
`# another hosts file for testing.
|
||||
127.0.0.1 localhost
|
||||
::1 localhost ip6-localhost ip6-loopback
|
||||
@ -209,18 +231,80 @@ fe00::0 ip6-mcastprefix
|
||||
fe00::1 ip6-allnodes
|
||||
fe00::2 ip6-allrouters
|
||||
12.34.56.78 another.domain
|
||||
`,
|
||||
},
|
||||
{
|
||||
"hosts_test_file1_with_host_aliases",
|
||||
[]v1.HostAlias{
|
||||
{IP: "123.45.67.89", Hostnames: []string{"foo", "bar", "baz"}},
|
||||
},
|
||||
`# hosts file for testing.
|
||||
127.0.0.1 localhost
|
||||
::1 localhost ip6-localhost ip6-loopback
|
||||
fe00::0 ip6-localnet
|
||||
fe00::0 ip6-mcastprefix
|
||||
fe00::1 ip6-allnodes
|
||||
fe00::2 ip6-allrouters
|
||||
123.45.67.89 some.domain
|
||||
`,
|
||||
`# hosts file for testing.
|
||||
127.0.0.1 localhost
|
||||
::1 localhost ip6-localhost ip6-loopback
|
||||
fe00::0 ip6-localnet
|
||||
fe00::0 ip6-mcastprefix
|
||||
fe00::1 ip6-allnodes
|
||||
fe00::2 ip6-allrouters
|
||||
123.45.67.89 some.domain
|
||||
|
||||
# Entries added by HostAliases.
|
||||
123.45.67.89 foo
|
||||
123.45.67.89 bar
|
||||
123.45.67.89 baz
|
||||
`,
|
||||
},
|
||||
{
|
||||
"hosts_test_file2_with_host_aliases",
|
||||
[]v1.HostAlias{
|
||||
{IP: "123.45.67.89", Hostnames: []string{"foo", "bar", "baz"}},
|
||||
{IP: "456.78.90.123", Hostnames: []string{"park", "doo", "boo"}},
|
||||
},
|
||||
`# another hosts file for testing.
|
||||
127.0.0.1 localhost
|
||||
::1 localhost ip6-localhost ip6-loopback
|
||||
fe00::0 ip6-localnet
|
||||
fe00::0 ip6-mcastprefix
|
||||
fe00::1 ip6-allnodes
|
||||
fe00::2 ip6-allrouters
|
||||
12.34.56.78 another.domain
|
||||
`,
|
||||
`# another hosts file for testing.
|
||||
127.0.0.1 localhost
|
||||
::1 localhost ip6-localhost ip6-loopback
|
||||
fe00::0 ip6-localnet
|
||||
fe00::0 ip6-mcastprefix
|
||||
fe00::1 ip6-allnodes
|
||||
fe00::2 ip6-allrouters
|
||||
12.34.56.78 another.domain
|
||||
|
||||
# Entries added by HostAliases.
|
||||
123.45.67.89 foo
|
||||
123.45.67.89 bar
|
||||
123.45.67.89 baz
|
||||
456.78.90.123 park
|
||||
456.78.90.123 doo
|
||||
456.78.90.123 boo
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
||||
for _, testCase := range testCases {
|
||||
tmpdir, err := writeHostsFile(testCase.hostsFileName, testCase.expectedContent)
|
||||
tmpdir, err := writeHostsFile(testCase.hostsFileName, testCase.rawHostsFileContent)
|
||||
require.NoError(t, err, "could not create a temp hosts file")
|
||||
defer os.RemoveAll(tmpdir)
|
||||
|
||||
actualContent, fileReadErr := nodeHostsFileContent(filepath.Join(tmpdir, testCase.hostsFileName))
|
||||
actualContent, fileReadErr := nodeHostsFileContent(filepath.Join(tmpdir, testCase.hostsFileName), testCase.hostAliases)
|
||||
require.NoError(t, fileReadErr, "could not create read hosts file")
|
||||
assert.Equal(t, testCase.expectedContent, string(actualContent), "hosts file content not expected")
|
||||
assert.Equal(t, testCase.expectedHostsFileContent, string(actualContent), "hosts file content not expected")
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user