mirror of https://github.com/knative/docs.git
update test-infra (#1182)
This commit is contained in:
parent
3f8fbb2ba0
commit
9d862fb0c0
|
@ -116,14 +116,14 @@
|
|||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
digest = "1:921c8888ac7bf7240bc5473d029201b3eb19f9592c7647c4c29f96b6c901b1bb"
|
||||
digest = "1:f3c8dc03bb88bca90c59550e06b0f27a6ca489b1747ac8e5153686a6752e4d74"
|
||||
name = "github.com/knative/test-infra"
|
||||
packages = [
|
||||
"scripts",
|
||||
"tools/dep-collector",
|
||||
]
|
||||
pruneopts = "UT"
|
||||
revision = "582b6fbee8ae00260baf916b0f9db2aa5f3483d9"
|
||||
revision = "3a09cd7f5428743509941d116fdee644041a3507"
|
||||
|
||||
[[projects]]
|
||||
digest = "1:5985ef4caf91ece5d54817c11ea25f182697534f8ae6521eadcd628c142ac4b6"
|
||||
|
|
|
@ -108,8 +108,10 @@ This is a helper script for Knative E2E test scripts. To use it:
|
|||
if the default values don't fit your needs:
|
||||
|
||||
- `E2E_CLUSTER_REGION`: Cluster region, defaults to `us-central1`.
|
||||
- `E2E_CLUSTER_BACKUP_REGIONS`: Space-separated list of regions to retry test cluster creation in case of stockout. Defaults to `us-west1 us-east1`.
|
||||
- `E2E_CLUSTER_ZONE`: Cluster zone (e.g., `a`), defaults to none (i.e. use a regional
|
||||
cluster).
|
||||
- `E2E_CLUSTER_BACKUP_ZONES`: Space-separated list of zones to retry test cluster creation in case of stockout. If defined, `E2E_CLUSTER_BACKUP_REGIONS` will be ignored thus it defaults to none.
|
||||
- `E2E_CLUSTER_MACHINE`: Cluster node machine type, defaults to `n1-standard-4}`.
|
||||
- `E2E_MIN_CLUSTER_NODES`: Minimum number of nodes in the cluster when autoscaling,
|
||||
defaults to 1.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright 2018 The Knative Authors
|
||||
# Copyright 2019 The Knative Authors
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
|
@ -38,9 +38,15 @@ function build_resource_name() {
|
|||
# Test cluster parameters
|
||||
|
||||
# Configurable parameters
|
||||
readonly E2E_CLUSTER_REGION=${E2E_CLUSTER_REGION:-us-central1}
|
||||
# export E2E_CLUSTER_REGION and E2E_CLUSTER_ZONE as they're used in the cluster setup subprocess
|
||||
export E2E_CLUSTER_REGION=${E2E_CLUSTER_REGION:-us-central1}
|
||||
# By default we use regional clusters.
|
||||
readonly E2E_CLUSTER_ZONE=${E2E_CLUSTER_ZONE:-}
|
||||
export E2E_CLUSTER_ZONE=${E2E_CLUSTER_ZONE:-}
|
||||
|
||||
# Default backup regions in case of stockouts; by default we don't fall back to a different zone in the same region
|
||||
readonly E2E_CLUSTER_BACKUP_REGIONS=${E2E_CLUSTER_BACKUP_REGIONS:-us-west1 us-east1}
|
||||
readonly E2E_CLUSTER_BACKUP_ZONES=${E2E_CLUSTER_BACKUP_ZONES:-}
|
||||
|
||||
readonly E2E_CLUSTER_MACHINE=${E2E_CLUSTER_MACHINE:-n1-standard-4}
|
||||
readonly E2E_GKE_ENVIRONMENT=${E2E_GKE_ENVIRONMENT:-prod}
|
||||
readonly E2E_GKE_COMMAND_GROUP=${E2E_GKE_COMMAND_GROUP:-beta}
|
||||
|
@ -154,20 +160,15 @@ function create_test_cluster() {
|
|||
cluster_setup || fail_test "cluster setup failed"
|
||||
fi
|
||||
|
||||
header "Creating test cluster"
|
||||
|
||||
echo "Cluster will have a minimum of ${E2E_MIN_CLUSTER_NODES} and a maximum of ${E2E_MAX_CLUSTER_NODES} nodes."
|
||||
|
||||
# Smallest cluster required to run the end-to-end-tests
|
||||
local geoflag="--gcp-region=${E2E_CLUSTER_REGION}"
|
||||
[[ -n "${E2E_CLUSTER_ZONE}" ]] && geoflag="--gcp-zone=${E2E_CLUSTER_REGION}-${E2E_CLUSTER_ZONE}"
|
||||
local CLUSTER_CREATION_ARGS=(
|
||||
--gke-create-command="container clusters create --quiet --enable-autoscaling --min-nodes=${E2E_MIN_CLUSTER_NODES} --max-nodes=${E2E_MAX_CLUSTER_NODES} --scopes=cloud-platform --enable-basic-auth --no-issue-client-certificate ${EXTRA_CLUSTER_CREATION_FLAGS[@]}"
|
||||
--gke-shape={\"default\":{\"Nodes\":${E2E_MIN_CLUSTER_NODES}\,\"MachineType\":\"${E2E_CLUSTER_MACHINE}\"}}
|
||||
--provider=gke
|
||||
--deployment=gke
|
||||
--cluster="${E2E_CLUSTER_NAME}"
|
||||
${geoflag}
|
||||
--gcp-network="${E2E_NETWORK_NAME}"
|
||||
--gke-environment="${E2E_GKE_ENVIRONMENT}"
|
||||
--gke-command-group="${E2E_GKE_COMMAND_GROUP}"
|
||||
|
@ -198,11 +199,7 @@ function create_test_cluster() {
|
|||
local extra_flags=()
|
||||
# If using boskos, save time and let it tear down the cluster
|
||||
(( ! IS_BOSKOS )) && extra_flags+=(--down)
|
||||
# Don't fail test for kubetest, as it might incorrectly report test failure
|
||||
# if teardown fails (for details, see success() below)
|
||||
set +o errexit
|
||||
run_go_tool k8s.io/test-infra/kubetest \
|
||||
kubetest "${CLUSTER_CREATION_ARGS[@]}" \
|
||||
create_test_cluster_with_retries "${CLUSTER_CREATION_ARGS[@]}" \
|
||||
--up \
|
||||
--extract "${E2E_CLUSTER_VERSION}" \
|
||||
--gcp-node-image "${SERVING_GKE_IMAGE}" \
|
||||
|
@ -215,12 +212,55 @@ function create_test_cluster() {
|
|||
set +o errexit
|
||||
function_exists cluster_teardown && cluster_teardown
|
||||
delete_leaked_network_resources
|
||||
local result="$(cat ${TEST_RESULT_FILE})"
|
||||
local result=$(get_test_return_code)
|
||||
echo "Artifacts were written to ${ARTIFACTS}"
|
||||
echo "Test result code is ${result}"
|
||||
exit ${result}
|
||||
}
|
||||
|
||||
# Retry backup regions/zones if cluster creations failed due to stockout.
|
||||
# Parameters: $1..$n - any kubetest flags other than geo flag.
|
||||
function create_test_cluster_with_retries() {
|
||||
local cluster_creation_log=/tmp/${E2E_BASE_NAME}-cluster_creation-log
|
||||
# zone_not_provided is a placeholder for e2e_cluster_zone to make for loop below work
|
||||
local zone_not_provided="zone_not_provided"
|
||||
|
||||
local e2e_cluster_regions=(${E2E_CLUSTER_REGION})
|
||||
local e2e_cluster_zones=(${E2E_CLUSTER_ZONE})
|
||||
|
||||
if [[ -n "${E2E_CLUSTER_BACKUP_ZONES}" ]]; then
|
||||
e2e_cluster_zones+=(${E2E_CLUSTER_BACKUP_ZONES})
|
||||
elif [[ -n "${E2E_CLUSTER_BACKUP_REGIONS}" ]]; then
|
||||
e2e_cluster_regions+=(${E2E_CLUSTER_BACKUP_REGIONS})
|
||||
e2e_cluster_zones=(${zone_not_provided})
|
||||
else
|
||||
echo "No backup region/zone set, cluster creation will fail in case of stockout"
|
||||
fi
|
||||
|
||||
for e2e_cluster_region in "${e2e_cluster_regions[@]}"; do
|
||||
for e2e_cluster_zone in "${e2e_cluster_zones[@]}"; do
|
||||
E2E_CLUSTER_REGION=${e2e_cluster_region}
|
||||
E2E_CLUSTER_ZONE=${e2e_cluster_zone}
|
||||
[[ "${E2E_CLUSTER_ZONE}" == "${zone_not_provided}" ]] && E2E_CLUSTER_ZONE=""
|
||||
|
||||
local geoflag="--gcp-region=${E2E_CLUSTER_REGION}"
|
||||
[[ -n "${E2E_CLUSTER_ZONE}" ]] && geoflag="--gcp-zone=${E2E_CLUSTER_REGION}-${E2E_CLUSTER_ZONE}"
|
||||
|
||||
header "Creating test cluster in $E2E_CLUSTER_REGION $E2E_CLUSTER_ZONE"
|
||||
# Don't fail test for kubetest, as it might incorrectly report test failure
|
||||
# if teardown fails (for details, see success() below)
|
||||
set +o errexit
|
||||
{ run_go_tool k8s.io/test-infra/kubetest \
|
||||
kubetest "$@" ${geoflag}; } 2>&1 | tee ${cluster_creation_log}
|
||||
|
||||
# Exit if test succeeded
|
||||
[[ "$(get_test_return_code)" == "0" ]] && return
|
||||
# If test failed not because of cluster creation stockout, return
|
||||
[[ -z "$(grep -Eio 'does not have enough resources to fulfill the request' ${cluster_creation_log})" ]] && return
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
# Setup the test cluster for running the tests.
|
||||
function setup_test_cluster() {
|
||||
# Fail fast during setup.
|
||||
|
@ -263,6 +303,12 @@ function setup_test_cluster() {
|
|||
fi
|
||||
}
|
||||
|
||||
# Gets the exit of of the test script.
|
||||
# For more details, see set_test_return_code().
|
||||
function get_test_return_code() {
|
||||
echo $(cat ${TEST_RESULT_FILE})
|
||||
}
|
||||
|
||||
# Set the return code that the test script will return.
|
||||
# Parameters: $1 - return code (0-255)
|
||||
function set_test_return_code() {
|
||||
|
|
|
@ -146,22 +146,23 @@ function wait_until_pods_running() {
|
|||
return 1
|
||||
}
|
||||
|
||||
# Waits until all batch job pods are running in the given namespace.
|
||||
# Waits until all batch jobs complete in the given namespace.
|
||||
# Parameters: $1 - namespace.
|
||||
function wait_until_batch_job_complete() {
|
||||
echo -n "Waiting until all batch job pods in namespace $1 run to completion."
|
||||
echo -n "Waiting until all batch jobs in namespace $1 run to completion."
|
||||
for i in {1..150}; do # timeout after 5 minutes
|
||||
local pods="$(kubectl get pods --selector=job-name --no-headers -n $1 2>/dev/null | grep -v '^[[:space:]]*$')"
|
||||
# All pods must be complete
|
||||
local not_complete=$(echo "${pods}" | grep -v Completed | wc -l)
|
||||
local jobs=$(kubectl get jobs -n $1 --no-headers \
|
||||
-ocustom-columns='n:{.metadata.name},c:{.spec.completions},s:{.status.succeeded}')
|
||||
# All jobs must be complete
|
||||
local not_complete=$(echo "${jobs}" | awk '{if ($2!=$3) print $0}' | wc -l)
|
||||
if [[ ${not_complete} -eq 0 ]]; then
|
||||
echo -e "\nAll pods are complete:\n${pods}"
|
||||
echo -e "\nAll jobs are complete:\n${jobs}"
|
||||
return 0
|
||||
fi
|
||||
echo -n "."
|
||||
sleep 2
|
||||
done
|
||||
echo -e "\n\nERROR: timeout waiting for pods to complete\n${pods}"
|
||||
echo -e "\n\nERROR: timeout waiting for jobs to complete\n${jobs}"
|
||||
return 1
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue