Newer
Older
API_BASE_URL=https://labmanager-api.edu-al.unipmn.it/api/1.0
function getTokenJSON() {
echo `curl -s -k --max-time 10 -X POST -H "Content-Type: application/json" -d "{\"login\":\"guest\",\"pwd\":\"\"}" ${API_BASE_URL}/login`
}
function jsonValue() {
KEY=$1
num=$2
awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/\042'$KEY'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p
}
stop() {
echo "STOP ESAME-GET-CONFIG"
}
start() {
echo "START ESAME-GET-CONFIG"
TOKEN_JSON=$(getTokenJSON)
TOKEN=`echo ${TOKEN_JSON} | jsonValue token 1`
MACHINE_NAME=`hostname`
MACHINE_JSON=`/usr/bin/curl -s -k --max-time 10 -H "Authorization: Bearer ${TOKEN}" -X GET ${API_BASE_URL}/machines/name/${MACHINE_NAME}`
MACHINE_ID=`echo $MACHINE_JSON | jsonValue id 1`
MACHINE_CONFIGS_ID=`echo $MACHINE_JSON | jsonValue configs_id 1`
MACHINE_CONFIGS_ID_PREV=''
if [[ -e /local/config_id ]]
then
MACHINE_CONFIGS_ID_PREV=`cat /local/config_id`
fi
echo "TOKEN_JSON: $TOKEN_JSON"
echo "TOKEN: $TOKEN"
echo "MACHINE_NAME: $MACHINE_NAME"
echo "MACHINE_JSON: $MACHINE_JSON"
echo "MACHINE_ID: $MACHINE_ID"
echo "MACHINE_CONFIGS_ID: $MACHINE_CONFIGS_ID"
echo "MACHINE_CONFIGS_ID_PREV: $MACHINE_CONFIGS_ID_PREV"
# non sono riuscito a contattatare il ws
if [[ "$MACHINE_CONFIGS_ID" == "" ]]
then
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
echo "Error: WS unreachable or wrong credentials"
exit 1
fi
# back config files up
cp -f /local/esame-machine.conf /local/esame-machine.conf.prev 2>&1
cp -f /local/iptables /local/iptables.prev 2>&1
# get configuration file
HTTP_STATUS=`/usr/bin/curl -s -k -w "%{http_code}" -o /local/esame-machine.conf --max-time 10 --header "Authorization: Bearer ${TOKEN}" -X GET ${API_BASE_URL}/machines/${MACHINE_ID}/configfile`
if [[ $HTTP_STATUS -ne 200 ]]
then
echo "Error downloading config file (http_status=$HTTP_STATUS)"
exit 1
else
echo "Downloaded config file (http_status=$HTTP_STATUS)"
fi
# get ipconfig file
HTTP_STATUS=`/usr/bin/curl -s -k -w "%{http_code}" -o /local/iptables --max-time 10 --header "Authorization: Bearer ${TOKEN}" -X GET ${API_BASE_URL}/machines/${MACHINE_ID}/ipconfigfile`
if [[ $HTTP_STATUS -ne 200 ]]
then
echo "Error downloading iptables config file (http_status=$HTTP_STATUS)"
exit 1
else
echo "Downloaded iptables config file (http_status=$HTTP_STATUS)"
fi
# configuration profile is changed
if [[ "$MACHINE_CONFIGS_ID" != "$MACHINE_CONFIGS_ID_PREV" ]]
then
# update config_id file
echo ${MACHINE_CONFIGS_ID} > /local/config_id
# no exam, set normal target
if [[ "$MACHINE_CONFIGS_ID" -eq "0" ]]
then

Alberto LIVIO BECCARIA
committed
# stop the timer to avoid executing this script again
/usr/bin/systemctl stop esame-apply-config.timer
# stop some services to revert system files
/usr/bin/systemctl stop esame-kioskmode
/usr/bin/systemctl stop esame-kdm-autologin
/usr/bin/systemctl stop esame-virtualbox
rm /local/esame-machine.conf 2>&1
rm /local/esame-machine.conf.prev 2>&1
rm /local/iptables 2>&1
rm /local/iptables.prev 2>&1
echo "Normal!"
/usr/bin/systemctl set-default graphical.target
reboot
else
echo "Exam!"

Alberto LIVIO BECCARIA
committed
/usr/bin/systemctl stop esame-apply-config.timer
/usr/bin/systemctl set-default esame.target
reboot
fi
else
# Update this machine's current config id
HTTP_STATUS=`/usr/bin/curl -s -k -w "%{http_code}" -o /dev/null --max-time 10 -H "Content-Type: application/json" -H "Authorization: Bearer ${TOKEN}" \
-X PUT -d "{\"current_configs_id\":\"$MACHINE_CONFIGS_ID\"}" ${API_BASE_URL}/machines/${MACHINE_ID}/currentconfig`
if [[ $HTTP_STATUS -ne 200 ]]
then
echo "Error updating current config (http_status=$HTTP_STATUS)"
exit 1
echo "Updated current config (http_status=$HTTP_STATUS)"
fi
fi
# Runtime parameters
if [[ "$MACHINE_CONFIGS_ID" -ne "0" ]]
then
# check if parameters are changed
cmp --silent /local/esame-machine.conf /local/esame-machine.conf.prev
if [[ $? -ne 0 ]]
then
/usr/bin/systemctl daemon-reload
echo "Configuration parameters changed: restart some services... "
# restart some exam services
echo -n "USB..."
/usr/bin/systemctl restart esame-usb
echo " done."
echo -n "Firefox home..."
/usr/bin/systemctl restart esame-firefox-home
echo " done."
echo
echo "All done."
fi
fi
}
args=("$@")
case "$1" in
'start')
stop
start
;;
echo "Usage: $0 { start | stop | restart }";
exit 1;
;;