diff --git a/cluster/gce/util.sh b/cluster/gce/util.sh index 56fe5aa2b92..420b52668f0 100755 --- a/cluster/gce/util.sh +++ b/cluster/gce/util.sh @@ -745,16 +745,25 @@ function check-cluster() { if [[ ${elapsed} -gt ${KUBE_CLUSTER_INITIALIZATION_TIMEOUT} ]]; then echo -e "${color_red}Cluster failed to initialize within ${KUBE_CLUSTER_INITIALIZATION_TIMEOUT} seconds.${color_norm}" >&2 if [[ ${KUBE_TEST_DEBUG-} =~ ^[yY]$ ]]; then - local tmp_log="$(mktemp)" - local file - for file in /var/log/startupscript.log /var/log/kube-apiserver.log; do - echo "${MASTER_NAME}:${file} contents:" - if gcloud compute copy-files --project "${PROJECT}" \ - --zone "${ZONE}" "${MASTER_NAME}:${file}" "${tmp_log}"; then - cat "${tmp_log}" - fi + local savedir="${E2E_REPORT_DIR-}" + if [[ -z "${savedir}" ]]; then + savedir="$(mktemp -t -d k8s-e2e.XXX)" + fi + echo "Preserving master logs in ${savedir}" + local logdir=/var/log + local basename + for basename in startupscript kube-apiserver; do + # TODO(mml): Perhaps revisit how we name logs for preservation and + # centralize an implementation. Options include putting basename + # before hostname and including a timestamp. + local src="${logdir}/${basename}.log" + local dst="${savedir}/${MASTER_NAME}-${basename}.log" + echo "Copying ${MASTER_NAME}:${src}" + gcloud compute copy-files \ + --project "${PROJECT}" --zone "${ZONE}" \ + "${MASTER_NAME}:${src}" "${dst}" \ + || true done - rm -f "${tmp_log}" fi exit 2 fi