kubectl/kubectl.bash (47 lines of code) (raw):
#!/bin/bash
echoerr() { echo "$@" 1>&2; }
if [[ $(( $RANDOM % 20 )) -eq 1 ]]; then
echoerr '
***** NOTICE *****
Official `cloud-sdk` images, including multiple tagged versions across multiple
platforms, can be found at
https://github.com/GoogleCloudPlatform/cloud-sdk-docker.
Suggested alternative images include
gcr.io/google.com/cloudsdktool/cloud-sdk
Please note that the `kubectl` entrypoint must be specified when using this
image or a version-tagged variant.
***** END OF NOTICE *****
'
fi
versions=( $(cd "$(gcloud info --format='value(installation.sdk_root)')/bin/" && ls kubectl.* | sed s/kubectl.//g) )
function var_usage() {
cat <<EOF
No cluster is set. To set the cluster (and the region/zone where it is found), set the environment variables
CLOUDSDK_COMPUTE_REGION=<cluster region> (regional clusters)
CLOUDSDK_COMPUTE_ZONE=<cluster zone>
CLOUDSDK_CONTAINER_CLUSTER=<cluster name>
Optionally, you can specify the kubectl version via KUBECTL_VERSION, taking one of the following values: ${versions[@]}
Optionally, you can specify additional parameters for the kubectl 'get-credentials' command via CLOUDSDK_GET_CREDENTIALS_OPTS, such using values as: --internal-ip, --quiet
EOF
exit 1
}
kubectl_cmd=kubectl${KUBECTL_VERSION:+.${KUBECTL_VERSION}}
cluster=${CLOUDSDK_CONTAINER_CLUSTER:-$(gcloud config get-value container/cluster 2> /dev/null)}
region=${CLOUDSDK_COMPUTE_REGION:-$(gcloud config get-value compute/region 2> /dev/null)}
zone=${CLOUDSDK_COMPUTE_ZONE:-$(gcloud config get-value compute/zone 2> /dev/null)}
project=${CLOUDSDK_CORE_PROJECT:-$(gcloud config get-value core/project 2> /dev/null)}
get_cred_opts=${CLOUDSDK_GET_CREDENTIALS_OPTS:+${CLOUDSDK_GET_CREDENTIALS_OPTS} }
[[ -z "$cluster" ]] && var_usage
[ ! "$zone" -o "$region" ] && var_usage
if [[ -n "$KUBECTL_VERSION" ]] && [[ ! " ${versions[*]} " =~ " ${KUBECTL_VERSION} " ]]; then
echoerr "Bad KUBECTL_VERSION \"${KUBECTL_VERSION}\". Expected one of ${versions[*]}" >&2
exit 1
fi
if [ -n "$region" ]; then
echoerr "Running: gcloud container clusters get-credentials --project=\"$project\" --region=\"$region\" ${get_cred_opts}\"$cluster\""
gcloud container clusters get-credentials --project="$project" --region="$region" ${get_cred_opts}"$cluster" || exit
else
echoerr "Running: gcloud container clusters get-credentials --project=\"$project\" --zone=\"$zone\" ${get_cred_opts}\"$cluster\""
gcloud container clusters get-credentials --project="$project" --zone="$zone" ${get_cred_opts}"$cluster" || exit
fi
echoerr "Running: ${kubectl_cmd}" "$@" >&2
exec "${kubectl_cmd}" "$@"