Kontener Docker do zarządzania serwerami HP przez ILO

Możesz się zastanawiać, po co w tym wszystkim Docker? Jaka jest trudność w zalogowaniu się do interfejsu webowego ILO i skonfigurowaniu swojego serwera tak, jak potrzeba?
Tak samo myślałem, kiedy dostałem kilka starych, niepotrzebnych serwerów, które musiałem ponownie zainstalować (co nazywa się reprovision). Same serwery znajdują się za oceanem, więc jedyne, co jest dostępne, to interfejs webowy. Oczywiście potrzebowałem wejść do Wirtualnej Konsoli, aby wykonać kilka poleceń. I tu wszystko się zaczęło.
Jak wiadomo, dla różnych rodzajów wirtualnych konsol zwykle używa się Javy, zarówno w HP, jak i w Dell. Przynajmniej tak było kiedyś (a systemy są naprawdę stare). Jednak Firefox i Chrome już dawno przestały wspierać te aplety, a nowy IcedTea z tymi systemami również nie działa. Dlatego pojawiło się kilka opcji:

1. Zacząć konstruować zoo z przeglądarek i wersji Javy na moim komputerze, ta opcja odpadła od razu. Nie mam ochoty męczyć systemu dla kilku poleceń.
2. Uruchomić na wirtualnej maszynie coś wystarczająco starego (przeprowadzone eksperymenty wykazały, że potrzebna jest Java 6) i za jego pomocą skonfigurować wszystko, co potrzebne.
3. To samo co punkt 2, tylko w kontenerze, ponieważ kilku kolegów napotkało ten sam problem i znacznie łatwiej jest im przekazać link do kontenera na dockerhubie, niż obraz wirtualnej maszyny ze wszystkimi hasłami itd.
(W rzeczywistości do punktu 3 doszedłem dopiero po wykonaniu punktu 2)
Punkt 3 zrealizujemy dziś.

Moim głównym źródłem inspiracji były dwa projekty:
1. docker-baseimage-gui
2. docker-firefox-java
Generalnie pierwszy projekt docker-baseimage-gui już zawiera narzędzia i konfiguracje do uruchamiania aplikacji desktopowych w Dockerze. Zwykle musisz zdefiniować standardowe zmienne, a twoja aplikacja będzie dostępna przez przeglądarkę (websocket) lub VNC. W naszym przypadku będziemy uruchamiać przez Firefox i VNC, przez websocket się nie udało.
Na początku zainstalujmy potrzebne pakiety — 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

Teraz wystarczy wejść na stronę interfejsu ILO i wpisać swoje dane logowania. Uruchamiamy Firefox w autostarcie:

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

Zmienna środowiskowa HILO_HOST zawiera adres webowy naszego interfejsu ILO, na przykład myhp.example.com
Aby zautomatyzować logowanie, zrealizujmy autoryzację. Logowanie do ILO następuje standardowym żądaniem POST, w wyniku którego otrzymujesz JSON session_key, który następnie przekazujesz w żądaniu GET:
Obliczymy session_key za pomocą curl, jeśli zdefiniowane są zmienne środowiskowe HILO_USER i HILO_PASS:

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

Po tym, jak zapisaliśmy session_key w dockerze, możemy uruchomić VNC:

exec x11vnc -forever -create

Teraz po prostu łączymy się za pomocą VNC na porcie 5900 (lub innym, który wybierzesz) na localhost i wchodzimy do wirtualnej konsoli.
Cały kod znajduje się w repozytorium docker-ilo-client.
Pełna komenda do połączenia z 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

gdzie ADDRESS_OF_YOUR_HOST to nazwa hosta ILO, SOME_USERNAME — login i odpowiednio SOME_PASSWORD hasło do ILO.
Po tym wystarczy uruchomić dowolnego klienta VNC na adres: vnc://localhost:5900
Uzupełnienia i pull requesty są oczywiście mile widziane.

Podobny projekt istnieje do łączenia z interfejsami IDRAC maszyn DELL: docker-idrac6.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster