mirror of https://github.com/grpc/grpc.git
The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
5.2 KiB
148 lines
5.2 KiB
#!/usr/bin/env bash |
|
# Copyright 2021 The gRPC Authors |
|
# |
|
# 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. |
|
|
|
set -eo pipefail |
|
|
|
# Constants |
|
readonly GITHUB_REPOSITORY_NAME="grpc" |
|
readonly TEST_DRIVER_INSTALL_SCRIPT_URL="https://raw.githubusercontent.com/${TEST_DRIVER_REPO_OWNER:-grpc}/psm-interop/${TEST_DRIVER_BRANCH:-main}/.kokoro/psm_interop_kokoro_lib.sh" |
|
# Keep orphaned resources last 2 days. |
|
readonly KEEP_HOURS="${KEEP_HOURS:-48}" |
|
|
|
cleanup::activate_cluster() { |
|
activate_gke_cluster "$1" |
|
gcloud container clusters get-credentials "${GKE_CLUSTER_NAME}" \ |
|
--zone "${GKE_CLUSTER_ZONE}" |
|
CLEANUP_KUBE_CONTEXT="$(kubectl config current-context)" |
|
} |
|
|
|
cleanup::activate_secondary_cluster_as_primary() { |
|
activate_secondary_gke_cluster "$1" |
|
GKE_CLUSTER_NAME="${SECONDARY_GKE_CLUSTER_NAME}" |
|
GKE_CLUSTER_ZONE="${SECONDARY_GKE_CLUSTER_ZONE}" |
|
gcloud container clusters get-credentials "${GKE_CLUSTER_NAME}" \ |
|
--zone "${GKE_CLUSTER_ZONE}" |
|
CLEANUP_KUBE_CONTEXT="$(kubectl config current-context)" |
|
} |
|
|
|
cleanup::job::cleanup_td() { |
|
cleanup::run_clean "$1" --mode=td |
|
} |
|
|
|
####################################### |
|
# The PSM_LB cluster is used by k8s_lb tests. |
|
# The keep hours is reduced to 6. |
|
####################################### |
|
cleanup::job::cleanup_cluster_lb_primary() { |
|
cleanup::activate_cluster GKE_CLUSTER_PSM_LB |
|
cleanup::run_clean "$1" --mode=k8s |
|
} |
|
|
|
####################################### |
|
# Secondary PSM_LB cluster is used by k8s_lb tests. |
|
# The keep hours is reduced to 6. |
|
####################################### |
|
cleanup::job::cleanup_cluster_lb_secondary() { |
|
cleanup::activate_secondary_cluster_as_primary GKE_CLUSTER_PSM_LB |
|
cleanup::run_clean "$1" --mode=k8s --secondary |
|
} |
|
|
|
####################################### |
|
# The BASIC cluster is used by url-map tests. Only cleaning the xds client |
|
# namespaces; the xds server namespaces are shared. |
|
# The keep hours is reduced to 6. |
|
####################################### |
|
cleanup::job::cleanup_cluster_url_map() { |
|
cleanup::activate_cluster GKE_CLUSTER_PSM_BASIC |
|
cleanup::run_clean "$1" --mode=k8s |
|
} |
|
|
|
####################################### |
|
# The SECURITY cluster is used by the security and authz test suites. |
|
####################################### |
|
cleanup::job::cleanup_cluster_security() { |
|
cleanup::activate_cluster GKE_CLUSTER_PSM_SECURITY |
|
cleanup::run_clean "$1" --mode=k8s |
|
} |
|
|
|
####################################### |
|
# Set common variables for the cleanup script. |
|
# Globals: |
|
# TEST_DRIVER_FLAGFILE: Relative path to test driver flagfile |
|
# TEST_XML_OUTPUT_DIR: Output directory for the test xUnit XML report |
|
# CLEANUP_KUBE_CONTEXT: The name of kubectl context with GKE cluster access. |
|
# Arguments: |
|
# Test job name. Currently only used to generate asset path, and uses |
|
# values from the cleanup_jobs array of main(). |
|
# TODO(sergiitk): turn job_name into action test methods of the cleanup. |
|
# Outputs: |
|
# Writes the output of test execution to stdout, stderr, |
|
# ${TEST_XML_OUTPUT_DIR}/${job_name}/sponge_log.log |
|
####################################### |
|
cleanup::run_clean() { |
|
local job_name="${1:?Usage: cleanup::run_clean job_name}" |
|
local out_dir="${TEST_XML_OUTPUT_DIR}/${job_name}" |
|
mkdir -pv "${out_dir}" |
|
# TODO(sergiitk): make it a test, where job_name is a separate method. |
|
python3 -m bin.cleanup.cleanup \ |
|
--flagfile="${TEST_DRIVER_FLAGFILE}" \ |
|
--kube_context="${CLEANUP_KUBE_CONTEXT:-unset}" \ |
|
--keep_hours="${KEEP_HOURS}" \ |
|
"${@:2}" \ |
|
|& tee "${out_dir}/sponge_log.log" |
|
} |
|
|
|
####################################### |
|
# Main function: provision software necessary to execute the cleanup tasks; |
|
# run them, and report the status. |
|
####################################### |
|
main() { |
|
local script_dir |
|
script_dir="$(dirname "$0")" |
|
|
|
# Source the test captured from the master branch. |
|
echo "Sourcing test driver install captured from: ${TEST_DRIVER_INSTALL_SCRIPT_URL}" |
|
source /dev/stdin <<< "$(curl -s "${TEST_DRIVER_INSTALL_SCRIPT_URL}")" |
|
set +x |
|
|
|
# Valid cluster variables needed for the automatic driver setup. |
|
activate_gke_cluster GKE_CLUSTER_PSM_BASIC |
|
kokoro_setup_test_driver "${GITHUB_REPOSITORY_NAME}" |
|
|
|
# Run tests |
|
cd "${TEST_DRIVER_FULL_DIR}" |
|
local failed_jobs=0 |
|
declare -a cleanup_jobs |
|
cleanup_jobs=( |
|
"cleanup_td" |
|
"cleanup_cluster_lb_primary" |
|
"cleanup_cluster_lb_secondary" |
|
"cleanup_cluster_security" |
|
"cleanup_cluster_url_map" |
|
) |
|
for job_name in "${cleanup_jobs[@]}"; do |
|
echo "-------------------- Starting job ${job_name} --------------------" |
|
set -x |
|
"cleanup::job::${job_name}" "${job_name}" || (( ++failed_jobs )) |
|
set +x |
|
echo "-------------------- Finished job ${job_name} --------------------" |
|
done |
|
echo "Failed job suites: ${failed_jobs}" |
|
if (( failed_jobs > 0 )); then |
|
exit 1 |
|
fi |
|
} |
|
|
|
main "$@"
|
|
|