summaryrefslogtreecommitdiffstats
path: root/lava-slave/scripts/setup.sh
diff options
context:
space:
mode:
authorCorentin LABBE <clabbe@baylibre.com>2018-04-12 11:59:07 +0200
committerCorentin LABBE <clabbe@baylibre.com>2018-06-05 15:36:31 +0200
commit31555bcb6555d080e7072fba2fc8ccda0fd59eaa (patch)
treee70c096e7714be50f2d7b9f4419f07dbe4452ec7 /lava-slave/scripts/setup.sh
parent287e03c09e34ec77d696fcd7ad55912cc127a859 (diff)
Implement Multipleslave
This patch implement multiple slave support. Instead of having a maximum of one master and one slave in one docker image, it is now possible to have multiple slave accross several docker host. For helping this change, a new boards.yaml format is introduced (See README.md for details) Note that tokens.yaml is also squashed in boards.yaml
Diffstat (limited to 'lava-slave/scripts/setup.sh')
-rwxr-xr-xlava-slave/scripts/setup.sh93
1 files changed, 93 insertions, 0 deletions
diff --git a/lava-slave/scripts/setup.sh b/lava-slave/scripts/setup.sh
new file mode 100755
index 0000000..bf91c7a
--- /dev/null
+++ b/lava-slave/scripts/setup.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+if [ ! -e "/root/devices/$(hostname)" ];then
+ echo "Static slave for $LAVA_MASTER"
+ exit 0
+fi
+
+if [ -z "$LAVA_MASTER_URI" ];then
+ echo "ERROR: Missing LAVA_MASTER_URI"
+ exit 11
+fi
+
+echo "Dynamic slave for $LAVA_MASTER ($LAVA_MASTER_URI)"
+cd /root/lavacli
+LAVACLIOPTS="--uri $LAVA_MASTER_URI"
+
+# do a sort of ping for letting master to be up
+TIMEOUT=30
+while [ $TIMEOUT -ge 1 ];
+do
+ lavacli $LAVACLIOPTS device-types list 2>/dev/null >/dev/null
+ if [ $? -eq 0 ];then
+ TIMEOUT=0
+ else
+ echo "Wait for master...."
+ sleep 2
+ fi
+ TIMEOUT=$(($TIMEOUT-1))
+done
+
+# This directory is used for storing device-types already added
+mkdir -p /root/.lavadocker/
+if [ -e /root/device-types ];then
+ for i in $(ls /root/device-types/*jinja2)
+ do
+ devicetype=$(basename $i |sed 's,.jinja2,,')
+ echo "Adding custom $devicetype"
+ lavacli $LAVACLIOPTS device-types list || exit $?
+ touch /root/.lavadocker/devicetype-$devicetype
+ done
+fi
+
+for worker in $(ls /root/devices/)
+do
+ lavacli $LAVACLIOPTS workers list |grep -q $worker
+ if [ $? -eq 0 ];then
+ echo "Remains of $worker, cleaning it"
+ /usr/local/bin/retire.sh $LAVA_MASTER_URI $worker
+ #lavacli $LAVACLIOPTS workers update $worker || exit $?
+ else
+ echo "Adding worker $worker"
+ lavacli $LAVACLIOPTS workers add --description "LAVA dispatcher on $(cat /root/phyhostname)" $worker || exit $?
+ fi
+ if [ ! -z "$LAVA_DISPATCHER_IP" ];then
+ echo "Add dispatcher_ip $LAVA_DISPATCHER_IP to $worker"
+ /usr/local/bin/setdispatcherip.py $LAVA_MASTER_URI $worker $LAVA_DISPATCHER_IP || exit $?
+ fi
+ for device in $(ls /root/devices/$worker/)
+ do
+ devicename=$(echo $device | sed 's,.jinja2,,')
+ devicetype=$(grep -h extends /root/devices/$worker/$device| grep -o '[a-zA-Z0-9_-]*.jinja2' | sed 's,.jinja2,,')
+ if [ -e /root/.lavadocker/devicetype-$devicetype ];then
+ echo "Skip devicetype $devicetype"
+ else
+ echo "Add devicetype $devicetype"
+ lavacli $LAVACLIOPTS device-types list | grep -q "$devicetype[[:space:]]"
+ if [ $? -eq 0 ];then
+ echo "Skip devicetype $devicetype"
+ else
+ lavacli $LAVACLIOPTS device-types add $devicetype || exit $?
+ fi
+ touch /root/.lavadocker/devicetype-$devicetype
+ fi
+ echo "Add device $devicename on $worker"
+ lavacli $LAVACLIOPTS devices list -a | grep -q $devicename
+ if [ $? -eq 0 ];then
+ echo "$devicename already present"
+ #verify if present on another worker
+ #TODO
+ lavacli $LAVACLIOPTS devices show $devicename |grep ^worker |grep -q $worker
+ if [ $? -ne 0 ];then
+ echo "ERROR: $devicename already present on another worker"
+ exit 1
+ fi
+ lavacli $LAVACLIOPTS devices update --worker $worker --health UNKNOWN $devicename || exit $?
+ # always reset the device dict in case of update of it
+ lavacli $LAVACLIOPTS devices dict set $devicename /root/devices/$worker/$device || exit $?
+ else
+ lavacli $LAVACLIOPTS devices add --type $devicetype --worker $worker $devicename || exit $?
+ lavacli $LAVACLIOPTS devices dict set $devicename /root/devices/$worker/$device || exit $?
+ fi
+ done
+done