Docker-containers voor het beheren van HP-servers via ILO

Je vraagt je misschien af — wat is Docker hier ginds? Wat is het probleem met het inloggen op de webinterface van ILO en het configureren van je server zoals nodig?
Dat dacht ik ook toen ik een paar oude onnodige servers kreeg die ik opnieuw moest installeren (wat reprovision wordt genoemd). De servers bevinden zich aan de andere kant van de oceaan, het enige wat beschikbaar is, is de webinterface. En dus moest ik toegang krijgen tot de Virtual Console om een paar commando's uit te voeren. En daar begon het.
Zoals bekend worden verschillende soorten virtuele consoles meestal met Java gebruikt, zowel bij HP als bij Dell. Althans, dat was vroeger zo (en de systemen zijn heel oud). Maar Firefox en Chrome ondersteunen deze applets al lang niet meer en de nieuwe IcedTea werkt niet met deze systemen. Daarom zijn er een paar opties ontstaan:

1. Begin met het samenstellen van een zoo van browsers en Java versies op mijn machine, deze optie viel al snel af. Ik heb geen zin om het systeem te tortureren voor een paar commando's.
2. Draai iets ouder op een virtuele machine (uit ervaring bleek dat Java 6 nodig is) en configureer alles wat nodig is via die machine.
3. Hetzelfde als punt 2, maar dan in een container, aangezien verschillende collega’s met hetzelfde probleem te maken kregen en het veel gemakkelijker is om hen een link naar de container op dockerhub te geven dan een virtuele machine image, met al de wachtwoorden enzovoort.
(Eigenlijk kwam ik pas bij punt 3, nadat ik punt 2 had gedaan.)
Vandaag gaan we punt 3 uitvoeren.

Ik was vooral geïnspireerd door twee projecten:
1. docker-baseimage-gui
2. docker-firefox-java
In principe bevat het eerste project docker-baseimage-gui al utiliteiten en configuraties voor het draaien van desktopapplicaties in Docker. Gewoonlijk moet je standaardvariabelen definiëren en je applicatie is dan toegankelijk via de browser (websocket) of VNC. In ons geval gaan we draaien via Firefox en VNC, via websocket lukte het niet.
Laten we eerst de benodigde pakketten installeren — Java 6 en 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

Nu is het tijd om naar de ILO interface pagina te gaan en je gebruikersnaam en wachtwoord in te voeren. We starten Firefox in de autostart:

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

De omgevingsvariabele HILO_HOST bevat het webadres van onze ILO interface, bijvoorbeeld myhp.example.com
Voor automatisering van de login laten we autorisatie toevoegen. Inloggen op ILO gebeurt met een gewone POST-aanroep, waardoor je een JSON session_key ontvangt, die je vervolgens in een GET-aanroep doorgeeft:
Laten we de session_key berekenen via curl, als de omgevingsvariabelen HILO_USER en HILO_PASS zijn gedefinieerd:

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

Nadat we de session_key in Docker hebben opgeslagen, kunnen we VNC starten:

exec x11vnc -forever -create

Verbind nu gewoon via VNC met poort 5900 (of een andere naar keuze) op localhost en ga naar de virtuele console.
De volledige code bevindt zich in de repository docker-ilo-client.
De complete opdracht om verbinding te maken met 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

waar ADDRESS_OF_YOUR_HOST de hostnaam van ILO is, SOME_USERNAME de inlognaam en respectievelijk SOME_PASSWORD het wachtwoord voor ILO.
Daarna start u gewoon een VNC-client op het adres: vnc://localhost:5900
Aanvullingen en pull requests zijn uiteraard welkom.

Een vergelijkbaar project bestaat voor verbinding met de IDRAC-interfaces van DELL-machines: docker-idrac6.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster