Container Docker pentru gestionarea serverelor HP prin ILO

Probabil te întrebi - de ce Docker aici? Care este problema de a accesa interfața web ILO și de a configura serverul așa cum trebuie?
Asta am gândit și eu când mi-au dat câteva servere vechi de care nu mai aveau nevoie și pe care trebuia să le reinstalez (ceea ce se numește reprovision). Servere sunt situate peste ocean, singurul acces posibil este interfața web. Și, bineînțeles, trebuia să intru în Consola Virtuală pentru a executa câteva comenzi. Așa a început totul.
După cum se știe, pentru diferite tipuri de console virtuale se folosește de obicei Java, atât la HP, cât și la Dell. Cel puțin așa era înainte (și sistemele sunt foarte vechi). Dar Firefox și Chrome nu au mai susținut aceste applete de multă vreme, iar noul IcedTea nu funcționează cu aceste sisteme. Prin urmare s-au conturat câteva opțiuni:

1. Să încep să construiesc un fel de grădină zoologică din browsere și versiuni de Java pe mașina mea, această opțiune a fost abandonată imediat. Nu am nicio dorință de a tortura sistemul pentru câteva comenzi.
2. Să lansez pe o mașină virtuală ceva suficient de vechi (am descoperit experimental că este nevoie de Java 6) și prin intermediul acesteia să configurez tot ce este necesar.
3. Același lucru ca la punctul 2, dar într-un container, deoarece câțiva colegi s-au întâlnit cu aceeași problemă și este mult mai simplu să le dau un link către container pe dockerhub decât imaginea unei mașini virtuale, cu toate parolele etc.
(De fapt, am ajuns la punctul 3 abia după ce am realizat punctul 2)
Punctul 3 îl vom face astăzi.

M-am inspirat în principal din două proiecte:
1. docker-baseimage-gui
2. docker-firefox-java
În principiu, primul proiect docker-baseimage-gui deja conține utilitare și configurații pentru rularea aplicațiilor desktop în Docker. În general, trebuie să definești variabilele standard și aplicația ta va fi disponibilă prin browser (websocket) sau VNC. În cazul nostru, vom rula prin Firefox și VNC, nu am reușit prin websocket.
Mai întâi vom instala pachetele necesare - Java 6 și 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

Acum trebuie să accesezi pagina interfeței ILO și să introduci numele de utilizator și parola. Lansăm Firefox la auto-start:

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

Variabila de mediu HILO_HOST conține adresa web a interfeței noastre ILO, de exemplu myhp.example.com
Pentru automatizarea autentificării, haideți să implementăm autorizarea. Autentificarea în ILO se face printr-o cerere POST obișnuită, ca rezultat obținând un JSON session_key, pe care apoi îl transmiți într-o cerere GET:
Calculăm session_key prin curl, dacă variabilele de mediu HILO_USER și HILO_PASS sunt definite:

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

După ce am scris session_key în Docker, putem porni VNC:

exec x11vnc -forever -create

Acum pur și simplu ne conectăm prin VNC la portul 5900 (sau orice alt port la alegerea dumneavoastră) pe localhost și intrăm în consola virtuală.
Tot codul se găsește în repository-ul docker-ilo-client.
Comanda completă pentru conectarea la 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

unde ADDRESS_OF_YOUR_HOST este numele gazdei ILO, SOME_USERNAME — utilizatorul și respectiv SOME_PASSWORD este parola pentru ILO.
După aceasta, pur și simplu porniți orice client VNC la adresa: vnc://localhost:5900
Contribuțiile și cererile de pull sunt binevenite, desigur.

Un proiect similar există pentru conectarea la interfețele IDRAC ale serverelor DELL: docker-idrac6.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster