Commit ba20e634 authored by Davanum Srinivas's avatar Davanum Srinivas

Create fake /etc/hosts for conformance test

"KubeletManagedEtcHosts should test kubelet managed /etc/hosts file" conformance test fails in the CI's Docker-In-Docker environment. This test mounts a /etc/hosts file and checks if "# Kubernetes-managed hosts file." string is present or not under various conditions. The specific failure with DIND happens when the /etc/hosts picked up from the box where e2e test are running already has this string. This happens because our CI runs on kubernetes and the e2e tests are running in a container that was started on kubernetes (and hence already has that string) To avoid this situation, we create a new /etc/hosts file with known contents (and does not have the "# Kubernetes-managed hosts file." string)
parent 7e98a3ad
...@@ -17,6 +17,8 @@ limitations under the License. ...@@ -17,6 +17,8 @@ limitations under the License.
package common package common
import ( import (
"io/ioutil"
"os"
"strings" "strings"
"time" "time"
...@@ -40,6 +42,7 @@ type KubeletManagedHostConfig struct { ...@@ -40,6 +42,7 @@ type KubeletManagedHostConfig struct {
hostNetworkPod *v1.Pod hostNetworkPod *v1.Pod
pod *v1.Pod pod *v1.Pod
f *framework.Framework f *framework.Framework
tmpEtcHostFile *os.File
} }
var _ = framework.KubeDescribe("KubeletManagedEtcHosts", func() { var _ = framework.KubeDescribe("KubeletManagedEtcHosts", func() {
...@@ -59,6 +62,8 @@ var _ = framework.KubeDescribe("KubeletManagedEtcHosts", func() { ...@@ -59,6 +62,8 @@ var _ = framework.KubeDescribe("KubeletManagedEtcHosts", func() {
By("Running the test") By("Running the test")
config.verifyEtcHosts() config.verifyEtcHosts()
config.cleanup()
}) })
}) })
...@@ -76,6 +81,26 @@ func (config *KubeletManagedHostConfig) verifyEtcHosts() { ...@@ -76,6 +81,26 @@ func (config *KubeletManagedHostConfig) verifyEtcHosts() {
} }
func (config *KubeletManagedHostConfig) setup() { func (config *KubeletManagedHostConfig) setup() {
etcHostContents := `127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters`
// Write the data to a temp file.
var err error
config.tmpEtcHostFile, err = ioutil.TempFile("", "etc-hosts")
if err != nil {
framework.Failf("failed to create temp file for /etc/hosts: %v", err)
}
if _, err := config.tmpEtcHostFile.Write([]byte(etcHostContents)); err != nil {
framework.Failf("Failed to write temp file for /etc/hosts data: %v", err)
}
if err := config.tmpEtcHostFile.Close(); err != nil {
framework.Failf("Failed to close temp file: %v", err)
}
By("Creating hostNetwork=false pod") By("Creating hostNetwork=false pod")
config.createPodWithoutHostNetwork() config.createPodWithoutHostNetwork()
...@@ -83,6 +108,12 @@ func (config *KubeletManagedHostConfig) setup() { ...@@ -83,6 +108,12 @@ func (config *KubeletManagedHostConfig) setup() {
config.createPodWithHostNetwork() config.createPodWithHostNetwork()
} }
func (config *KubeletManagedHostConfig) cleanup() {
if config.tmpEtcHostFile != nil {
os.Remove(config.tmpEtcHostFile.Name())
}
}
func (config *KubeletManagedHostConfig) createPodWithoutHostNetwork() { func (config *KubeletManagedHostConfig) createPodWithoutHostNetwork() {
podSpec := config.createPodSpec(etcHostsPodName) podSpec := config.createPodSpec(etcHostsPodName)
config.pod = config.f.PodClient().CreateSync(podSpec) config.pod = config.f.PodClient().CreateSync(podSpec)
...@@ -184,7 +215,7 @@ func (config *KubeletManagedHostConfig) createPodSpec(podName string) *v1.Pod { ...@@ -184,7 +215,7 @@ func (config *KubeletManagedHostConfig) createPodSpec(podName string) *v1.Pod {
Name: "host-etc-hosts", Name: "host-etc-hosts",
VolumeSource: v1.VolumeSource{ VolumeSource: v1.VolumeSource{
HostPath: &v1.HostPathVolumeSource{ HostPath: &v1.HostPathVolumeSource{
Path: "/etc/hosts", Path: config.tmpEtcHostFile.Name(),
Type: hostPathType, Type: hostPathType,
}, },
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment