diff --git a/test/e2e/framework/pod/resource.go b/test/e2e/framework/pod/resource.go index f74ead41179..84a69cb87fd 100644 --- a/test/e2e/framework/pod/resource.go +++ b/test/e2e/framework/pod/resource.go @@ -409,23 +409,21 @@ func isNotRestartAlwaysMirrorPod(p *v1.Pod) bool { return p.Spec.RestartPolicy != v1.RestartPolicyAlways } -// NewExecPodSpec returns the pod spec of hostexec pod -func NewExecPodSpec(ns, name string, hostNetwork bool) *v1.Pod { +// NewAgnhostPod returns a pod that uses the agnhost image. The image's binary supports various subcommands +// that behave the same, no matter the underlying OS. If no args are given, it defaults to the pause subcommand. +// For more information about agnhost subcommands, see: https://github.com/kubernetes/kubernetes/tree/master/test/images/agnhost#agnhost +func NewAgnhostPod(ns, podName string, volumes []v1.Volume, mounts []v1.VolumeMount, ports []v1.ContainerPort, args ...string) *v1.Pod { immediate := int64(0) pod := &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ - Name: name, + Name: podName, Namespace: ns, }, Spec: v1.PodSpec{ Containers: []v1.Container{ - { - Name: "agnhost", - Image: imageutils.GetE2EImage(imageutils.Agnhost), - ImagePullPolicy: v1.PullIfNotPresent, - }, + NewAgnhostContainer("agnhost-container", mounts, ports, args...), }, - HostNetwork: hostNetwork, + Volumes: volumes, SecurityContext: &v1.PodSecurityContext{}, TerminationGracePeriodSeconds: &immediate, }, @@ -433,25 +431,33 @@ func NewExecPodSpec(ns, name string, hostNetwork bool) *v1.Pod { return pod } +// NewAgnhostContainer returns the container Spec of an agnhost container. +func NewAgnhostContainer(containerName string, mounts []v1.VolumeMount, ports []v1.ContainerPort, args ...string) v1.Container { + if len(args) == 0 { + args = []string{"pause"} + } + return v1.Container{ + Name: containerName, + Image: imageutils.GetE2EImage(imageutils.Agnhost), + Args: args, + VolumeMounts: mounts, + Ports: ports, + SecurityContext: &v1.SecurityContext{}, + ImagePullPolicy: v1.PullIfNotPresent, + } +} + +// NewExecPodSpec returns the pod spec of hostexec pod +func NewExecPodSpec(ns, name string, hostNetwork bool) *v1.Pod { + pod := NewAgnhostPod(ns, name, nil, nil, nil) + pod.Spec.HostNetwork = hostNetwork + return pod +} + // newExecPodSpec returns the pod spec of exec pod func newExecPodSpec(ns, generateName string) *v1.Pod { - immediate := int64(0) - pod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - GenerateName: generateName, - Namespace: ns, - }, - Spec: v1.PodSpec{ - TerminationGracePeriodSeconds: &immediate, - Containers: []v1.Container{ - { - Name: "agnhost-pause", - Image: imageutils.GetE2EImage(imageutils.Agnhost), - Args: []string{"pause"}, - }, - }, - }, - } + pod := NewAgnhostPod(ns, "agnhost-pod", nil, nil, nil) + pod.ObjectMeta.GenerateName = generateName return pod }