@@ -202,10 +202,31 @@ configvar CSI_PROW_SANITY_CONTAINER "hostpath" "Kubernetes container with CSI dr
202
202
# is off by default. A CSI driver can change that default in its .prow.sh
203
203
# by setting CSI_PROW_TESTS_SANITY.
204
204
configvar CSI_PROW_TESTS " unit parallel serial parallel-alpha serial-alpha ${CSI_PROW_TESTS_SANITY} " " tests to run"
205
- test_enabled () {
206
- echo " ${CSI_PROW_TESTS} " | grep -q -w -e " $1 "
205
+ tests_enabled () {
206
+ local t1 t2
207
+ # We want word-splitting here, so ignore: Quote to prevent word splitting, or split robustly with mapfile or read -a.
208
+ # shellcheck disable=SC2206
209
+ local tests=(${CSI_PROW_TESTS} )
210
+ for t1 in " $@ " ; do
211
+ for t2 in " ${tests[@]} " ; do
212
+ if [ " $t1 " = " $t2 " ]; then
213
+ return
214
+ fi
215
+ done
216
+ done
217
+ return 1
218
+ }
219
+ tests_need_kind () {
220
+ tests_enabled " sanity" " parallel" " serial" " serial-alpha" " parallel-alpha"
221
+ }
222
+ tests_need_non_alpha_cluster () {
223
+ tests_enabled " sanity" " parallel" " serial"
224
+ }
225
+ tests_need_alpha_cluster () {
226
+ tests_enabled " parallel-alpha" " serial-alpha"
207
227
}
208
228
229
+
209
230
# Serial vs. parallel is always determined by these regular expressions.
210
231
# Individual regular expressions are seperated by spaces for readability
211
232
# and expected to not contain spaces. Use dots instead. The complete
@@ -246,8 +267,9 @@ configvar CSI_PROW_E2E_ALPHA "$(get_versioned_variable CSI_PROW_E2E_ALPHA "${csi
246
267
# the failing test for "latest" or by updating the test and not running
247
268
# it anymore for older releases.
248
269
configvar CSI_PROW_E2E_ALPHA_GATES_1_13 ' VolumeSnapshotDataSource=true,BlockVolume=true,CSIBlockVolume=true' " alpha feature gates for Kubernetes 1.13"
270
+ configvar CSI_PROW_E2E_ALPHA_GATES_1_14 ' VolumeSnapshotDataSource=true,ExpandCSIVolumes=true' " alpha feature gates for Kubernetes 1.14"
249
271
# TODO: add new CSI_PROW_ALPHA_GATES entry for future Kubernetes releases
250
- configvar CSI_PROW_E2E_ALPHA_GATES_LATEST ' VolumeSnapshotDataSource =true' " alpha feature gates for latest Kubernetes"
272
+ configvar CSI_PROW_E2E_ALPHA_GATES_LATEST ' AllAlpha=true,ExpandCSIVolumes =true' " alpha feature gates for latest Kubernetes"
251
273
configvar CSI_PROW_E2E_ALPHA_GATES " $( get_versioned_variable CSI_PROW_E2E_ALPHA_GATES " ${csi_prow_kubernetes_version_suffix} " ) " " alpha E2E feature gates"
252
274
253
275
# Some tests are known to be unusable in a KinD cluster. For example,
@@ -466,7 +488,17 @@ $(list_gates "$gates")
466
488
featureGates:
467
489
$( list_gates " $gates " )
468
490
EOF
469
- run kind create cluster --name csi-prow --config " ${CSI_PROW_WORK} /kind-config.yaml" --wait 5m --image " $image " || die " 'kind create cluster' failed"
491
+ info " kind-config.yaml:"
492
+ cat " ${CSI_PROW_WORK} /kind-config.yaml"
493
+ if ! run kind create cluster --name csi-prow --config " ${CSI_PROW_WORK} /kind-config.yaml" --wait 5m --image " $image " ; then
494
+ warn " Cluster creation failed. Will try again with higher verbosity."
495
+ info " Available Docker images:"
496
+ docker image ls
497
+ if ! run kind --loglevel debug create cluster --retain --name csi-prow --config " ${CSI_PROW_WORK} /kind-config.yaml" --wait 5m --image " $image " ; then
498
+ run kind export logs --name csi-prow " $ARTIFACTS /kind-cluster"
499
+ die " Cluster creation failed again, giving up. See the 'kind-cluster' artifact directory for additional logs."
500
+ fi
501
+ fi
470
502
KUBECONFIG=" $( kind get kubeconfig-path --name=csi-prow) "
471
503
export KUBECONFIG
472
504
}
@@ -511,6 +543,15 @@ install_hostpath () {
511
543
return 1
512
544
fi
513
545
546
+ if ${CSI_PROW_BUILD_JOB} ; then
547
+ # Ignore: Double quote to prevent globbing and word splitting.
548
+ # Ignore: To read lines rather than words, pipe/redirect to a 'while read' loop.
549
+ # shellcheck disable=SC2086 disable=SC2013
550
+ for i in $( grep ' ^\s*CMDS\s*=' Makefile | sed -e ' s/\s*CMDS\s*=//' ) ; do
551
+ kind load docker-image --name csi-prow $i :csiprow || die " could not load the $i :latest image into the kind cluster"
552
+ done
553
+ fi
554
+
514
555
if deploy_hostpath=" $( find_deployment " $( pwd) /deploy" ) " ; then
515
556
:
516
557
elif [ " ${CSI_PROW_HOSTPATH_REPO} " = " none" ]; then
@@ -609,18 +650,18 @@ install_sanity () (
609
650
610
651
# Whether the hostpath driver supports raw block devices depends on which version
611
652
# we are testing. It would be much nicer if we could determine that by querying the
612
- # installed driver.
653
+ # installed driver's capabilities instead of having to do a version check .
613
654
hostpath_supports_block () {
614
- if [ -e " cmd/hostpathplugin " ] && ${CSI_PROW_BUILD_JOB} ; then
615
- # The assumption is that if we build the hostpath driver, then it is
616
- # a current version with support.
617
- echo true
618
- return
619
- fi
620
-
621
- case " ${CSI_PROW_DEPLOYMENT} " in kubernetes-1.13) echo false ;; # wasn't supported and probably won't be backported
622
- * ) echo true ;; # probably all other deployments have a recent driver
623
- esac
655
+ local result
656
+ result= " $( docker exec csi-prow-control-plane docker image ls --format= ' {{.Repository}} {{.Tag}} {{.ID}} ' | grep hostpath | while read -r repo tag id ; do
657
+ if [ " $tag " == " v1.0.1 " ] ; then
658
+ # Old version because the revision label is missing: didn't have support yet.
659
+ echo " false "
660
+ return
661
+ fi
662
+ done) "
663
+ # If not set, then it must be a newer driver with support.
664
+ echo " ${result :- true} "
624
665
}
625
666
626
667
# Captures pod output while running some other command.
@@ -826,7 +867,7 @@ main () {
826
867
# might have been minor or unavoidable, for example when experimenting with
827
868
# changes in "release-tools" in a PR (that fails the "is release-tools unmodified"
828
869
# test).
829
- if test_enabled " unit" ; then
870
+ if tests_enabled " unit" ; then
830
871
if ! run_with_go " ${CSI_PROW_GO_VERSION_BUILD} " make -k test 2>&1 | make_test_to_junit; then
831
872
warn " 'make test' failed, proceeding anyway"
832
873
ret=1
@@ -836,102 +877,99 @@ main () {
836
877
run_with_go " ${CSI_PROW_GO_VERSION_BUILD} " make container || die " 'make container' failed"
837
878
fi
838
879
839
- install_kind || die " installing kind failed "
840
- start_cluster || die " starting the cluster failed"
880
+ if tests_need_kind ; then
881
+ install_kind || die " installing kind failed"
841
882
842
- if ${CSI_PROW_BUILD_JOB} ; then
843
- cmds=" $( grep ' ^\s*CMDS\s*=' Makefile | sed -e ' s/\s*CMDS\s*=//' ) "
844
- # Get the image that was just built (if any) from the
845
- # top-level Makefile CMDS variable and set the
846
- # deploy-hostpath.sh env variables for it. We also need to
847
- # side-load those images into the cluster.
848
- for i in $cmds ; do
849
- e=$( echo " $i " | tr ' [:lower:]' ' [:upper:]' | tr - _)
850
- images=" $images ${e} _REGISTRY=none ${e} _TAG=csiprow"
851
-
852
- # We must avoid the tag "latest" because that implies
853
- # always pulling the image
854
- # (https://github.com/kubernetes-sigs/kind/issues/328).
855
- docker tag " $i :latest" " $i :csiprow" || die " tagging the locally built container image for $i failed"
856
- kind load docker-image --name csi-prow " $i :csiprow" || die " could not load the $i :latest image into the kind cluster"
857
- done
883
+ if ${CSI_PROW_BUILD_JOB} ; then
884
+ cmds=" $( grep ' ^\s*CMDS\s*=' Makefile | sed -e ' s/\s*CMDS\s*=//' ) "
885
+ # Get the image that was just built (if any) from the
886
+ # top-level Makefile CMDS variable and set the
887
+ # deploy-hostpath.sh env variables for it. We also need to
888
+ # side-load those images into the cluster.
889
+ for i in $cmds ; do
890
+ e=$( echo " $i " | tr ' [:lower:]' ' [:upper:]' | tr - _)
891
+ images=" $images ${e} _REGISTRY=none ${e} _TAG=csiprow"
892
+
893
+ # We must avoid the tag "latest" because that implies
894
+ # always pulling the image
895
+ # (https://github.com/kubernetes-sigs/kind/issues/328).
896
+ docker tag " $i :latest" " $i :csiprow" || die " tagging the locally built container image for $i failed"
897
+ done
858
898
859
- if [ -e deploy/kubernetes/rbac.yaml ]; then
860
- # This is one of those components which has its own RBAC rules (like external-provisioner).
861
- # We are testing a locally built image and also want to test with the the current,
862
- # potentially modified RBAC rules.
863
- if [ " $( echo " $cmds " | wc -w) " != 1 ]; then
864
- die " ambiguous deploy/kubernetes/rbac.yaml: need exactly one command, got: $cmds "
899
+ if [ -e deploy/kubernetes/rbac.yaml ]; then
900
+ # This is one of those components which has its own RBAC rules (like external-provisioner).
901
+ # We are testing a locally built image and also want to test with the the current,
902
+ # potentially modified RBAC rules.
903
+ if [ " $( echo " $cmds " | wc -w) " != 1 ]; then
904
+ die " ambiguous deploy/kubernetes/rbac.yaml: need exactly one command, got: $cmds "
905
+ fi
906
+ e=$( echo " $cmds " | tr ' [:lower:]' ' [:upper:]' | tr - _)
907
+ images=" $images ${e} _RBAC=$( pwd) /deploy/kubernetes/rbac.yaml"
865
908
fi
866
- e=$( echo " $cmds " | tr ' [:lower:]' ' [:upper:]' | tr - _)
867
- images=" $images ${e} _RBAC=$( pwd) /deploy/kubernetes/rbac.yaml"
868
909
fi
869
- fi
870
-
871
- # Installing the driver might be disabled, in which case we bail out early.
872
- if ! install_hostpath " $images " ; then
873
- info " hostpath driver installation disabled, skipping E2E testing"
874
- return " $ret "
875
- fi
876
-
877
- collect_cluster_info
878
-
879
- if test_enabled " sanity" ; then
880
- if ! run_sanity; then
881
- ret=1
882
- fi
883
- fi
884
-
885
- if test_enabled " parallel" ; then
886
- # Ignore: Double quote to prevent globbing and word splitting.
887
- # shellcheck disable=SC2086
888
- if ! run_e2e parallel ${CSI_PROW_GINKO_PARALLEL} \
889
- -focus=" External.Storage" \
890
- -skip=" $( regex_join " ${CSI_PROW_E2E_SERIAL} " " ${CSI_PROW_E2E_ALPHA} " " ${CSI_PROW_E2E_SKIP} " ) " ; then
891
- warn " E2E parallel failed"
892
- ret=1
893
- fi
894
- fi
895
-
896
- if test_enabled " serial" ; then
897
- if ! run_e2e serial \
898
- -focus=" External.Storage.*($( regex_join " ${CSI_PROW_E2E_SERIAL} " ) )" \
899
- -skip=" $( regex_join " ${CSI_PROW_E2E_ALPHA} " " ${CSI_PROW_E2E_SKIP} " ) " ; then
900
- warn " E2E serial failed"
901
- ret=1
902
- fi
903
- fi
904
910
905
- if (test_enabled " parallel-alpha" || test_enabled " serial-alpha" ) && [ " ${CSI_PROW_E2E_ALPHA_GATES} " ]; then
906
- # Need to (re)create the cluster.
907
- start_cluster " ${CSI_PROW_E2E_ALPHA_GATES} " || die " starting alpha cluster failed"
908
- if ${CSI_PROW_BUILD_JOB} ; then
909
- # Ignore: Double quote to prevent globbing and word splitting.
910
- # Ignore: To read lines rather than words, pipe/redirect to a 'while read' loop.
911
- # shellcheck disable=SC2086 disable=SC2013
912
- for i in $( grep ' ^\s*CMDS\s*=' Makefile | sed -e ' s/\s*CMDS\s*=//' ) ; do
913
- kind load docker-image --name csi-prow $i :csiprow || die " could not load the $i :latest image into the kind cluster"
914
- done
915
- fi
916
- install_hostpath " $images " || die " hostpath driver installation failed unexpectedly on alpha cluster"
917
-
918
- if test_enabled " parallel-alpha" ; then
919
- # Ignore: Double quote to prevent globbing and word splitting.
920
- # shellcheck disable=SC2086
921
- if ! run_e2e parallel-alpha ${CSI_PROW_GINKO_PARALLEL} \
922
- -focus=" External.Storage.*($( regex_join " ${CSI_PROW_E2E_ALPHA} " ) )" \
923
- -skip=" $( regex_join " ${CSI_PROW_E2E_SERIAL} " " ${CSI_PROW_E2E_SKIP} " ) " ; then
924
- warn " E2E parallel alpha failed"
925
- ret=1
911
+ if tests_need_non_alpha_cluster; then
912
+ start_cluster || die " starting the non-alpha cluster failed"
913
+
914
+ # Installing the driver might be disabled.
915
+ if install_hostpath " $images " ; then
916
+ collect_cluster_info
917
+
918
+ if tests_enabled " sanity" ; then
919
+ if ! run_sanity; then
920
+ ret=1
921
+ fi
922
+ fi
923
+
924
+ if tests_enabled " parallel" ; then
925
+ # Ignore: Double quote to prevent globbing and word splitting.
926
+ # shellcheck disable=SC2086
927
+ if ! run_e2e parallel ${CSI_PROW_GINKO_PARALLEL} \
928
+ -focus=" External.Storage" \
929
+ -skip=" $( regex_join " ${CSI_PROW_E2E_SERIAL} " " ${CSI_PROW_E2E_ALPHA} " " ${CSI_PROW_E2E_SKIP} " ) " ; then
930
+ warn " E2E parallel failed"
931
+ ret=1
932
+ fi
933
+ fi
934
+
935
+ if tests_enabled " serial" ; then
936
+ if ! run_e2e serial \
937
+ -focus=" External.Storage.*($( regex_join " ${CSI_PROW_E2E_SERIAL} " ) )" \
938
+ -skip=" $( regex_join " ${CSI_PROW_E2E_ALPHA} " " ${CSI_PROW_E2E_SKIP} " ) " ; then
939
+ warn " E2E serial failed"
940
+ ret=1
941
+ fi
942
+ fi
926
943
fi
927
944
fi
928
945
929
- if test_enabled " serial-alpha" ; then
930
- if ! run_e2e serial-alpha \
931
- -focus=" External.Storage.*(($( regex_join " ${CSI_PROW_E2E_SERIAL} " ) ).*($( regex_join " ${CSI_PROW_E2E_ALPHA} " ) )|($( regex_join " ${CSI_PROW_E2E_ALPHA} " ) ).*($( regex_join " ${CSI_PROW_E2E_SERIAL} " ) ))" \
932
- -skip=" $( regex_join " ${CSI_PROW_E2E_SKIP} " ) " ; then
933
- warn " E2E serial alpha failed"
934
- ret=1
946
+ if tests_need_alpha_cluster && [ " ${CSI_PROW_E2E_ALPHA_GATES} " ]; then
947
+ # Need to (re)create the cluster.
948
+ start_cluster " ${CSI_PROW_E2E_ALPHA_GATES} " || die " starting alpha cluster failed"
949
+
950
+ # Installing the driver might be disabled.
951
+ if install_hostpath " $images " ; then
952
+ collect_cluster_info
953
+
954
+ if tests_enabled " parallel-alpha" ; then
955
+ # Ignore: Double quote to prevent globbing and word splitting.
956
+ # shellcheck disable=SC2086
957
+ if ! run_e2e parallel-alpha ${CSI_PROW_GINKO_PARALLEL} \
958
+ -focus=" External.Storage.*($( regex_join " ${CSI_PROW_E2E_ALPHA} " ) )" \
959
+ -skip=" $( regex_join " ${CSI_PROW_E2E_SERIAL} " " ${CSI_PROW_E2E_SKIP} " ) " ; then
960
+ warn " E2E parallel alpha failed"
961
+ ret=1
962
+ fi
963
+ fi
964
+
965
+ if tests_enabled " serial-alpha" ; then
966
+ if ! run_e2e serial-alpha \
967
+ -focus=" External.Storage.*(($( regex_join " ${CSI_PROW_E2E_SERIAL} " ) ).*($( regex_join " ${CSI_PROW_E2E_ALPHA} " ) )|($( regex_join " ${CSI_PROW_E2E_ALPHA} " ) ).*($( regex_join " ${CSI_PROW_E2E_SERIAL} " ) ))" \
968
+ -skip=" $( regex_join " ${CSI_PROW_E2E_SKIP} " ) " ; then
969
+ warn " E2E serial alpha failed"
970
+ ret=1
971
+ fi
972
+ fi
935
973
fi
936
974
fi
937
975
fi
0 commit comments