Docker-säiliö HP-palvelimien hallintaan ILO:n kautta

Saatat ehkä ihmetellä - miksi Docker on olemassa täällä? Mikä on ongelma ILO:n verkkokäyttöliittymään kirjautumisen ja palvelimen tarpeen mukaan?
Näin ajattelin, kun minulle annettiin pari vanhaa tarpeetonta palvelinta, jotka minun piti asentaa uudelleen (niin sanottu uudelleenkäyttö). Itse palvelin sijaitsee ulkomailla, ainoa saatavilla oleva asia on verkkokäyttöliittymä. No, vastaavasti minun piti mennä virtuaalikonsoliin suorittamaan joitain komentoja. Siitä se alkoi.
Kuten tiedät, Javaa käytetään yleensä erilaisissa virtuaalikonsoleissa, joko HP:ssa tai Dellissä. Ainakin näin se oli ennen (ja järjestelmät ovat hyvin vanhoja). Mutta Firefox ja Chrome lopettivat näiden sovelmien tukemisen kauan sitten, eikä uusi IcedTea toimi näiden järjestelmien kanssa. Siksi esille tuli useita vaihtoehtoja:

1. Aloita eläintarhan rakentaminen koneellesi selaimista ja Java-versioista, tätä vaihtoehtoa ei enää tarvittu. Ei ole halua pilkata järjestelmää muutaman komennon vuoksi.
2. Käynnistä virtuaalikoneella jotain melko vanhaa (kokeellisesti kävi ilmi, että tarvitset Java 6:n) ja konfiguroi kaikki tarvitsemasi sen kautta.
3. Sama kuin kohta 2, vain säilössä, koska useat kollegat kohtasivat saman ongelman ja heille on paljon helpompi siirtää linkki Dockerhubissa olevaan säilöyn kuin virtuaalikoneen kuva, jossa on kaikki salasanat jne.
(Itse asiassa pääsin kohtaan 3 vasta sen jälkeen, kun tein kohdan 2)
Teemme tänään kohdan 3.

Minua inspiroi pääasiassa kaksi projektia:
1. docker-baseimage-gui
2. docker-firefox-java
Periaatteessa ensimmäinen projekti docker-baseimage-gui sisältää jo apuohjelmia ja määrityksiä työpöytäsovellusten ajamiseen Dockerissa. Yleensä sinun on määritettävä vakiomuuttujat ja sovelluksesi on käytettävissä selaimen (websocket) tai VNC:n kautta. Meidän tapauksessamme käynnistämme Firefoxin ja VNC:n kautta; se ei toiminut websocketin kautta.
Ensin asennetaan tarvittavat paketit - Java 6 ja 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

Nyt sinun tarvitsee vain mennä ILO:n käyttöliittymäsivulle ja syöttää käyttäjätunnuksesi ja salasanasi. Käynnistä Firefox automaattisessa käynnistyksessä:

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

Ympäristömuuttuja HILO_HOST sisältää esimerkiksi ILO-rajapinnamme web-osoitteen myhp.example.com
Automatisoidaksesi kirjautumisen, lisätään valtuutus. Kirjautuminen ILO:hon tapahtuu tavallisella POST-pyynnöllä, minkä seurauksena saat JSON session_keyn, jonka välität sitten GET-pyynnössä:
Lasketaan session_key curlilla, jos ympäristömuuttujat HILO_USER ja HILO_PASS on määritelty:

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

Kun olemme tallentaneet session_keyn Dockeriin, voimme ajaa VNC:tä:

exec x11vnc -forever -create

Nyt yhdistämme vain VNC:n kautta porttiin 5900 (tai mihin tahansa muuhun valitsemaasi) localhostiin ja siirrymme virtuaalikonsoliin.
Kaikki koodi on arkistossa docker-ilo-asiakas.
Täysi komento muodostaa yhteys ILO:han:

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

missä ADDRESS_OF_YOUR_HOST on ILO:n isäntänimi, SOME_USERNAME on kirjautumistunnus ja vastaavasti SOME_PASSWORD ILO:n salasana.
Käynnistä sen jälkeen mikä tahansa VNC-asiakas osoitteeseen: vnc://localhost:5900
Lisäykset ja vetopyynnöt ovat tietysti tervetulleita.

Samanlainen projekti on olemassa DELL-koneiden IDRAC-liitäntöjen yhdistämiseksi: docker-idrac6.

Lähde: will.com

Lisää kommentti