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.

Update März 2023: Gibt ja doch ne “Doku”

Die Credentials packt ihr in eine Json-Datei (ins User-Home & chmod 600) in der Form

{"username":"<API-User>","password":"<Passwort>"}

Wichtig: Das muss in einer Zeile stehen, sonst müsst ihr unnötige weitere Dinge tun. Am besten für diesen Zweck einen eigenen Benutzer anlegen. Also nicht den User “admin” nehmen. War Spass. Niemand würde einen Admin User für API Calls nehmen…

(ツ)

#!/bin/bash

BASE=https://127.0.0.1:8443
SITE=default
COOKIE=$(mktemp)
CREDS=$(<~/.unifi-creds.json)

LOGIN=`curl --tlsv1 --silent --cookie $COOKIE --cookie-jar $COOKIE --insecure --data $CREDS $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

if [ -f $COOKIE ]; then
    rm $COOKIE
fi

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

!/bin/bash
COOKIE=$(mktemp)
CREDS=$(<creds.json)
curl --tlsv1 --silent --cookie $COOKIE --cookie-jar $COOKIE --insecure --data $CREDS 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