func doConfigMapE2EWithMappings(f *framework.Framework, uid, fsGroup int64) { var ( name = "configmap-test-volume-map-" + string(util.NewUUID()) volumeName = "configmap-volume" volumeMountPath = "/etc/configmap-volume" configMap = newConfigMap(f, name) ) By(fmt.Sprintf("Creating configMap with name %s", configMap.Name)) defer func() { By("Cleaning up the configMap") if err := f.Client.ConfigMaps(f.Namespace.Name).Delete(configMap.Name); err != nil { framework.Failf("unable to delete configMap %v: %v", configMap.Name, err) } }() var err error if configMap, err = f.Client.ConfigMaps(f.Namespace.Name).Create(configMap); err != nil { framework.Failf("unable to create test configMap %s: %v", configMap.Name, err) } pod := &api.Pod{ ObjectMeta: api.ObjectMeta{ Name: "pod-configmaps-" + string(util.NewUUID()), }, Spec: api.PodSpec{ SecurityContext: &api.PodSecurityContext{}, Volumes: []api.Volume{ { Name: volumeName, VolumeSource: api.VolumeSource{ ConfigMap: &api.ConfigMapVolumeSource{ LocalObjectReference: api.LocalObjectReference{ Name: name, }, Items: []api.KeyToPath{ { Key: "data-2", Path: "path/to/data-2", }, }, }, }, }, }, Containers: []api.Container{ { Name: "configmap-volume-test", Image: "gcr.io/google_containers/mounttest:0.6", Args: []string{"--file_content=/etc/configmap-volume/path/to/data-2"}, VolumeMounts: []api.VolumeMount{ { Name: volumeName, MountPath: volumeMountPath, ReadOnly: true, }, }, }, }, RestartPolicy: api.RestartPolicyNever, }, } if uid != 0 { pod.Spec.SecurityContext.RunAsUser = &uid } if fsGroup != 0 { pod.Spec.SecurityContext.FSGroup = &fsGroup } framework.TestContainerOutput("consume configMaps", f.Client, pod, 0, []string{ "content of file \"/etc/configmap-volume/path/to/data-2\": value-2", }, f.Namespace.Name) }
"--file_mode=/etc/secret-volume/data-1"}, VolumeMounts: []api.VolumeMount{ { Name: volumeName, MountPath: volumeMountPath, ReadOnly: true, }, }, }, }, RestartPolicy: api.RestartPolicyNever, }, } framework.TestContainerOutput("consume secrets", f.Client, pod, 0, []string{ "content of file \"/etc/secret-volume/data-1\": value-1", "mode of file \"/etc/secret-volume/data-1\": -rw-r--r--", }, f.Namespace.Name) }) It("should be consumable in multiple volumes in a pod [Conformance]", func() { // This test ensures that the same secret can be mounted in multiple // volumes in the same pod. This test case exists to prevent // regressions that break this use-case. var ( name = "secret-test-" + string(util.NewUUID()) volumeName = "secret-volume" volumeMountPath = "/etc/secret-volume" volumeName2 = "secret-volume-2" volumeMountPath2 = "/etc/secret-volume-2" secret = secretForTest(f.Namespace.Name, name) )
LocalObjectReference: api.LocalObjectReference{ Name: name, }, Key: "data-1", }, }, }, }, }, }, RestartPolicy: api.RestartPolicyNever, }, } framework.TestContainerOutput("consume configMaps", f.Client, pod, 0, []string{ "CONFIG_DATA_1=value-1", }, f.Namespace.Name) }) }) func newConfigMap(f *framework.Framework, name string) *api.ConfigMap { return &api.ConfigMap{ ObjectMeta: api.ObjectMeta{ Namespace: f.Namespace.Name, Name: name, }, Data: map[string]string{ "data-1": "value-1", "data-2": "value-2", "data-3": "value-3", },
. "github.com/onsi/ginkgo" ) var _ = framework.KubeDescribe("Docker Containers", func() { f := framework.NewDefaultFramework("containers") var c *client.Client var ns string BeforeEach(func() { c = f.Client ns = f.Namespace.Name }) It("should use the image defaults if command and args are blank [Conformance]", func() { framework.TestContainerOutput("use defaults", c, entrypointTestPod(), 0, []string{ "[/ep default arguments]", }, ns) }) It("should be able to override the image's default arguments (docker cmd) [Conformance]", func() { pod := entrypointTestPod() pod.Spec.Containers[0].Args = []string{"override", "arguments"} framework.TestContainerOutput("override arguments", c, pod, 0, []string{ "[/ep override arguments]", }, ns) }) // Note: when you override the entrypoint, the image's arguments (docker cmd) // are ignored. It("should be able to override the image's default commmand (docker entrypoint) [Conformance]", func() {
. "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = framework.KubeDescribe("Downward API volume", func() { // How long to wait for a log pod to be displayed const podLogTimeout = 45 * time.Second f := framework.NewDefaultFramework("downward-api") It("should provide podname only [Conformance]", func() { podName := "downwardapi-volume-" + string(util.NewUUID()) pod := downwardAPIVolumePodForSimpleTest(podName, "/etc/podname") framework.TestContainerOutput("downward API volume plugin", f.Client, pod, 0, []string{ fmt.Sprintf("%s\n", podName), }, f.Namespace.Name) }) It("should provide podname as non-root with fsgroup [Feature:FSGroup]", func() { podName := "metadata-volume-" + string(util.NewUUID()) uid := int64(1001) gid := int64(1234) pod := downwardAPIVolumePodForSimpleTest(podName, "/etc/podname") pod.Spec.SecurityContext = &api.PodSecurityContext{ RunAsUser: &uid, FSGroup: &gid, } framework.TestContainerOutput("downward API volume plugin", f.Client, pod, 0, []string{ fmt.Sprintf("%s\n", podName), }, f.Namespace.Name)
_ = os.Remove("/tmp/test-file") }) It("should give a volume the correct mode [Conformance]", func() { volumePath := "/test-volume" source := &api.HostPathVolumeSource{ Path: "/tmp", } pod := testPodWithHostVol(volumePath, source) pod.Spec.Containers[0].Args = []string{ fmt.Sprintf("--fs_type=%v", volumePath), fmt.Sprintf("--file_mode=%v", volumePath), } framework.TestContainerOutput("hostPath mode", c, pod, 0, []string{ "mode of file \"/test-volume\": dtrwxrwxrwx", // we expect the sticky bit (mode flag t) to be set for the dir }, namespace.Name) }) // This test requires mounting a folder into a container with write privileges. It("should support r/w", func() { volumePath := "/test-volume" filePath := path.Join(volumePath, "test-file") retryDuration := 180 source := &api.HostPathVolumeSource{ Path: "/tmp", } pod := testPodWithHostVol(volumePath, source) pod.Spec.Containers[0].Args = []string{ fmt.Sprintf("--new_file_0644=%v", filePath),
LocalObjectReference: api.LocalObjectReference{ Name: name, }, Key: "data-1", }, }, }, }, }, }, RestartPolicy: api.RestartPolicyNever, }, } framework.TestContainerOutput("consume configMaps", f.Client, pod, 0, []string{ "CONFIG_DATA_1=value-1", }, f.Namespace.Name) }) It("should be consumable in multiple volumes in the same pod", func() { var ( name = "configmap-test-volume-" + string(util.NewUUID()) volumeName = "configmap-volume" volumeMountPath = "/etc/configmap-volume" volumeName2 = "configmap-volume-2" volumeMountPath2 = "/etc/configmap-volume-2" configMap = newConfigMap(f, name) ) By(fmt.Sprintf("Creating configMap with name %s", configMap.Name)) defer func() {
func doConfigMapE2EWithoutMappings(f *framework.Framework, uid, fsGroup int64) { var ( name = "configmap-test-volume-" + string(uuid.NewUUID()) volumeName = "configmap-volume" volumeMountPath = "/etc/configmap-volume" configMap = newConfigMap(f, name) ) By(fmt.Sprintf("Creating configMap with name %s", configMap.Name)) var err error if configMap, err = f.Client.ConfigMaps(f.Namespace.Name).Create(configMap); err != nil { framework.Failf("unable to create test configMap %s: %v", configMap.Name, err) } pod := &api.Pod{ ObjectMeta: api.ObjectMeta{ Name: "pod-configmaps-" + string(uuid.NewUUID()), }, Spec: api.PodSpec{ SecurityContext: &api.PodSecurityContext{}, Volumes: []api.Volume{ { Name: volumeName, VolumeSource: api.VolumeSource{ ConfigMap: &api.ConfigMapVolumeSource{ LocalObjectReference: api.LocalObjectReference{ Name: name, }, }, }, }, }, Containers: []api.Container{ { Name: "configmap-volume-test", Image: ImageRegistry[mountTestImage], Args: []string{"--file_content=/etc/configmap-volume/data-1"}, VolumeMounts: []api.VolumeMount{ { Name: volumeName, MountPath: volumeMountPath, ReadOnly: true, }, }, }, }, RestartPolicy: api.RestartPolicyNever, }, } if uid != 0 { pod.Spec.SecurityContext.RunAsUser = &uid } if fsGroup != 0 { pod.Spec.SecurityContext.FSGroup = &fsGroup } f.PodClient().MungeSpec(pod) framework.TestContainerOutput("consume configMaps", f.Client, pod, 0, []string{ "content of file \"/etc/configmap-volume/data-1\": value-1", }, f.Namespace.Name) }