From a284b4e7b14932212feb4135e1b5df0c6019a30f Mon Sep 17 00:00:00 2001 From: Jack Francis Date: Mon, 12 Feb 2018 15:12:49 -0700 Subject: [PATCH] enforce apt-get update warnings/errors retries (#2241) * enforce apt-get update warnings/errors retries --- parts/k8s/kubernetesagentcustomdata.yml | 6 ++++-- parts/k8s/kubernetesmastercustomdata.yml | 7 ++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/parts/k8s/kubernetesagentcustomdata.yml b/parts/k8s/kubernetesagentcustomdata.yml index 7dba9cf0a1..be4acbbd28 100644 --- a/parts/k8s/kubernetesagentcustomdata.yml +++ b/parts/k8s/kubernetesagentcustomdata.yml @@ -167,13 +167,15 @@ coreos: runcmd: - echo `date`,`hostname`, startruncmd>>/opt/m # the first arg is the number of retries, the second arg is the wait duration between two retries and the rest of the args are the cmd to run +- set -x - retrycmd_if_failure() { retries=$1; wait=$2; shift && shift; for i in $(seq 1 $retries); do ${@}; [ $? -eq 0 ] && break || sleep $wait; done; echo Executed \"$@\" $i times; } - retrycmd_if_failure_no_stats() { retries=$1; wait=$2; shift && shift; for i in $(seq 1 $retries); do ${@}; [ $? -eq 0 ] && break || sleep $wait; done; } +- apt_get_update() { for i in $(seq 1 20); do apt-get update 2>&1 | grep -x "[WE]:.*"; [ $? -ne 0 ] && break || sleep 1; done; echo Executed apt-get update $i times; } - retrycmd_if_failure 120 1 nc -zuw1 $(grep nameserver /etc/resolv.conf | cut -d \ -f 2) 53 - retrycmd_if_failure 120 1 nc -zw1 aptdocker.azureedge.net 443 - apt-mark hold walinuxagent{{GetKubernetesAgentPreprovisionYaml .}} - echo `date`,`hostname`, preaptupdate>>/opt/m -- retrycmd_if_failure 5 10 apt-get update +- apt_get_update - echo `date`,`hostname`, postaptupdate>>/opt/m - retrycmd_if_failure 5 10 apt-get install -y apt-transport-https ca-certificates nfs-common - echo `date`,`hostname`, aptinstall>>/opt/m @@ -186,7 +188,7 @@ runcmd: - cat /tmp/aptdocker.gpg | apt-key add - - echo "deb {{WrapAsVariable "dockerEngineDownloadRepo"}} ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list - "echo \"Package: docker-engine\nPin: version {{WrapAsVariable "dockerEngineVersion"}}\nPin-Priority: 550\n\" > /etc/apt/preferences.d/docker.pref" -- retrycmd_if_failure 5 10 apt-get update +- apt_get_update - retrycmd_if_failure 5 10 apt-get install -y ebtables docker-engine - echo "ExecStartPost=/sbin/iptables -P FORWARD ACCEPT" >> /etc/systemd/system/docker.service.d/exec_start.conf - systemctl daemon-reload diff --git a/parts/k8s/kubernetesmastercustomdata.yml b/parts/k8s/kubernetesmastercustomdata.yml index 059679d14c..b103169830 100644 --- a/parts/k8s/kubernetesmastercustomdata.yml +++ b/parts/k8s/kubernetesmastercustomdata.yml @@ -342,9 +342,11 @@ coreos: {{else}} runcmd: # the first arg is the number of retries, the second arg is the wait duration between two retries and the rest of the args are the cmd to run +- set -x - retrycmd_if_failure() { retries=$1; wait=$2; shift && shift; for i in $(seq 1 $retries); do ${@}; [ $? -eq 0 ] && break || sleep $wait; done; echo Executed \"$@\" $i times; } - retrycmd_if_failure_no_stats() { retries=$1; wait=$2; shift && shift; for i in $(seq 1 $retries); do ${@}; [ $? -eq 0 ] && break || sleep $wait; done; } - ensure_etcd_ready() { for i in $(seq 1 1800); do if [ -e /opt/azure/containers/certs.ready ]; then break; fi; sleep 1; done } +- apt_get_update() { for i in $(seq 1 20); do apt-get update 2>&1 | grep -x "[WE]:.*"; [ $? -ne 0 ] && break || sleep 1; done; echo Executed apt-get update $i times; } - retrycmd_if_failure 120 1 nc -zuw1 $(grep nameserver /etc/resolv.conf | cut -d \ -f 2) 53 - retrycmd_if_failure 120 1 nc -zw1 aptdocker.azureedge.net 443 - ensure_etcd_ready @@ -359,14 +361,13 @@ runcmd: - MEMBER="$(sudo etcdctl member list | grep -E {{WrapAsVerbatim "variables('masterVMNames')[copyIndex(variables('masterOffset'))]"}} | cut -d{{WrapAsVariable "singleQuote"}}:{{WrapAsVariable "singleQuote"}} -f 1)" - sudo etcdctl member update ${MEMBER} {{WrapAsVerbatim "variables('masterEtcdPeerURLs')[copyIndex(variables('masterOffset'))]"}} - retrycmd_if_failure 5 5 curl --cacert /etc/kubernetes/certs/ca.crt --cert /etc/kubernetes/certs/etcdclient.crt --key /etc/kubernetes/certs/etcdclient.key --retry 5 --retry-delay 10 --retry-max-time 30 --max-time 60 "{{WrapAsVerbatim "variables('masterEtcdClientURLs')[copyIndex(variables('masterOffset'))]"}}"/v2/machines -- retrycmd_if_failure 5 10 apt-get update +- apt_get_update - retrycmd_if_failure 5 10 apt-get install -y apt-transport-https ca-certificates -- retrycmd_if_failure 60 1 nc -zw1 aptdocker.azureedge.net 443 - retrycmd_if_failure_no_stats 180 1 curl -fsSL https://aptdocker.azureedge.net/gpg > /tmp/aptdocker.gpg - cat /tmp/aptdocker.gpg | apt-key add - - echo "deb {{WrapAsVariable "dockerEngineDownloadRepo"}} ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list - "echo \"Package: docker-engine\nPin: version {{WrapAsVariable "dockerEngineVersion"}}\nPin-Priority: 550\n\" > /etc/apt/preferences.d/docker.pref" -- retrycmd_if_failure 5 10 apt-get update +- apt_get_update - retrycmd_if_failure 5 10 apt-get install -y ebtables docker-engine - echo "ExecStartPost=/sbin/iptables -P FORWARD ACCEPT" >> /etc/systemd/system/docker.service.d/exec_start.conf - systemctl daemon-reload