Skip to content

Commit 16f4afb

Browse files
authored
Merge pull request #107 from pohly/kind-update
prow.sh: update to kind 0.9, support Kubernetes 1.19
2 parents c3afd42 + 7bcee13 commit 16f4afb

File tree

1 file changed

+66
-92
lines changed

1 file changed

+66
-92
lines changed

Diff for: prow.sh

+66-92
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@
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".
7656
get_versioned_variable () {
7757
local var="$1"
@@ -107,9 +87,22 @@ configvar CSI_PROW_GO_VERSION_KIND "${CSI_PROW_GO_VERSION_BUILD}" "Go version fo
10787
configvar 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)"
124117
configvar 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.
137133
configvar 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"
341325
configvar 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+
504504
go_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
551567
kind: Cluster
552-
apiVersion: kind.sigs.k8s.io/v1alpha3
568+
apiVersion: kind.x-k8s.io/v1alpha4
553569
nodes:
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")
602577
EOF
603-
fi
604578

605579
info "kind-config.yaml:"
606580
cat "${CSI_PROW_WORK}/kind-config.yaml"

0 commit comments

Comments
 (0)