2015-06-13 03:02:29 +00:00
/ *
2016-07-22 07:02:27 +00:00
Copyright 2016 The Kubernetes Authors .
2015-06-13 03:02:29 +00:00
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
2016-07-22 07:02:27 +00:00
package common
2015-06-13 03:02:29 +00:00
import (
2017-06-22 18:24:23 +00:00
"k8s.io/api/core/v1"
2017-01-17 03:38:19 +00:00
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2017-01-24 14:35:22 +00:00
"k8s.io/apimachinery/pkg/util/uuid"
2016-04-07 17:21:31 +00:00
"k8s.io/kubernetes/test/e2e/framework"
2017-07-21 14:42:03 +00:00
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
2015-06-13 03:02:29 +00:00
)
2016-02-09 07:30:32 +00:00
// These tests exercise the Kubernetes expansion syntax $(VAR).
2017-09-29 20:24:33 +00:00
// For more information, see:
// https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node/expansion.md
2016-04-07 17:21:31 +00:00
var _ = framework . KubeDescribe ( "Variable Expansion" , func ( ) {
f := framework . NewDefaultFramework ( "var-expansion" )
2015-06-13 03:02:29 +00:00
2017-10-20 20:29:25 +00:00
/ *
2018-02-27 22:57:56 +00:00
Release : v1 .9
Testname : Environment variables , expansion
Description : Create a Pod with environment variables . Environment variables defined using previously defined environment variables MUST expand to proper values .
2017-10-20 20:29:25 +00:00
* /
2018-05-22 01:09:33 +00:00
framework . ConformanceIt ( "should allow composing env vars into new env vars [NodeConformance]" , func ( ) {
2016-07-26 15:13:18 +00:00
podName := "var-expansion-" + string ( uuid . NewUUID ( ) )
2016-11-18 20:55:17 +00:00
pod := & v1 . Pod {
2017-01-17 03:38:19 +00:00
ObjectMeta : metav1 . ObjectMeta {
2015-06-13 03:02:29 +00:00
Name : podName ,
Labels : map [ string ] string { "name" : podName } ,
} ,
2016-11-18 20:55:17 +00:00
Spec : v1 . PodSpec {
Containers : [ ] v1 . Container {
2015-06-13 03:02:29 +00:00
{
Name : "dapi-container" ,
2017-08-29 08:32:08 +00:00
Image : busyboxImage ,
2015-06-13 03:02:29 +00:00
Command : [ ] string { "sh" , "-c" , "env" } ,
2016-11-18 20:55:17 +00:00
Env : [ ] v1 . EnvVar {
2015-06-13 03:02:29 +00:00
{
Name : "FOO" ,
Value : "foo-value" ,
} ,
{
Name : "BAR" ,
Value : "bar-value" ,
} ,
{
Name : "FOOBAR" ,
Value : "$(FOO);;$(BAR)" ,
} ,
} ,
} ,
} ,
2016-11-18 20:55:17 +00:00
RestartPolicy : v1 . RestartPolicyNever ,
2015-06-13 03:02:29 +00:00
} ,
}
2016-04-07 17:21:31 +00:00
f . TestContainerOutput ( "env composition" , pod , 0 , [ ] string {
2015-06-13 03:02:29 +00:00
"FOO=foo-value" ,
"BAR=bar-value" ,
"FOOBAR=foo-value;;bar-value" ,
2015-07-09 11:56:19 +00:00
} )
2015-06-13 03:02:29 +00:00
} )
2017-10-20 20:29:25 +00:00
/ *
2018-02-27 22:57:56 +00:00
Release : v1 .9
Testname : Environment variables , command expansion
Description : Create a Pod with environment variables and container command using them . Container command using the defined environment variables MUST expand to proper values .
2017-10-20 20:29:25 +00:00
* /
2018-05-22 01:09:33 +00:00
framework . ConformanceIt ( "should allow substituting values in a container's command [NodeConformance]" , func ( ) {
2016-07-26 15:13:18 +00:00
podName := "var-expansion-" + string ( uuid . NewUUID ( ) )
2016-11-18 20:55:17 +00:00
pod := & v1 . Pod {
2017-01-17 03:38:19 +00:00
ObjectMeta : metav1 . ObjectMeta {
2015-06-13 03:02:29 +00:00
Name : podName ,
Labels : map [ string ] string { "name" : podName } ,
} ,
2016-11-18 20:55:17 +00:00
Spec : v1 . PodSpec {
Containers : [ ] v1 . Container {
2015-06-13 03:02:29 +00:00
{
Name : "dapi-container" ,
2017-08-29 08:32:08 +00:00
Image : busyboxImage ,
2015-06-13 03:02:29 +00:00
Command : [ ] string { "sh" , "-c" , "TEST_VAR=wrong echo \"$(TEST_VAR)\"" } ,
2016-11-18 20:55:17 +00:00
Env : [ ] v1 . EnvVar {
2015-06-13 03:02:29 +00:00
{
Name : "TEST_VAR" ,
Value : "test-value" ,
} ,
} ,
} ,
} ,
2016-11-18 20:55:17 +00:00
RestartPolicy : v1 . RestartPolicyNever ,
2015-06-13 03:02:29 +00:00
} ,
}
2016-04-07 17:21:31 +00:00
f . TestContainerOutput ( "substitution in container's command" , pod , 0 , [ ] string {
2015-06-13 03:02:29 +00:00
"test-value" ,
2015-07-09 11:56:19 +00:00
} )
2015-06-13 03:02:29 +00:00
} )
2017-10-20 20:29:25 +00:00
/ *
2018-02-27 22:57:56 +00:00
Release : v1 .9
Testname : Environment variables , command argument expansion
Description : Create a Pod with environment variables and container command arguments using them . Container command arguments using the defined environment variables MUST expand to proper values .
2017-10-20 20:29:25 +00:00
* /
2018-05-22 01:09:33 +00:00
framework . ConformanceIt ( "should allow substituting values in a container's args [NodeConformance]" , func ( ) {
2016-07-26 15:13:18 +00:00
podName := "var-expansion-" + string ( uuid . NewUUID ( ) )
2016-11-18 20:55:17 +00:00
pod := & v1 . Pod {
2017-01-17 03:38:19 +00:00
ObjectMeta : metav1 . ObjectMeta {
2015-06-13 03:02:29 +00:00
Name : podName ,
Labels : map [ string ] string { "name" : podName } ,
} ,
2016-11-18 20:55:17 +00:00
Spec : v1 . PodSpec {
Containers : [ ] v1 . Container {
2015-06-13 03:02:29 +00:00
{
Name : "dapi-container" ,
2017-08-29 08:32:08 +00:00
Image : busyboxImage ,
2015-06-13 03:02:29 +00:00
Command : [ ] string { "sh" , "-c" } ,
Args : [ ] string { "TEST_VAR=wrong echo \"$(TEST_VAR)\"" } ,
2016-11-18 20:55:17 +00:00
Env : [ ] v1 . EnvVar {
2015-06-13 03:02:29 +00:00
{
Name : "TEST_VAR" ,
Value : "test-value" ,
} ,
} ,
} ,
} ,
2016-11-18 20:55:17 +00:00
RestartPolicy : v1 . RestartPolicyNever ,
2015-06-13 03:02:29 +00:00
} ,
}
2016-04-07 17:21:31 +00:00
f . TestContainerOutput ( "substitution in container's args" , pod , 0 , [ ] string {
2015-06-13 03:02:29 +00:00
"test-value" ,
2015-07-09 11:56:19 +00:00
} )
2015-06-13 03:02:29 +00:00
} )
2017-07-21 14:42:03 +00:00
/ *
Testname : var - expansion - subpath
Description : Make sure a container ' s subpath can be set using an
expansion of environment variables .
* /
It ( "should allow substituting values in a volume subpath [Feature:VolumeSubpathEnvExpansion][NodeAlphaFeature:VolumeSubpathEnvExpansion]" , func ( ) {
podName := "var-expansion-" + string ( uuid . NewUUID ( ) )
pod := & v1 . Pod {
ObjectMeta : metav1 . ObjectMeta {
Name : podName ,
Labels : map [ string ] string { "name" : podName } ,
} ,
Spec : v1 . PodSpec {
Containers : [ ] v1 . Container {
{
Name : "dapi-container" ,
Image : busyboxImage ,
Command : [ ] string { "sh" , "-c" , "test -d /testcontainer/" + podName + ";echo $?" } ,
Env : [ ] v1 . EnvVar {
{
Name : "POD_NAME" ,
Value : podName ,
} ,
} ,
VolumeMounts : [ ] v1 . VolumeMount {
{
Name : "workdir1" ,
MountPath : "/logscontainer" ,
SubPath : "$(POD_NAME)" ,
} ,
{
Name : "workdir2" ,
MountPath : "/testcontainer" ,
} ,
} ,
} ,
} ,
RestartPolicy : v1 . RestartPolicyNever ,
Volumes : [ ] v1 . Volume {
{
Name : "workdir1" ,
VolumeSource : v1 . VolumeSource {
HostPath : & v1 . HostPathVolumeSource { Path : "/tmp" } ,
} ,
} ,
{
Name : "workdir2" ,
VolumeSource : v1 . VolumeSource {
HostPath : & v1 . HostPathVolumeSource { Path : "/tmp" } ,
} ,
} ,
} ,
} ,
}
f . TestContainerOutput ( "substitution in volume subpath" , pod , 0 , [ ] string {
"0" ,
} )
} )
/ *
Testname : var - expansion - subpath - with - backticks
Description : Make sure a container ' s subpath can not be set using an
expansion of environment variables when backticks are supplied .
* /
It ( "should fail substituting values in a volume subpath with backticks [Feature:VolumeSubpathEnvExpansion][NodeAlphaFeature:VolumeSubpathEnvExpansion][Slow]" , func ( ) {
podName := "var-expansion-" + string ( uuid . NewUUID ( ) )
pod := & v1 . Pod {
ObjectMeta : metav1 . ObjectMeta {
Name : podName ,
Labels : map [ string ] string { "name" : podName } ,
} ,
Spec : v1 . PodSpec {
Containers : [ ] v1 . Container {
{
Name : "dapi-container" ,
Image : busyboxImage ,
Env : [ ] v1 . EnvVar {
{
Name : "POD_NAME" ,
Value : ".." ,
} ,
} ,
VolumeMounts : [ ] v1 . VolumeMount {
{
Name : "workdir1" ,
MountPath : "/logscontainer" ,
SubPath : "$(POD_NAME)" ,
} ,
} ,
} ,
} ,
RestartPolicy : v1 . RestartPolicyNever ,
Volumes : [ ] v1 . Volume {
{
Name : "workdir1" ,
VolumeSource : v1 . VolumeSource {
EmptyDir : & v1 . EmptyDirVolumeSource { } ,
} ,
} ,
} ,
} ,
}
// Pod should fail
2018-06-04 15:11:28 +00:00
testPodFailSubpath ( f , pod )
2017-07-21 14:42:03 +00:00
} )
/ *
Testname : var - expansion - subpath - with - absolute - path
Description : Make sure a container ' s subpath can not be set using an
2018-06-04 15:11:28 +00:00
expansion of environment variables when absolute path is supplied .
2017-07-21 14:42:03 +00:00
* /
It ( "should fail substituting values in a volume subpath with absolute path [Feature:VolumeSubpathEnvExpansion][NodeAlphaFeature:VolumeSubpathEnvExpansion][Slow]" , func ( ) {
podName := "var-expansion-" + string ( uuid . NewUUID ( ) )
pod := & v1 . Pod {
ObjectMeta : metav1 . ObjectMeta {
Name : podName ,
Labels : map [ string ] string { "name" : podName } ,
} ,
Spec : v1 . PodSpec {
Containers : [ ] v1 . Container {
{
Name : "dapi-container" ,
Image : busyboxImage ,
Env : [ ] v1 . EnvVar {
{
Name : "POD_NAME" ,
Value : "/tmp" ,
} ,
} ,
VolumeMounts : [ ] v1 . VolumeMount {
{
Name : "workdir1" ,
MountPath : "/logscontainer" ,
SubPath : "$(POD_NAME)" ,
} ,
} ,
} ,
} ,
RestartPolicy : v1 . RestartPolicyNever ,
Volumes : [ ] v1 . Volume {
{
Name : "workdir1" ,
VolumeSource : v1 . VolumeSource {
EmptyDir : & v1 . EmptyDirVolumeSource { } ,
} ,
} ,
} ,
} ,
}
// Pod should fail
2018-06-04 15:11:28 +00:00
testPodFailSubpath ( f , pod )
2017-07-21 14:42:03 +00:00
} )
2015-06-13 03:02:29 +00:00
} )
2017-07-21 14:42:03 +00:00
2018-06-04 15:11:28 +00:00
func testPodFailSubpath ( f * framework . Framework , pod * v1 . Pod ) {
2017-07-21 14:42:03 +00:00
pod , err := f . ClientSet . CoreV1 ( ) . Pods ( f . Namespace . Name ) . Create ( pod )
Expect ( err ) . ToNot ( HaveOccurred ( ) , "while creating pod" )
defer func ( ) {
framework . DeletePodWithWait ( f , f . ClientSet , pod )
} ( )
2018-06-01 11:34:14 +00:00
err = framework . WaitTimeoutForPodRunningInNamespace ( f . ClientSet , pod . Name , pod . Namespace , framework . PodStartShortTimeout )
2017-07-21 14:42:03 +00:00
Expect ( err ) . To ( HaveOccurred ( ) , "while waiting for pod to be running" )
}