This test checks if the update-resin-supervisor script correctly gets the supervisor information from the API.
- connect to the host OS
- copy and paste the below script into the shell to run it - it will take the device's credentials, calls the API for the supervisor for cross-check, update the API entry for this device, and calls the supervisor updater to check if it finds the updated info.
source /etc/resin-supervisor/supervisor.conf
if [ -f "/mnt/boot/config.json" ]; then
CONFIGJSON=/mnt/boot/config.json
elif [ -f "/mnt/conf/config.json" ]; then
CONFIGJSON=/mnt/conf/config.json
fi
if [ -z "$SUPERVISOR_TAG" ]; then
echo "Couldn't extract SUPERVISOR_TAG from the supervisor.conf"
elif [ -z "$CONFIGJSON" ]; then
echo "Couldn't find config.json, cannot continue".
else
APIKEY="$(jq -r '.apiKey // .deviceApiKey' "${CONFIGJSON}")"
DEVICEID="$(jq -r '.deviceId' "${CONFIGJSON}")"
API_ENDPOINT="$(jq -r '.apiEndpoint' "${CONFIGJSON}")"
SLUG="$(jq -r '.deviceType' "${CONFIGJSON}")"
echo "SUPERVISOR_TAG: $SUPERVISOR_TAG"
SUPERVISOR_ID=$(curl -s "${API_ENDPOINT}/v3/supervisor_release?\$select=id,image_name&\$filter=((device_type%20eq%20'$SLUG')%20and%20(supervisor_version%20eq%20'$SUPERVISOR_TAG'))&apikey=${APIKEY}" | jq -e -r '.d[0].id')
echo "Extracted supervisor ID: $SUPERVISOR_ID"
API_REPLY=$(curl -s "${API_ENDPOINT}/v2/device($DEVICEID)?apikey=$APIKEY" -X PATCH -H 'Content-Type: application/json;charset=UTF-8' --data-binary "{\"supervisor_release\": \"$SUPERVISOR_ID\"}")
if [ "$API_REPLY" = "OK" ]; then
if update-resin-supervisor | grep "Supervisor configuration found from API." ; then
TEST_OK=yes
fi
else
echo "Couldn't set Supervisor release in the API"
fi
fi
if [ "$TEST_OK" = "yes" ]; then
echo "Test SUCCESSFUL."
else
echo "Test FAILED."
fi
Setting the supervisor should output the supervisor release ID and an OK for the set:
Extracted supervisor ID: 968
If you see Extracted supervisor ID: null, then check https://api.resin.io/v4/supervisor_release whether there's a supervisor version equal to SUPERVISOR_TAG released for the given device type. If there isn't, ping @team in i/supervisor, and retry the test when the supervisor is released properly.
The update-resin-supervisor run should have Supervisor configuration found from API., this signals that the script has gotten the supervisor ID and information correctly from the API.
If the test successful, you should see a Test SUCCESSFUL. in the end, if any of the steps have failed, then you'll see a Test FAILED.