Wer kennt das nicht: Da hast Du einen Unifi Controller laufen und kriegst es nicht mit, dass deine Software schon diverse Stadien der Verwesung durchlaufen hat.

Aber da kann man was machen. Mit CheckMK. Der Unifi Controller läuft in diesem Fall in einem Debian Container unter Proxmox VE. Da läuft zwar unattended-upgrades, die Unifi Controller Software ist aber aus Gründen geblacklistet.

Dafür läuft ein CheckMK Agent in dem Container und ein lokaler Check (Skript im Verzeichnis /usr/lib/check_mk_agent/local/), der per API-Request überwacht, ob es für den Controller neue Software gibt.

Warum ich das hier erwähnenswert finde ist die Tatsache, dass ich mir bezüglich API und Unifi einen Wolf gesucht habe. Es gibt anscheinend keine offizielle Dokumentation, im Netz habe ich lediglich einen Artikel im “Ubiquity Community Wiki” gefunden, in dem sie sagen, sie hätten die API-Funktionalität dann mal “reverse engineered”. Und ein paar Projekte auf Github, aber so wie das aussieht keine Offiziellen von Ubi. Schade.

User/Passwort muss hart kodiert werden (Zeile “LOGIN”). Am besten für diesen Zweck einen eigenen Benutzer anlegen. Also nicht den User “admin” nehmen. War Spass. Kein Admin mit Gehirn würde einen Admin User für API Calls nehmen.

Oder? 😏

#!/bin/bash

BASE=https://127.0.0.1:8443
SITE=default
COOKIE=/tmp/unifi.cookie

LOGIN=`curl --tlsv1 --silent --cookie $COOKIE --cookie-jar $COOKIE --insecure --data '{"username":"<API-User>","password":"<Passwort>"}' $BASE/api/login | jq -r .meta.rc`

if [[ "$LOGIN" == "ok" ]]; then
VERSION=`curl --tlsv1 --silent --cookie $COOKIE --cookie-jar $COOKIE --insecure $BASE/api/s/$SITE/stat/sysinfo | jq -r '.data[].version'`
UPGRADE=`curl --tlsv1 --silent --cookie $COOKIE --cookie-jar $COOKIE --insecure $BASE/api/s/$SITE/stat/sysinfo | jq -r '.data[].upgrade_available'`
if [[ "$UPGRADE" == "false" ]]; then
      echo "0 \"Unifi Controller Version\" - Unifi Controller Version: $VERSION (Current)"
   else
      echo "1 \"Unifi Controller Version\" - Unifi Controller Version: $VERSION (Upgrade available)"
   fi
else
   echo "2 \"Unifi Controller Version\" - Login error"
fi

Anmerkung: Das Cookie fungiert übrigens als “Einmal-Passwort” und lässt sich nicht wiederverwenden.

Wenn man die Site “default” nicht verwendet, kann man die verwendeten Sites im Übrigen mit

!/bin/bash
COOKIE=/tmp/cookie.txt
curl --tlsv1 --silent --cookie $COOKIE --cookie-jar $COOKIE --insecure --data '{"username":"<API-User>","password":"<Password>"}' https://127.0.0.1:8443/api/login | jq -r .meta.rc
curl --tlsv1 --silent --cookie $COOKIE --cookie-jar $COOKIE --insecure https://127.0.0.1:8443/api/self/sites | jq -r '.data[]'
rm $COOKIE

abfragen.

:wq