3333# The expected environment is:
3434# - $GOPATH/src/<import path> for the repository that is to be tested,
3535# with PR branch merged (when testing a PR)
36+ # - optional: bazel installed (when testing against Kubernetes master),
37+ # must be recent enough for Kubernetes master
3638# - running on linux-amd64
37- # - bazel installed (when testing against Kubernetes master), must be recent
38- # enough for Kubernetes master
3939# - kind (https://github.com/kubernetes-sigs/kind) installed
4040# - optional: Go already installed
4141
@@ -52,26 +52,6 @@ configvar () {
5252 eval echo " \$ 3:" " $1 =\$ {$1 }"
5353}
5454
55- # Takes the minor version of $CSI_PROW_KUBERNETES_VERSION and overrides it to
56- # $1 if they are equal minor versions. Ignores versions that begin with
57- # "release-".
58- override_k8s_version () {
59- local current_minor_version
60- local override_minor_version
61-
62- # Ignore: See if you can use ${variable//search/replace} instead.
63- # shellcheck disable=SC2001
64- current_minor_version=" $( echo " ${CSI_PROW_KUBERNETES_VERSION} " | sed -e ' s/\([0-9]*\)\.\([0-9]*\).*/\1\.\2/' ) "
65-
66- # Ignore: See if you can use ${variable//search/replace} instead.
67- # shellcheck disable=SC2001
68- override_minor_version=" $( echo " ${1} " | sed -e ' s/\([0-9]*\)\.\([0-9]*\).*/\1\.\2/' ) "
69- if [ " ${current_minor_version} " == " ${override_minor_version} " ]; then
70- CSI_PROW_KUBERNETES_VERSION=" $1 "
71- echo " Overriding CSI_PROW_KUBERNETES_VERSION with $1 : $CSI_PROW_KUBERNETES_VERSION "
72- fi
73- }
74-
7555# Prints the value of a variable + version suffix, falling back to variable + "LATEST".
7656get_versioned_variable () {
7757 local var=" $1 "
@@ -107,9 +87,22 @@ configvar CSI_PROW_GO_VERSION_KIND "${CSI_PROW_GO_VERSION_BUILD}" "Go version fo
10787configvar CSI_PROW_GO_VERSION_GINKGO " ${CSI_PROW_GO_VERSION_BUILD} " " Go version for building ginkgo" # depends on CSI_PROW_GINKGO_VERSION below
10888
10989# kind version to use. If the pre-installed version is different,
110- # the desired version is downloaded from https://github.com/kubernetes-sigs/kind/releases/download/
90+ # the desired version is downloaded from https://github.com/kubernetes-sigs/kind/releases
11191# (if available), otherwise it is built from source.
112- configvar CSI_PROW_KIND_VERSION " v0.6.0" " kind"
92+ configvar CSI_PROW_KIND_VERSION " v0.9.0" " kind"
93+
94+ # kind images to use. Must match the kind version.
95+ # The release notes of each kind release list the supported images.
96+ configvar CSI_PROW_KIND_IMAGES " kindest/node:v1.19.1@sha256:98cf5288864662e37115e362b23e4369c8c4a408f99cbc06e58ac30ddc721600
97+ kindest/node:v1.18.8@sha256:f4bcc97a0ad6e7abaf3f643d890add7efe6ee4ab90baeb374b4f41a4c95567eb
98+ kindest/node:v1.17.11@sha256:5240a7a2c34bf241afb54ac05669f8a46661912eab05705d660971eeb12f6555
99+ kindest/node:v1.16.15@sha256:a89c771f7de234e6547d43695c7ab047809ffc71a0c3b65aa54eda051c45ed20
100+ kindest/node:v1.15.12@sha256:d9b939055c1e852fe3d86955ee24976cab46cba518abcb8b13ba70917e6547a6
101+ kindest/node:v1.14.10@sha256:ce4355398a704fca68006f8a29f37aafb49f8fc2f64ede3ccd0d9198da910146
102+ kindest/node:v1.13.12@sha256:1c1a48c2bfcbae4d5f4fa4310b5ed10756facad0b7a2ca93c7a4b5bae5db29f5" " kind images"
103+
104+ # Use kind node-image --type=bazel by default, but allow to disable that.
105+ configvar CSI_PROW_USE_BAZEL true " use Bazel during 'kind node-image' invocation"
113106
114107# ginkgo test runner version to use. If the pre-installed version is
115108# different, the desired version is built from source.
@@ -124,10 +117,13 @@ configvar CSI_PROW_GINKO_PARALLEL "-p" "Ginko parallelism parameter(s)"
124117configvar CSI_PROW_BUILD_JOB true " building code in repo enabled"
125118
126119# Kubernetes version to test against. This must be a version number
127- # (like 1.13.3) for which there is a pre-built kind image (see
128- # https://hub.docker.com/r/kindest/node/tags), "latest" (builds
129- # Kubernetes from the master branch) or "release-x.yy" (builds
130- # Kubernetes from a release branch).
120+ # (like 1.13.3), "latest" (builds Kubernetes from the master branch)
121+ # or "release-x.yy" (builds Kubernetes from a release branch).
122+ #
123+ # The patch version is only relevant for picking the E2E test suite
124+ # that is used for testing. The script automatically picks
125+ # the kind images for the major/minor version of Kubernetes
126+ # that the kind release supports.
131127#
132128# This can also be a version that was not released yet at the time
133129# that the settings below were chose. The script will then
@@ -136,16 +132,6 @@ configvar CSI_PROW_BUILD_JOB true "building code in repo enabled"
136132# deprecating or changing the implementation of an alpha feature.
137133configvar CSI_PROW_KUBERNETES_VERSION 1.17.0 " Kubernetes"
138134
139- # This is a hack to workaround the issue that each version
140- # of kind currently only supports specific patch versions of
141- # Kubernetes. We need to override CSI_PROW_KUBERNETES_VERSION
142- # passed in by our CI/pull jobs to the versions that
143- # kind v0.5.0 supports.
144- #
145- # If the version is prefixed with "release-", then nothing
146- # is overridden.
147- override_k8s_version " 1.15.3"
148-
149135# CSI_PROW_KUBERNETES_VERSION reduced to first two version numbers and
150136# with underscore (1_13 instead of 1.13.3) and in uppercase (LATEST
151137# instead of latest).
@@ -335,9 +321,7 @@ configvar CSI_PROW_E2E_ALPHA "$(get_versioned_variable CSI_PROW_E2E_ALPHA "${csi
335321# kubernetes-csi components must be updated, either by disabling
336322# the failing test for "latest" or by updating the test and not running
337323# it anymore for older releases.
338- # TODO: add new CSI_PROW_ALPHA_GATES_xxx entry for future Kubernetes releases and
339- # add new gates to CSI_PROW_E2E_ALPHA_GATES_LATEST.
340- configvar CSI_PROW_E2E_ALPHA_GATES_LATEST ' ' " alpha feature gates for latest Kubernetes"
324+ configvar CSI_PROW_E2E_ALPHA_GATES_LATEST ' GenericEphemeralVolume=true,CSIStorageCapacity=true' " alpha feature gates for latest Kubernetes"
341325configvar CSI_PROW_E2E_ALPHA_GATES " $( get_versioned_variable CSI_PROW_E2E_ALPHA_GATES " ${csi_prow_kubernetes_version_suffix} " ) " " alpha E2E feature gates"
342326
343327# Which external-snapshotter tag to use for the snapshotter CRD and snapshot-controller deployment
@@ -501,6 +485,22 @@ list_gates () (
501485 done
502486)
503487
488+ # Turn feature gates in the format foo=true,bar=false into
489+ # a YAML map with the corresponding API groups for use
490+ # with https://kind.sigs.k8s.io/docs/user/configuration/#runtime-config
491+ list_api_groups () (
492+ set -f; IFS=' ,'
493+ # Ignore: Double quote to prevent globbing and word splitting.
494+ # shellcheck disable=SC2086
495+ set -- $1
496+ while [ " $1 " ]; do
497+ if [ " $1 " = ' CSIStorageCapacity=true' ]; then
498+ echo ' "storage.k8s.io/v1alpha1": "true"'
499+ fi
500+ shift
501+ done
502+ )
503+
504504go_version_for_kubernetes () (
505505 local path=" $1 "
506506 local version=" $2 "
@@ -530,77 +530,51 @@ start_cluster () {
530530 run kind delete cluster --name=csi-prow || die " kind delete failed"
531531 fi
532532
533- # Build from source?
534- if [[ " ${CSI_PROW_KUBERNETES_VERSION} " =~ ^release-| ^latest$ ]]; then
533+ # Try to find a pre-built kind image if asked to use a specific version.
534+ if ! [[ " ${CSI_PROW_KUBERNETES_VERSION} " =~ ^release-| ^latest$ ]]; then
535+ # Ignore: See if you can use ${variable//search/replace} instead.
536+ # shellcheck disable=SC2001
537+ major_minor=$( echo " ${CSI_PROW_KUBERNETES_VERSION} " | sed -e ' s/^\([0-9]*\)\.\([0-9]*\).*/\1.\2/' )
538+ for i in ${CSI_PROW_KIND_IMAGES} ; do
539+ if echo " $i " | grep -q " kindest/node:v${major_minor} " ; then
540+ image=" $i "
541+ break
542+ fi
543+ done
544+ fi
545+
546+ # Need to build from source?
547+ if ! [ " $image " ]; then
535548 if ! ${csi_prow_kind_have_kubernetes} ; then
536549 local version=" ${CSI_PROW_KUBERNETES_VERSION} "
537550 if [ " $version " = " latest" ]; then
538551 version=master
539552 fi
553+ if ${CSI_PROW_USE_BAZEL} ; then
554+ type=" bazel"
555+ else
556+ type=" docker"
557+ fi
540558 git_clone_branch https://github.com/kubernetes/kubernetes " ${CSI_PROW_WORK} /src/kubernetes" " $version " || die " checking out Kubernetes $version failed"
541559
542560 go_version=" $( go_version_for_kubernetes " ${CSI_PROW_WORK} /src/kubernetes" " $version " ) " || die " cannot proceed without knowing Go version for Kubernetes"
543- run_with_go " $go_version " kind build node-image --type bazel -- image csiprow/node:latest --kube-root " ${CSI_PROW_WORK} /src/kubernetes" || die " 'kind build node-image' failed"
561+ run_with_go " $go_version " kind build node-image --image csiprow/node:latest --type= " $type " --kube-root " ${CSI_PROW_WORK} /src/kubernetes" || die " 'kind build node-image' failed"
544562 csi_prow_kind_have_kubernetes=true
545563 fi
546564 image=" csiprow/node:latest"
547- else
548- image=" kindest/node:v${CSI_PROW_KUBERNETES_VERSION} "
549565 fi
550566 cat > " ${CSI_PROW_WORK} /kind-config.yaml" << EOF
551567kind: Cluster
552- apiVersion: kind.sigs. k8s.io/v1alpha3
568+ apiVersion: kind.x- k8s.io/v1alpha4
553569nodes:
554570- role: control-plane
555571- role: worker
556572- role: worker
557- EOF
558-
559- # kubeadm has API dependencies between apiVersion and Kubernetes version
560- # 1.15+ requires kubeadm.k8s.io/v1beta2
561- # We only run alpha tests against master so we don't need to maintain
562- # different patches for different Kubernetes releases.
563- if [[ -n " $gates " ]]; then
564- cat >> " ${CSI_PROW_WORK} /kind-config.yaml" << EOF
565- kubeadmConfigPatches:
566- - |
567- apiVersion: kubeadm.k8s.io/v1beta2
568- kind: ClusterConfiguration
569- metadata:
570- name: config
571- apiServer:
572- extraArgs:
573- "feature-gates": "$gates "
574- controllerManager:
575- extraArgs:
576- "feature-gates": "$gates "
577- scheduler:
578- extraArgs:
579- "feature-gates": "$gates "
580- - |
581- apiVersion: kubeadm.k8s.io/v1beta2
582- kind: InitConfiguration
583- metadata:
584- name: config
585- nodeRegistration:
586- kubeletExtraArgs:
587- "feature-gates": "$gates "
588- - |
589- apiVersion: kubelet.config.k8s.io/v1beta1
590- kind: KubeletConfiguration
591- metadata:
592- name: config
593- featureGates:
594- $( list_gates " $gates " )
595- - |
596- apiVersion: kubeproxy.config.k8s.io/v1alpha1
597- kind: KubeProxyConfiguration
598- metadata:
599- name: config
600- featureGates:
573+ featureGates:
601574$( list_gates " $gates " )
575+ runtimeConfig:
576+ $( list_api_groups " $gates " )
602577EOF
603- fi
604578
605579 info " kind-config.yaml:"
606580 cat " ${CSI_PROW_WORK} /kind-config.yaml"
0 commit comments