1*9c5db199SXin Li#!/bin/sh 2*9c5db199SXin Li 3*9c5db199SXin Li# Copyright 2017 The Chromium OS Authors. All rights reserved. 4*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be 5*9c5db199SXin Li# found in the LICENSE file. 6*9c5db199SXin Li 7*9c5db199SXin Li# This script probes the readiness of chameleon boards in 8*9c5db199SXin Li# the audioboxes and atlantis labs. This script takes about 2 seconds per board. 9*9c5db199SXin Li# The total time for all hosts listed is 5-6 minutes. 10*9c5db199SXin Li 11*9c5db199SXin Li#TODO (rjahagir): Add command line for a status check on only a few hosts. 12*9c5db199SXin LiHOSTS="chromeos2-row10-rack10-host1 13*9c5db199SXin Li chromeos2-row10-rack10-host11 14*9c5db199SXin Li chromeos2-row10-rack10-host13 15*9c5db199SXin Li chromeos2-row10-rack10-host15 16*9c5db199SXin Li chromeos2-row10-rack10-host17 17*9c5db199SXin Li chromeos2-row10-rack10-host19 18*9c5db199SXin Li chromeos2-row10-rack10-host3 19*9c5db199SXin Li chromeos2-row10-rack10-host5 20*9c5db199SXin Li chromeos2-row10-rack10-host7 21*9c5db199SXin Li chromeos2-row10-rack10-host9 22*9c5db199SXin Li chromeos2-row10-rack5-host11 23*9c5db199SXin Li chromeos2-row10-rack5-host13 24*9c5db199SXin Li chromeos2-row10-rack5-host15 25*9c5db199SXin Li chromeos2-row10-rack5-host17 26*9c5db199SXin Li chromeos2-row10-rack5-host19 27*9c5db199SXin Li chromeos2-row10-rack5-host21 28*9c5db199SXin Li chromeos2-row10-rack6-host1 29*9c5db199SXin Li chromeos2-row10-rack6-host11 30*9c5db199SXin Li chromeos2-row10-rack6-host13 31*9c5db199SXin Li chromeos2-row10-rack6-host15 32*9c5db199SXin Li chromeos2-row10-rack6-host3 33*9c5db199SXin Li chromeos2-row10-rack6-host5 34*9c5db199SXin Li chromeos2-row10-rack6-host7 35*9c5db199SXin Li chromeos2-row10-rack6-host9 36*9c5db199SXin Li chromeos2-row10-rack7-host1 37*9c5db199SXin Li chromeos2-row10-rack7-host11 38*9c5db199SXin Li chromeos2-row10-rack7-host13 39*9c5db199SXin Li chromeos2-row10-rack7-host15 40*9c5db199SXin Li chromeos2-row10-rack7-host17 41*9c5db199SXin Li chromeos2-row10-rack7-host3 42*9c5db199SXin Li chromeos2-row10-rack7-host5 43*9c5db199SXin Li chromeos2-row10-rack7-host7 44*9c5db199SXin Li chromeos2-row10-rack7-host9 45*9c5db199SXin Li chromeos2-row10-rack8-host1 46*9c5db199SXin Li chromeos2-row10-rack8-host13 47*9c5db199SXin Li chromeos2-row10-rack8-host15 48*9c5db199SXin Li chromeos2-row10-rack8-host17 49*9c5db199SXin Li chromeos2-row10-rack8-host19 50*9c5db199SXin Li chromeos2-row10-rack8-host21 51*9c5db199SXin Li chromeos2-row10-rack8-host3 52*9c5db199SXin Li chromeos2-row10-rack8-host5 53*9c5db199SXin Li chromeos2-row10-rack8-host7 54*9c5db199SXin Li chromeos2-row10-rack8-host9 55*9c5db199SXin Li chromeos2-row10-rack9-host11 56*9c5db199SXin Li chromeos2-row10-rack9-host13 57*9c5db199SXin Li chromeos2-row10-rack9-host15 58*9c5db199SXin Li chromeos2-row10-rack9-host17 59*9c5db199SXin Li chromeos2-row10-rack9-host19 60*9c5db199SXin Li chromeos2-row10-rack9-host21 61*9c5db199SXin Li chromeos2-row10-rack9-host3 62*9c5db199SXin Li chromeos2-row10-rack9-host5 63*9c5db199SXin Li chromeos2-row10-rack9-host7 64*9c5db199SXin Li chromeos2-row10-rack9-host9 65*9c5db199SXin Li chromeos9-audiobox1-host1 66*9c5db199SXin Li chromeos9-audiobox1-host2 67*9c5db199SXin Li chromeos9-audiobox2-host1 68*9c5db199SXin Li chromeos9-audiobox2-host2 69*9c5db199SXin Li chromeos9-audiobox3-host1 70*9c5db199SXin Li chromeos9-audiobox3-host2 71*9c5db199SXin Li chromeos9-audiobox4-host1 72*9c5db199SXin Li chromeos9-audiobox4-host2 73*9c5db199SXin Li chromeos9-audiobox5-host1 74*9c5db199SXin Li chromeos9-audiobox5-host2 75*9c5db199SXin Li chromeos9-audiobox6-host1 76*9c5db199SXin Li chromeos9-audiobox6-host2 77*9c5db199SXin Li chromeos9-audiobox7-host1 78*9c5db199SXin Li chromeos9-audiobox7-host2 79*9c5db199SXin Li chromeos1-row5-rack1-host2 80*9c5db199SXin Li chromeos1-row5-rack2-host2 81*9c5db199SXin Li chromeos1-row2-rack3-host4 82*9c5db199SXin Li chromeos1-row2-rack4-host4" 83*9c5db199SXin Li 84*9c5db199SXin Li# NOTE: May need to update based on where test_rsa is located. 85*9c5db199SXin LiSSH_OPTIONS="-q -i ~/.ssh/.test_rsa \ 86*9c5db199SXin Li -o UserKnownHostsFile=/dev/null \ 87*9c5db199SXin Li -o StrictHostKeyChecking=no" 88*9c5db199SXin Li 89*9c5db199SXin LiPROBE_RESULT_DIR="/tmp/chameleon_probe_result" 90*9c5db199SXin Li 91*9c5db199SXin LiSEP_LINE="--------------------------------------------------------------------------------------" 92*9c5db199SXin Li 93*9c5db199SXin Li 94*9c5db199SXin Lifunction disp_result { 95*9c5db199SXin Li test "$1" -eq "0" && echo ok || echo "-" 96*9c5db199SXin Li} 97*9c5db199SXin Li 98*9c5db199SXin Lifunction probe_chameleon { 99*9c5db199SXin Li chameleon="$1-chameleon.cros" 100*9c5db199SXin Li 101*9c5db199SXin Li # ping test 102*9c5db199SXin Li ping -q -w 10 -c1 "${chameleon}" > /dev/null 2>&1 103*9c5db199SXin Li ping_result="$(disp_result $?)" 104*9c5db199SXin Li 105*9c5db199SXin Li # checking /dev/root space 106*9c5db199SXin Li devroot_space=$(ssh ${SSH_OPTIONS} root@"$chameleon" \ 107*9c5db199SXin Li df -h | awk -F' ' 'FNR == 2 {print $5}')\ 108*9c5db199SXin Li 109*9c5db199SXin Li # Check if chameleond is running. 110*9c5db199SXin Li test $(ssh ${SSH_OPTIONS} root@"$chameleon" \ 111*9c5db199SXin Li ps | awk '$5~"run_chameleond"' | wc -l) -gt "0" 112*9c5db199SXin Li chameleond_result="$(disp_result $?)" 113*9c5db199SXin Li 114*9c5db199SXin Li # Check chameleond version 115*9c5db199SXin Li chameleond_version=$(ssh ${SSH_OPTIONS} root@"$chameleon" \ 116*9c5db199SXin Li cat /etc/default/chameleond | \ 117*9c5db199SXin Li awk -F'=' '/BUNDLE_VERSION/ {print $2}')\ 118*9c5db199SXin Li 119*9c5db199SXin Li # Print the result 120*9c5db199SXin Li printf "$1-chameleon %5s %10s %10s %s\n" "${ping_result}" \ 121*9c5db199SXin Li "${devroot_space}" "${chameleond_result}" "${chameleond_version}" \ 122*9c5db199SXin Li > "${PROBE_RESULT_DIR}/${chameleon}" 123*9c5db199SXin Li} 124*9c5db199SXin Li 125*9c5db199SXin Lifunction probe_chameleons { 126*9c5db199SXin Li # Fork parallel processes to probe the chameleon boards. 127*9c5db199SXin Li for host in $HOSTS; do 128*9c5db199SXin Li probe_chameleon $host & 129*9c5db199SXin Li chameleon_pids="${chameleon_pids} $!" 130*9c5db199SXin Li done 131*9c5db199SXin Li} 132*9c5db199SXin Li 133*9c5db199SXin Lifunction create_ping_result_dir { 134*9c5db199SXin Li chameleon_pids="" 135*9c5db199SXin Li 136*9c5db199SXin Li mkdir -p "${PROBE_RESULT_DIR}" 137*9c5db199SXin Li rm -fr "${PROBE_RESULT_DIR}"/* 138*9c5db199SXin Li} 139*9c5db199SXin Li 140*9c5db199SXin Lifunction print_chameleon_status { 141*9c5db199SXin Li echo "Chameleon ping /dev/root chameleond version" 142*9c5db199SXin Li echo "${SEP_LINE}" 143*9c5db199SXin Li 144*9c5db199SXin Li # Wait for all probing children processes to terminate. 145*9c5db199SXin Li for pid in ${chameleon_pids}; do 146*9c5db199SXin Li wait ${pid} 147*9c5db199SXin Li done 148*9c5db199SXin Li 149*9c5db199SXin Li # Sort and print the results. 150*9c5db199SXin Li cat "${PROBE_RESULT_DIR}"/*-chameleon.cros | sort 151*9c5db199SXin Li echo; echo 152*9c5db199SXin Li} 153*9c5db199SXin Li 154*9c5db199SXin Licreate_ping_result_dir 155*9c5db199SXin Liprobe_chameleons 156*9c5db199SXin Liprint_chameleon_status 157