blob: b935503719e190772fae3c34f941f282bc1caeaf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
# (c) 2017 Kevin Hilman <khilman@baylibre.com>
# License GPLv2
#
# Setup LAVA API authentication tokens for various LAVA labs
#
# Uses user/token pairs from Jenkins secrets
#
# And macthing LAVA lab names for releng-scripts
#
# Strucuture: [JENKINS_LAB_NAME]="LAB_URL;JENKINS_LAB_USER;JENKINS_LAB_TOKEN;RELENG_LAB_NAME"
#
# Let the script handle errors nicely
set +e
declare -A labs
labs=(
[agl]="https://lava.automotivelinux.org/;$LAB_AGL_USER;$LAB_AGL_TOKEN;lab-agl-core"
# [baylibre]="http://lava.baylibre.com:10080/;$LAB_BAYLIBRE_USER;$LAB_BAYLIBRE_TOKEN;lab-baylibre-legacy"
)
#
# Ensure python_keyring is set to plaintext. Required for
# non-interactive use
#
echo "default keyring config"
mkdir -p ~/.local/share/python_keyring/
cat <<EOF > ~/.local/share/python_keyring/keyringrc.cfg
[backend]
default-keyring=keyring.backends.file.PlaintextKeyring
EOF
#set -x
device_available=0
for lab in "${!labs[@]}"; do
val=${labs[$lab]}
OFS=${IFS}
IFS=';'
arr=(${labs[$lab]})
IFS=${OFS}
url=${arr[0]}
user=${arr[1]}
token=${arr[2]}
lava_lab=${arr[3]}
token_file=$HOME/.local/lab-$lab-token
if [ -z ${user} ]; then
echo "WARNING: Lab ${lab}: missing user. Ignoring."
continue
fi
if [ -z ${token} ]; then
echo "WARNING: Lab ${lab}: missing token. Ignoring."
continue
fi
# LAVA URL with username
lava_url=${url/:\/\//:\/\/${user}\@}
full_url=${lava_url}
full_url+="RPC2/" # entry point for XML-RPC API
echo "LAVA auth-add for lab: $lab, URL: $full_url"
# lavacli auth using token
mkdir -p ~/.config
lavacli identities add --token ${token} --uri ${url}/RPC2 --username $user $lab
# lavacli: Find the LAVA lab that has the device available to run the job
echo -n "lavacli: Checking for $lava_device at $full_url... "
lavacli_line=$(lavacli -i $lab devices list | grep $lava_device | grep Good | head -1)
lavacli_line=$(echo "$lavacli_line" | tr -d '[:space:]')
if [ -z "$lavacli_line" ]; then
echo "not found."
fi
IFS=':'
arr=($lavacli_line)
device_status=${arr[1]}
IFS=${OFS}
if [ x"$device_status" = x"Idle,Good" ]; then
echo "lavacli: found a device available: $lavacli_line"
lavacli_dev=$(echo ${arr[0]} | sed 's/\*\([^(]*\).*/\1/')
lavacli_tags=$(lavacli -i $lab devices tags list $lavacli_dev | grep \*)
lavacli_tags=$(echo "$lavacli_tags" | sed 's/baylibre//' | sed 's/corelab//' | sed 's/docker//' | sed 's/\* \(\)/\1/' )
echo "Tags for $lavacli_dev: $lavacli_tags"
else
echo "lavacli: did not find any device available: $lavacli_line"
fi
# FIXME: encode this better , we might have multiple jobs already queued/running.
# We have to wait before we 'flood' the queue. Better here than to timeout later!
retries=1
if [ x"$device_status" = x"Reserved,Good" ]; then
retries=30
elif [ x"$device_status" = x"Running,Good" ]; then
retries=30
fi
# If the device is reserved poll it's status every minutes.
# The max polling time is set to $retries * 60 seconds = 10 minutes.
device_available=0
for i in `seq 1 $retries`
do
# device is only available if "idle" or "running"
# Look if the status of the board has changed from reserved in the lab
echo -n "Checking for $lava_device at $full_url... "
lavacli_line=$(lavacli -i $lab devices list | grep $lava_device | grep Good | head -1)
lavacli_line=$(echo "$lavacli_line" | tr -d '[:space:]')
if [ -z "$lavacli_line" ]; then
echo "not found."
break
fi
IFS=':'
arr=($lavacli_line)
device_status=${arr[1]}
IFS=${OFS}
if [ x"$device_status" = x"Reserved,Good" ]; then
echo "Device still reserved, retries left: $retries ."
elif [ x"$device_status" = x"Idle,Good" ]; then
# IDLE AND GOOD means we can grab it
device_available=1
break
elif [ x"$device_status" = x"Running,Good" ]; then
echo "Device still running (other job), retries left: $retries ."
fi
sleep 60s
done
if [ $device_available = 0 ]; then
echo " Not Available. Status: $device_status"
continue
else
echo " Found and available. Status: $device_status"
export LAVA_LAB=$lava_lab
break
fi
done
if [ "$device_available" -eq 0 ]; then
echo ""
echo "ERROR: device not found in any available lab."
exit 0
fi
# Re-enable error detection
set -e
|