From 0ea13c649554fd5819f70fd6766ee4986ff78c36 Mon Sep 17 00:00:00 2001 From: Lukasz Zajaczkowski Date: Fri, 4 Nov 2016 14:05:40 +0100 Subject: [PATCH] Translate a published version like 'release/stable' to version number --- cluster/get-kube.sh | 60 +++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/cluster/get-kube.sh b/cluster/get-kube.sh index 0dc9d52c032..31dda222a58 100755 --- a/cluster/get-kube.sh +++ b/cluster/get-kube.sh @@ -63,7 +63,31 @@ set -o errexit set -o nounset set -o pipefail -KUBERNETES_RELEASE_URL="${KUBERNETES_RELEASE_URL:-https://storage.googleapis.com/kubernetes-release/release}" +# If KUBERNETES_RELEASE_URL is overridden but KUBERNETES_CI_RELEASE_URL is not then set KUBERNETES_CI_RELEASE_URL to KUBERNETES_RELEASE_URL. +KUBERNETES_CI_RELEASE_URL="${KUBERNETES_CI_RELEASE_URL:-${KUBERNETES_RELEASE_URL:-https://dl.k8s.io/ci}}" +KUBERNETES_RELEASE_URL="${KUBERNETES_RELEASE_URL:-https://dl.k8s.io}" + +KUBE_RELEASE_VERSION_REGEX="^v(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(-(beta|alpha)\\.(0|[1-9][0-9]*))?$" +KUBE_CI_VERSION_REGEX="^v(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)-(beta|alpha)\\.(0|[1-9][0-9]*)(\\.(0|[1-9][0-9]*)\\+[-0-9a-z]*)?$" + +# Sets KUBE_VERSION variable if an explicit version number was provided (e.g. "v1.0.6", +# "v1.2.0-alpha.1.881+376438b69c7612") or resolves the "published" version +# / (e.g. "release/stable",' "ci/latest-1") by reading from GCS. +# +# See the docs on getting builds for more information about version +# publication. +# +# Args: +# $1 version string from command line +# Vars set: +# KUBE_VERSION +function set_binary_version() { + if [[ "${1}" =~ "/" ]]; then + KUBE_VERSION=$(curl -fL "https://dl.k8s.io/${1}.txt") + else + KUBE_VERSION=${1} + fi +} # Use the script from inside the Kubernetes tarball to fetch the client and # server binaries (if not included in kubernetes.tar.gz). @@ -110,18 +134,6 @@ if [[ -d "./kubernetes" ]]; then fi fi -function get_latest_version_number { - local -r latest_url="https://storage.googleapis.com/kubernetes-release/release/stable.txt" - if [[ $(which wget) ]]; then - wget -qO- "${latest_url}" - elif [[ $(which curl) ]]; then - curl -sSfL --retry 3 --keepalive-time 2 "${latest_url}" - else - echo "Couldn't find curl or wget. Bailing out." >&2 - exit 4 - fi -} - # TODO: remove client checks once kubernetes.tar.gz no longer includes client # binaries by default. kernel=$(uname -s) @@ -162,21 +174,33 @@ case "${machine}" in esac file=kubernetes.tar.gz -release=${KUBERNETES_RELEASE:-$(get_latest_version_number)} -release_url="${KUBERNETES_RELEASE_URL}/${release}/${file}" +release=${KUBERNETES_RELEASE:-"release/stable"} + +# Validate Kubernetes release version. +# Translate a published version / (e.g. "release/stable") to version number. +set_binary_version "${release}" +if [[ ${KUBE_VERSION} =~ ${KUBE_RELEASE_VERSION_REGEX} ]]; then + release_url="${KUBERNETES_RELEASE_URL}/${KUBE_VERSION}/${file}" +elif [[ ${KUBE_VERSION} =~ ${KUBE_CI_VERSION_REGEX} ]]; then + release_url="${KUBERNETES_CI_RELEASE_URL}/${KUBE_VERSION}/${file}" +else + echo "Version doesn't match regexp" >&2 + exit 1 +fi + need_download=true if [[ -r "${PWD}/${file}" ]]; then downloaded_version=$(tar -xzOf "${PWD}/${file}" kubernetes/version 2>/dev/null || true) echo "Found preexisting ${file}, release ${downloaded_version}" - if [[ "${downloaded_version}" == "${release}" ]]; then + if [[ "${downloaded_version}" == "${KUBE_VERSION}" ]]; then echo "Using preexisting kubernetes.tar.gz" need_download=false fi fi if "${need_download}"; then - echo "Downloading kubernetes release ${release}" + echo "Downloading kubernetes release ${KUBE_VERSION}" echo " from ${release_url}" echo " to ${PWD}/${file}" fi @@ -212,7 +236,7 @@ if "${need_download}"; then fi fi -echo "Unpacking kubernetes release ${release}" +echo "Unpacking kubernetes release ${KUBE_VERSION}" rm -rf "${PWD}/kubernetes" tar -xzf ${file}