@@ -49,6 +49,7 @@ export YTT_FILES=()
4949export TMP_DIR=" ${TMP_DIR:- $(mktemp -d -t ci-$(date +% Y-% m-% d-% H-% M-% S)-XXXXXXXXXX)} "
5050
5151readonly E2E_YAML_DIR=${E2E_YAML_DIR:- " ${TMP_DIR} /e2e-yaml" }
52+ readonly STERN_PID_FILE=${TMP_DIR} /stern.pid
5253
5354# This the namespace used to install Knative Serving. Use generated UUID as namespace.
5455export SYSTEM_NAMESPACE=" ${SYSTEM_NAMESPACE:- $(uuidgen | tr ' A-Z' ' a-z' )} "
@@ -422,21 +423,59 @@ function knative_teardown() {
422423
423424# Create test resources and images
424425function test_setup() {
426+ echo " >> Uploading test images..."
427+ ${REPO_ROOT_DIR} /test/upload-test-images.sh || return 1
428+
425429 echo " >> Setting up logging..."
426430
427- # Install kail if needed.
428- if ! which kail > /dev/null; then
429- go install github.com/
boz/kail/cmd/[email protected] 431+ # Install stern if needed.
432+ if ! which stern > /dev/null; then
433+ go install github.com/
stern/[email protected] 430434 fi
431435
436+ mkdir -p $( log_dir)
437+
432438 # Capture all logs.
433- kail > " ${ARTIFACTS} /k8s.log-$( basename " ${E2E_SCRIPT} " ) .txt" &
434- local kail_pid=$!
435- # Clean up kail so it doesn't interfere with job shutting down
436- add_trap " kill $kail_pid || true" EXIT
439+ # We use stdbuf so that when we pipe logs to awk it flushes to the file
440+ stdbuf -oL stern . --all-namespaces --timestamps --max-log-requests 2000 2> " $( log_dir) /stern.stderr.log" | \
441+ stdbuf -oL awk -v logdir=" $( log_dir) " '
442+ {
443+ ns=$1;
444+ pod=$2;
437445
438- echo " >> Uploading test images..."
439- ${REPO_ROOT_DIR} /test/upload-test-images.sh || return 1
446+ gsub("/", "_", ns);
447+ gsub("/", "_", pod);
448+
449+ dir = logdir "/" ns
450+
451+ if (!(dir in seen_dirs)) {
452+ if (system("[ -d \"" dir "\" ] || mkdir -p \"" dir "\"") != 0) {
453+ print "Failed to create dir:", dir > "/dev/stderr"
454+ }
455+ seen_dirs[dir] = 1
456+ }
457+
458+ print $0 >> (logdir "/" ns "/" pod ".log");
459+ fflush(logdir "/" ns "/" pod ".log");
460+ }' &
461+
462+ echo $! > ${STERN_PID_FILE}
463+
464+ # Clean up stern so it doesn't interfere with job shutting down
465+ add_trap " stop_logging" EXIT SIGTERM
466+ }
467+
468+ function stop_logging() {
469+ kill $( cat ${STERN_PID_FILE} )
470+
471+ pushd " $( dirname $( log_dir) ) "
472+ tar -czf " $( basename $( log_dir) ) .tar.gz" " $( basename $( log_dir) ) "
473+ rm -rf " $( basename $( log_dir) ) "
474+ popd
475+ }
476+
477+ function log_dir() {
478+ echo " ${ARTIFACTS} /log-$( basename " ${E2E_SCRIPT} " .sh) "
440479}
441480
442481# Dump more information when test fails.
@@ -635,3 +674,7 @@ function run_ytt() {
635674function run_kapp() {
636675 go_run github.com/vmware-tanzu/carvel-kapp/cmd/
[email protected] " $@ " 637676}
677+
678+ function on_success() {
679+ rm " ${ARTIFACTS} " /log-*
680+ }
0 commit comments