|
|
|
@@ -68,6 +68,7 @@ function prepare-e2e() {
|
|
|
|
|
# GCLOUD
|
|
|
|
|
# Vars set:
|
|
|
|
|
# PROJECT
|
|
|
|
|
# SCOPE_ARGS
|
|
|
|
|
function detect-project() {
|
|
|
|
|
echo "... in gke:detect-project()" >&2
|
|
|
|
|
if [[ -z "${PROJECT:-}" ]]; then
|
|
|
|
@@ -79,6 +80,18 @@ function detect-project() {
|
|
|
|
|
echo "'gcloud config set project <PROJECT>'" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
SCOPE_ARGS=(
|
|
|
|
|
"--project=${PROJECT}"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if [[ ! -z "${ZONE:-}" ]]; then
|
|
|
|
|
SCOPE_ARGS+=("--zone=${ZONE}")
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ ! -z "${REGION:-}" ]]; then
|
|
|
|
|
SCOPE_ARGS+=("--region=${REGION}")
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Execute prior to running tests to build a release if required for env.
|
|
|
|
@@ -116,6 +129,9 @@ function validate-cluster {
|
|
|
|
|
# Simply override the NUM_NODES variable if we've spread nodes across multiple
|
|
|
|
|
# zones before calling into the generic validate-cluster logic.
|
|
|
|
|
local EXPECTED_NUM_NODES="${NUM_NODES}"
|
|
|
|
|
if [ ! -z "${REGION:-}" ]; then
|
|
|
|
|
(( EXPECTED_NUM_NODES *= 3 ))
|
|
|
|
|
fi
|
|
|
|
|
for zone in $(echo "${ADDITIONAL_ZONES}" | sed "s/,/ /g")
|
|
|
|
|
do
|
|
|
|
|
(( EXPECTED_NUM_NODES += NUM_NODES ))
|
|
|
|
@@ -128,7 +144,8 @@ function validate-cluster {
|
|
|
|
|
# Assumed vars:
|
|
|
|
|
# GCLOUD
|
|
|
|
|
# CLUSTER_NAME
|
|
|
|
|
# ZONE
|
|
|
|
|
# ZONE (optional)
|
|
|
|
|
# REGION (optional)
|
|
|
|
|
# CLUSTER_API_VERSION (optional)
|
|
|
|
|
# NUM_NODES
|
|
|
|
|
# ADDITIONAL_ZONES (optional)
|
|
|
|
@@ -164,8 +181,7 @@ function kube-up() {
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
local shared_args=(
|
|
|
|
|
"--zone=${ZONE}"
|
|
|
|
|
"--project=${PROJECT}"
|
|
|
|
|
${SCOPE_ARGS[@]}
|
|
|
|
|
"--scopes=${NODE_SCOPES}"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
@@ -185,6 +201,7 @@ function kube-up() {
|
|
|
|
|
"--network=${NETWORK}"
|
|
|
|
|
"--cluster-version=${CLUSTER_API_VERSION}"
|
|
|
|
|
"--machine-type=${MACHINE_TYPE}"
|
|
|
|
|
"--quiet"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if [[ ! -z "${ENABLE_KUBERNETES_ALPHA:-}" ]]; then
|
|
|
|
@@ -239,7 +256,7 @@ function test-setup() {
|
|
|
|
|
detect-nodes >&2
|
|
|
|
|
|
|
|
|
|
# At this point, CLUSTER_NAME should have been used, so its value is final.
|
|
|
|
|
NODE_TAG=$($GCLOUD compute instances describe ${NODE_NAMES[0]} --project="${PROJECT}" --zone="${ZONE}" --format='value(tags.items)' | grep -o "gke-${CLUSTER_NAME}-.\{8\}-node")
|
|
|
|
|
NODE_TAG=$($GCLOUD compute instances list ${NODE_NAMES[0]} --project="${PROJECT}" --format='value(tags.items)' | grep -o "gke-${CLUSTER_NAME}-.\{8\}-node")
|
|
|
|
|
OLD_NODE_TAG="k8s-${CLUSTER_NAME}-node"
|
|
|
|
|
|
|
|
|
|
# Open up port 80 & 8080 so common containers on minions can be reached.
|
|
|
|
@@ -276,7 +293,7 @@ function detect-master() {
|
|
|
|
|
echo "... in gke:detect-master()" >&2
|
|
|
|
|
detect-project >&2
|
|
|
|
|
KUBE_MASTER_IP=$("${GCLOUD}" ${CMD_GROUP:-} container clusters describe \
|
|
|
|
|
--project="${PROJECT}" --zone="${ZONE}" --format='value(endpoint)' \
|
|
|
|
|
${SCOPE_ARGS[@]} --format='value(endpoint)' \
|
|
|
|
|
"${CLUSTER_NAME}")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -291,11 +308,16 @@ function detect-nodes() {
|
|
|
|
|
|
|
|
|
|
# Detect minions created in the minion group
|
|
|
|
|
#
|
|
|
|
|
# Note that this will only select nodes in the same zone as the
|
|
|
|
|
# Note that for zonal clusters this will only select nodes in the same zone as the
|
|
|
|
|
# cluster, meaning that it won't include all nodes in a multi-zone cluster.
|
|
|
|
|
# For regional clusters, this will select nodes only from arbitrarily chosen node instance group.
|
|
|
|
|
#
|
|
|
|
|
# Assumed vars:
|
|
|
|
|
# none
|
|
|
|
|
# GCLOUD
|
|
|
|
|
# PROJECT
|
|
|
|
|
# ZONE (optional)
|
|
|
|
|
# REGION (optional)
|
|
|
|
|
# CLUSTER_NAME
|
|
|
|
|
# Vars set:
|
|
|
|
|
# NODE_NAMES
|
|
|
|
|
function detect-node-names {
|
|
|
|
@@ -305,8 +327,10 @@ function detect-node-names {
|
|
|
|
|
|
|
|
|
|
NODE_NAMES=()
|
|
|
|
|
for group in "${NODE_INSTANCE_GROUPS[@]:-}"; do
|
|
|
|
|
# We can't simply use --zone "${ZONE}" as ZONE may not be set (e.g. when REGION is set).
|
|
|
|
|
local igm_zone=$(gcloud compute instance-groups managed list "${group}" --format='value(zone)')
|
|
|
|
|
NODE_NAMES+=($(gcloud compute instance-groups managed list-instances \
|
|
|
|
|
"${group}" --zone "${ZONE}" \
|
|
|
|
|
"${group}" --zone "${igm_zone}" \
|
|
|
|
|
--project "${PROJECT}" --format='value(instance)'))
|
|
|
|
|
done
|
|
|
|
|
echo "NODE_NAMES=${NODE_NAMES[*]:-}"
|
|
|
|
@@ -314,15 +338,18 @@ function detect-node-names {
|
|
|
|
|
|
|
|
|
|
# Detect instance group name generated by gke.
|
|
|
|
|
#
|
|
|
|
|
# Note that the NODE_INSTANCE_GROUPS var will only have instance groups in the
|
|
|
|
|
# Note that for zonal clusters the NODE_INSTANCE_GROUPS var will only have instance groups in the
|
|
|
|
|
# same zone as the cluster, meaning that it won't include all groups in a
|
|
|
|
|
# multi-zone cluster. The ALL_INSTANCE_GROUP_URLS will contain all the
|
|
|
|
|
# instance group URLs, which include multi-zone groups.
|
|
|
|
|
# multi-zone cluster.
|
|
|
|
|
# For regional clusters, NODE_INSTANCE_GROUPS is set to arbitrarily chosen node instance group.
|
|
|
|
|
# The ALL_INSTANCE_GROUP_URLS will contain all the instance group URLs,
|
|
|
|
|
# which include multi-zone groups.
|
|
|
|
|
#
|
|
|
|
|
# Assumed vars:
|
|
|
|
|
# GCLOUD
|
|
|
|
|
# PROJECT
|
|
|
|
|
# ZONE
|
|
|
|
|
# SCOPE_ARGS
|
|
|
|
|
# ZONE (optional)
|
|
|
|
|
# REGION (optional)
|
|
|
|
|
# CLUSTER_NAME
|
|
|
|
|
# Vars set:
|
|
|
|
|
# NODE_INSTANCE_GROUPS
|
|
|
|
@@ -330,17 +357,21 @@ function detect-node-names {
|
|
|
|
|
function detect-node-instance-groups {
|
|
|
|
|
echo "... in gke:detect-node-instance-groups()" >&2
|
|
|
|
|
local urls=$("${GCLOUD}" ${CMD_GROUP:-} container clusters describe \
|
|
|
|
|
--project="${PROJECT}" --zone="${ZONE}" \
|
|
|
|
|
--format='value(instanceGroupUrls)' "${CLUSTER_NAME}")
|
|
|
|
|
${SCOPE_ARGS[@]} --format='value(instanceGroupUrls)' "${CLUSTER_NAME}")
|
|
|
|
|
urls=(${urls//;/ })
|
|
|
|
|
ALL_INSTANCE_GROUP_URLS=${urls[*]}
|
|
|
|
|
NODE_INSTANCE_GROUPS=()
|
|
|
|
|
for url in "${urls[@]:-}"; do
|
|
|
|
|
local igm_zone=$(expr ${url} : '.*/zones/\([a-z0-9-]*\)/')
|
|
|
|
|
if [[ "${igm_zone}" == "${ZONE}" ]]; then
|
|
|
|
|
NODE_INSTANCE_GROUPS+=("${url##*/}")
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
if [[ ! -z "${ZONE:-}" ]]; then
|
|
|
|
|
for url in "${urls[@]:-}"; do
|
|
|
|
|
local igm_zone=$(expr ${url} : '.*/zones/\([a-z0-9-]*\)/')
|
|
|
|
|
if [[ "${igm_zone}" == "${ZONE}" ]]; then
|
|
|
|
|
NODE_INSTANCE_GROUPS+=("${url##*/}")
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
fi
|
|
|
|
|
if [[ ! -z "${REGION:-}" ]]; then
|
|
|
|
|
NODE_INSTANCE_GROUPS+=("${urls[0]}")
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# SSH to a node by name ($1) and run a command ($2).
|
|
|
|
@@ -413,13 +444,15 @@ function test-teardown() {
|
|
|
|
|
#
|
|
|
|
|
# Assumed vars:
|
|
|
|
|
# GCLOUD
|
|
|
|
|
# ZONE
|
|
|
|
|
# SCOPE_ARGS
|
|
|
|
|
# ZONE (optional)
|
|
|
|
|
# REGION (optional)
|
|
|
|
|
# CLUSTER_NAME
|
|
|
|
|
function kube-down() {
|
|
|
|
|
echo "... in gke:kube-down()" >&2
|
|
|
|
|
detect-project >&2
|
|
|
|
|
if "${GCLOUD}" ${CMD_GROUP:-} container clusters describe --project="${PROJECT}" --zone="${ZONE}" "${CLUSTER_NAME}" --quiet &>/dev/null; then
|
|
|
|
|
with-retry 3 "${GCLOUD}" ${CMD_GROUP:-} container clusters delete --project="${PROJECT}" \
|
|
|
|
|
--zone="${ZONE}" "${CLUSTER_NAME}" --quiet
|
|
|
|
|
if "${GCLOUD}" ${CMD_GROUP:-} container clusters describe ${SCOPE_ARGS[@]} "${CLUSTER_NAME}" --quiet &>/dev/null; then
|
|
|
|
|
with-retry 3 "${GCLOUD}" ${CMD_GROUP:-} container clusters delete ${SCOPE_ARGS[@]} \
|
|
|
|
|
"${CLUSTER_NAME}" --quiet
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|