Contenitore Docker per la gestione dei server HP tramite ILO

Probabilmente ti starai chiedendo: perché Docker esiste qui? Qual è il problema con l'accesso all'interfaccia web dell'ILO e la configurazione del server secondo necessità?
Questo è quello che ho pensato quando mi hanno dato un paio di vecchi server non necessari che dovevo reinstallare (quello che viene chiamato reprovision). Il server stesso si trova all'estero, l'unica cosa disponibile è l'interfaccia web. Bene, di conseguenza, sono dovuto andare alla console virtuale per eseguire alcuni comandi. È lì che è iniziato tutto.
Come sai, Java viene solitamente utilizzato per vari tipi di console virtuali, sia in HP che in Dell. Almeno così era una volta (e i sistemi sono molto vecchi). Ma Firefox e Chrome hanno smesso di supportare queste applet da tempo e il nuovo IcedTea non funziona con questi sistemi. Sono quindi emerse diverse opzioni:

1. Inizia a costruire uno zoo dai browser e dalle versioni Java sul tuo computer, questa opzione non era più necessaria. Non c'è alcun desiderio di deridere il sistema per il bene di un paio di comandi.
2. Avvia qualcosa di piuttosto vecchio sulla macchina virtuale (si è scoperto sperimentalmente che hai bisogno di Java 6) e configura tutto ciò di cui hai bisogno tramite esso.
3. Come al punto 2, solo in un contenitore, poiché diversi colleghi hanno riscontrato lo stesso problema ed è molto più semplice trasferire loro un collegamento a un contenitore su Dockerhub che un'immagine di macchina virtuale, con tutte le password, ecc.
(In effetti, sono arrivato al punto 3 solo dopo aver fatto il punto 2)
Faremo il punto 3 oggi.

Mi sono ispirato principalmente a due progetti:
1. docker-baseimage-gui
2. docker-firefox-java
Fondamentalmente il primo progetto docker-baseimage-gui contiene già utilità e configurazioni per l'esecuzione di applicazioni desktop in Docker. In genere è necessario definire variabili standard e la tua applicazione sarà accessibile tramite browser (websocket) o VNC. Nel nostro caso, lo avvieremo tramite Firefox e VNC; non ha funzionato tramite websocket.
Per prima cosa installiamo i pacchetti necessari: Java 6 e 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

Ora non devi fare altro che andare sulla pagina dell'interfaccia dell'ILO e inserire nome utente e password. Avvia Firefox in avvio automatico:

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

La variabile d'ambiente HILO_HOST contiene, ad esempio, l'indirizzo web della nostra interfaccia ILO myhp.esempio.com
Per automatizzare l'accesso, aggiungiamo l'autorizzazione. L'accesso a ILO avviene con una normale richiesta POST, a seguito della quale ricevi una session_key JSON, che poi passi in una richiesta GET:
Calcoliamo session_key tramite curl se sono definite le variabili d'ambiente HILO_USER e HILO_PASS:

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

Dopo aver registrato session_key nella finestra mobile, possiamo avviare VNC:

exec x11vnc -forever -create

Ora ci colleghiamo semplicemente tramite VNC alla porta 5900 (o qualsiasi altra a tua scelta) su localhost e andiamo alla console virtuale.
Tutto il codice è nel repository docker-ilo-client.
Comando completo per connettersi all'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

dove ADDRESS_OF_YOUR_HOST è il nome host ILO, SOME_USERNAME è il login e, di conseguenza, SOME_PASSWORD la password per ILO.
Successivamente, avvia semplicemente qualsiasi client VNC all'indirizzo: vnc://localhost:5900
Aggiunte e richieste pull sono, ovviamente, benvenute.

Esiste un progetto simile per la connessione alle interfacce IDRAC delle macchine DELL: docker-idrac6.

Fonte: habr.com

Aggiungi un commento