From 1cda616a9b649b23a6cc25a3d89a3011f206b8cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Ole=C5=9B?= Date: Thu, 13 Oct 2016 18:11:36 +0200 Subject: [PATCH] Retry curl when it failed during download Fixes #34769 --- hack/lib/etcd.sh | 8 ++++++-- hack/lib/util.sh | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/hack/lib/etcd.sh b/hack/lib/etcd.sh index c99dcebeb8..83b80ffcb6 100644 --- a/hack/lib/etcd.sh +++ b/hack/lib/etcd.sh @@ -74,12 +74,16 @@ kube::etcd::install() { cd "${KUBE_ROOT}/third_party" if [[ $(uname) == "Darwin" ]]; then download_file="etcd-v${ETCD_VERSION}-darwin-amd64.zip" - curl -fsSLO --retry 3 --keepalive-time 2 https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/"${download_file}" + url="https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/${download_file}" + kube::util::download_file "${url}" "${download_file}" unzip -o "${download_file}" ln -fns "etcd-v${ETCD_VERSION}-darwin-amd64" etcd rm "${download_file}" else - curl -fsSL --retry 3 --keepalive-time 2 https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gz | tar xzf - + url="https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/etcd-v${ETCD_VERSION}-linux-amd64.tar.gz" + download_file="etcd-v${ETCD_VERSION}-linux-amd64.tar.gz" + kube::util::download_file "${url}" "${download_file}" + tar xzf "${download_file}" ln -fns "etcd-v${ETCD_VERSION}-linux-amd64" etcd fi kube::log::info "etcd v${ETCD_VERSION} installed. To use:" diff --git a/hack/lib/util.sh b/hack/lib/util.sh index 1e4aba5881..fd60d73c24 100755 --- a/hack/lib/util.sh +++ b/hack/lib/util.sh @@ -478,4 +478,23 @@ kube::util::has_changes_against_upstream_branch() { return 1 } +kube::util::download_file() { + local -r url=$1 + local -r destination_file=$2 + + rm ${destination_file} 2&> /dev/null || true + + for i in $(seq 5) + do + if ! curl -fsSL --retry 3 --keepalive-time 2 ${url} -o ${destination_file}; then + echo "Downloading ${url} failed. $((5-i)) retries left." + sleep 1 + else + echo "Downloading ${url} succeed" + return 0 + fi + done + return 1 +} + # ex: ts=2 sw=2 et filetype=sh