package network // Resource objects used by network diagnostics import ( "fmt" "strings" kapi "k8s.io/kubernetes/pkg/api" kclientcmd "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/util/intstr" "github.com/openshift/origin/pkg/diagnostics/networkpod/util" ) const ( busyboxImage = "docker.io/busybox" networkDiagTestPodSelector = "network-diag-pod-name" testPodImage = "docker.io/openshift/hello-openshift" testPodPort = 9876 testTargetPort = 8080 ) func GetNetworkDiagnosticsPod(command []string, podName, nodeName string) *kapi.Pod { privileged := true hostRootVolName := "host-root-dir" secretVolName := "kconfig-secret" secretDirBaseName := "secrets" gracePeriod := int64(0) pod := &kapi.Pod{ ObjectMeta: kapi.ObjectMeta{Name: podName}, Spec: kapi.PodSpec{ RestartPolicy: kapi.RestartPolicyNever, TerminationGracePeriodSeconds: &gracePeriod, SecurityContext: &kapi.PodSecurityContext{ HostPID: true, HostIPC: true, HostNetwork: true, }, NodeName: nodeName, Containers: []kapi.Container{ { Name: podName, Image: busyboxImage, ImagePullPolicy: kapi.PullIfNotPresent, SecurityContext: &kapi.SecurityContext{ Privileged: &privileged, }, Env: []kapi.EnvVar{ { Name: kclientcmd.RecommendedConfigPathEnvVar, Value: fmt.Sprintf("/%s/%s", secretDirBaseName, strings.ToLower(kclientcmd.RecommendedConfigPathEnvVar)), }, }, VolumeMounts: []kapi.VolumeMount{ { Name: hostRootVolName, MountPath: util.NetworkDiagContainerMountPath, }, { Name: secretVolName, MountPath: fmt.Sprintf("%s/%s", util.NetworkDiagContainerMountPath, secretDirBaseName), ReadOnly: true, }, }, Command: command, }, }, Volumes: []kapi.Volume{ { Name: hostRootVolName, VolumeSource: kapi.VolumeSource{ HostPath: &kapi.HostPathVolumeSource{ Path: "/", }, }, }, { Name: secretVolName, VolumeSource: kapi.VolumeSource{ Secret: &kapi.SecretVolumeSource{ SecretName: util.NetworkDiagSecretName, }, }, }, }, }, } return pod } func GetTestPod(podName, nodeName string) *kapi.Pod { gracePeriod := int64(0) return &kapi.Pod{ ObjectMeta: kapi.ObjectMeta{ Name: podName, Labels: map[string]string{ networkDiagTestPodSelector: podName, }, }, Spec: kapi.PodSpec{ RestartPolicy: kapi.RestartPolicyNever, TerminationGracePeriodSeconds: &gracePeriod, NodeName: nodeName, Containers: []kapi.Container{ { Name: podName, Image: testPodImage, ImagePullPolicy: kapi.PullIfNotPresent, }, }, }, } } func GetTestService(serviceName, podName, nodeName string) *kapi.Service { return &kapi.Service{ ObjectMeta: kapi.ObjectMeta{Name: serviceName}, Spec: kapi.ServiceSpec{ Type: kapi.ServiceTypeClusterIP, Selector: map[string]string{ networkDiagTestPodSelector: podName, }, Ports: []kapi.ServicePort{ { Protocol: kapi.ProtocolTCP, Port: testPodPort, TargetPort: intstr.FromInt(testTargetPort), }, }, }, } }