xref: /aosp_15_r20/external/autotest/utils/chameleon_state.sh (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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