Docker-Container zur Verwaltung von HP-Servern über ILO.

Sie fragen sich vielleicht, warum hier Docker im Spiel ist? Was ist das Problem, den Webinterface des ILO zu nutzen und den Server richtig zu konfigurieren?
So dachte ich auch, als ich ein paar alte, unnötige Server bekam, die ich neu installieren musste (das nennt man reprovisioning). Die Server befinden sich über den Ozean, und das Einzige, was verfügbar ist, ist das Webinterface. Auch benötigte ich den Zugang zur virtuellen Konsole, um einige Befehle auszuführen. Hier begann das Problem.
Wie bekannt ist, verwenden verschiedene virtuelle Konsolen normalerweise Java, sowohl bei HP als auch bei Dell. Zumindest war das früher so (und die Systeme sind sehr alt). Aber Firefox und Chrome unterstützen diese Applets schon lange nicht mehr, und auch der neue IcedTea funktioniert mit diesen Systemen nicht. Daher zeichnen sich mehrere Optionen ab:

1. Einen Zoo aus Browsern und Java-Versionen auf meinem Rechner zu konstruieren; dieser Ansatz wurde sofort verworfen. Es besteht keine Lust, die Systeme für ein paar Befehle zu quälen.
2. Etwas ausreichend Altes in einer virtuellen Maschine zu starten (erfahrungsgemäß stellte sich heraus, dass Java 6 erforderlich ist) und darüber alles zu konfigurieren, was benötigt wird.
3. Das Gleiche wie Punkt 2, aber in einem Container, da mehrere Kollegen auf das gleiche Problem gestoßen sind und es wesentlich einfacher ist, ihnen den Link zum Container auf Docker Hub zu senden, als das Image einer virtuellen Maschine mit all den Passwörtern usw.
(Tatsächlich bin ich erst zu Punkt 3 gekommen, nachdem ich Punkt 2 abgeschlossen hatte)
Punkt 3 werden wir heute umsetzen.

Ich habe mich hauptsächlich von zwei Projekten inspirieren lassen:
1. docker-baseimage-gui
2. docker-firefox-java
Im Grunde genommen enthält das erste Projekt bereits die Tools und Konfigurationen, um Desktop-Anwendungen in Docker auszuführen. In der Regel müssen Sie Standardvariablen festlegen, damit Ihre Anwendung über den Browser (WebSocket) oder VNC zugänglich ist. In unserem Fall werden wir über Firefox und VNC starten; über WebSocket hat es nicht geklappt. docker-baseimage-gui уже содержит утилиты и конфигурации для запуска десктопных приложений в докере. Обычно вам нужно определить стандартные переменные и ваше приложение будет доступно через браузер (websocket) или VNC. В нашем случае мы будет запускать через Firefox и VNC, через websocket не получилось.
Zuerst installieren wir die benötigten Pakete – Java 6 und IcedTea:

RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list &&
apt-get update &&
apt-get -y upgrade &&
apt-get -y install firefox
nano curl
icedtea-6-plugin
icedtea-netx
openjdk-6-jre
openjdk-6-jre-headless
tzdata-java

Nun müssen wir nur noch die ILO-Interface-Seite aufrufen und unseren Benutzername und Passwort eingeben. Wir starten Firefox im Autostart:

Führen Sie bash -c 'echo "exec openbox-session &" >> ~/.xinitrc' &&
bash -c 'echo "firefox ${HILO_HOST}">> ~/.xinitrc' &&
bash -c 'chmod 755 ~/.xinitrc'

Die Umgebungsvariable HILO_HOST enthält die Webadresse unseres ILO-Interfaces, zum Beispiel myhp.example.com
Um den Login zu automatisieren, lassen Sie uns die Authentifizierung einrichten. Der Login in ILO erfolgt durch einen gewöhnlichen POST-Request, aus dem Sie den JSON session_key erhalten, den Sie dann in einem GET-Request übermitteln:
Berechnen Sie den session_key per curl, wenn die Umgebungsvariablen HILO_USER und HILO_PASS definiert sind:

export HOME=/config
export HILO_HOST=${HILO_HOST%%/}
SESSION_KEY=""
data="{"method":"login","user_login":"${HILO_USER}","password":"${HILO_PASS}"}"
if [[ -n "${HILO_USER}" && -n "${HILO_PASS}" ]]; then
    SESSION_KEY=$(curl -k -X POST "${HILO_HOST}/json/login_session" -d "$data" 2>/dev/null | grep -Eo '"session_key":"[^"]+' | sed 's/"session_key":"//')
fi
echo "SESSION_KEY=$SESSION_KEY"
echo $SESSION_KEY > /session_key

Nachdem wir den session_key im Docker gespeichert haben, können wir VNC starten:

exec x11vnc -forever -create

Jetzt verbinden wir uns einfach per VNC mit Port 5900 (oder einem anderen Ihrer Wahl) auf localhost und gelangen in die virtuelle Konsole.
Der gesamte Code befindet sich im Repository docker-ilo-client.
Der vollständige Befehl zum Verbinden mit ILO:

docker run -d --rm --name ilo-client -p 5900:5900 -e HILO_HOST=https://ADDRESS_OF_YOUR_HOST -e HILO_USER=SOME_USERNAME -e HILO_PASS=SOME_PASSWORD sshnaidm/docker-ilo-client

wobei ADDRESS_OF_YOUR_HOST der Hostname des ILO ist, SOME_USERNAME der Benutzername und entsprechend SOME_PASSWORD das Passwort für ILO.
Nach diesem Schritt starten Sie einfach jeden VNC-Client an die Adresse: vnc://localhost:5900
Ergänzungen und Pull-Requests sind natürlich willkommen.

Ein ähnliches Projekt besteht für die Verbindung zu IDRAC-Schnittstellen von DELL-Maschinen: docker-idrac6.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster