#!/bin/sh
# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This script probes the readiness of chameleon boards in
# the audioboxes and atlantis labs. This script takes about 2 seconds per board.
# The total time for all hosts listed is 5-6 minutes.
#TODO (rjahagir): Add command line for a status check on only a few hosts.
HOSTS="chromeos2-row10-rack10-host1
chromeos2-row10-rack10-host11
chromeos2-row10-rack10-host13
chromeos2-row10-rack10-host15
chromeos2-row10-rack10-host17
chromeos2-row10-rack10-host19
chromeos2-row10-rack10-host3
chromeos2-row10-rack10-host5
chromeos2-row10-rack10-host7
chromeos2-row10-rack10-host9
chromeos2-row10-rack5-host11
chromeos2-row10-rack5-host13
chromeos2-row10-rack5-host15
chromeos2-row10-rack5-host17
chromeos2-row10-rack5-host19
chromeos2-row10-rack5-host21
chromeos2-row10-rack6-host1
chromeos2-row10-rack6-host11
chromeos2-row10-rack6-host13
chromeos2-row10-rack6-host15
chromeos2-row10-rack6-host3
chromeos2-row10-rack6-host5
chromeos2-row10-rack6-host7
chromeos2-row10-rack6-host9
chromeos2-row10-rack7-host1
chromeos2-row10-rack7-host11
chromeos2-row10-rack7-host13
chromeos2-row10-rack7-host15
chromeos2-row10-rack7-host17
chromeos2-row10-rack7-host3
chromeos2-row10-rack7-host5
chromeos2-row10-rack7-host7
chromeos2-row10-rack7-host9
chromeos2-row10-rack8-host1
chromeos2-row10-rack8-host13
chromeos2-row10-rack8-host15
chromeos2-row10-rack8-host17
chromeos2-row10-rack8-host19
chromeos2-row10-rack8-host21
chromeos2-row10-rack8-host3
chromeos2-row10-rack8-host5
chromeos2-row10-rack8-host7
chromeos2-row10-rack8-host9
chromeos2-row10-rack9-host11
chromeos2-row10-rack9-host13
chromeos2-row10-rack9-host15
chromeos2-row10-rack9-host17
chromeos2-row10-rack9-host19
chromeos2-row10-rack9-host21
chromeos2-row10-rack9-host3
chromeos2-row10-rack9-host5
chromeos2-row10-rack9-host7
chromeos2-row10-rack9-host9
chromeos9-audiobox1-host1
chromeos9-audiobox1-host2
chromeos9-audiobox2-host1
chromeos9-audiobox2-host2
chromeos9-audiobox3-host1
chromeos9-audiobox3-host2
chromeos9-audiobox4-host1
chromeos9-audiobox4-host2
chromeos9-audiobox5-host1
chromeos9-audiobox5-host2
chromeos9-audiobox6-host1
chromeos9-audiobox6-host2
chromeos9-audiobox7-host1
chromeos9-audiobox7-host2
chromeos1-row5-rack1-host2
chromeos1-row5-rack2-host2
chromeos1-row2-rack3-host4
chromeos1-row2-rack4-host4"
# NOTE: May need to update based on where test_rsa is located.
SSH_OPTIONS="-q -i ~/.ssh/.test_rsa \
-o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no"
PROBE_RESULT_DIR="/tmp/chameleon_probe_result"
SEP_LINE="--------------------------------------------------------------------------------------"
function disp_result {
test "$1" -eq "0" && echo ok || echo "-"
}
function probe_chameleon {
chameleon="$1-chameleon.cros"
# ping test
ping -q -w 10 -c1 "${chameleon}" > /dev/null 2>&1
ping_result="$(disp_result $?)"
# checking /dev/root space
devroot_space=$(ssh ${SSH_OPTIONS} root@"$chameleon" \
df -h | awk -F' ' 'FNR == 2 {print $5}')\
# Check if chameleond is running.
test $(ssh ${SSH_OPTIONS} root@"$chameleon" \
ps | awk '$5~"run_chameleond"' | wc -l) -gt "0"
chameleond_result="$(disp_result $?)"
# Check chameleond version
chameleond_version=$(ssh ${SSH_OPTIONS} root@"$chameleon" \
cat /etc/default/chameleond | \
awk -F'=' '/BUNDLE_VERSION/ {print $2}')\
# Print the result
printf "$1-chameleon %5s %10s %10s %s\n" "${ping_result}" \
"${devroot_space}" "${chameleond_result}" "${chameleond_version}" \
> "${PROBE_RESULT_DIR}/${chameleon}"
}
function probe_chameleons {
# Fork parallel processes to probe the chameleon boards.
for host in $HOSTS; do
probe_chameleon $host &
chameleon_pids="${chameleon_pids} $!"
done
}
function create_ping_result_dir {
chameleon_pids=""
mkdir -p "${PROBE_RESULT_DIR}"
rm -fr "${PROBE_RESULT_DIR}"/*
}
function print_chameleon_status {
echo "Chameleon ping /dev/root chameleond version"
echo "${SEP_LINE}"
# Wait for all probing children processes to terminate.
for pid in ${chameleon_pids}; do
wait ${pid}
done
# Sort and print the results.
cat "${PROBE_RESULT_DIR}"/*-chameleon.cros | sort
echo; echo
}
create_ping_result_dir
probe_chameleons
print_chameleon_status