Kontener Docker do zarządzania serwerami HP za pośrednictwem ILO

Być może zastanawiasz się – dlaczego Docker tutaj istnieje? Jaki jest problem z zalogowaniem się do interfejsu internetowego ILO i skonfigurowaniem serwera według potrzeb?
Właśnie to pomyślałem, gdy dali mi kilka starych, niepotrzebnych serwerów, które musiałem ponownie zainstalować (co nazywa się ponownym udostępnieniem). Sam serwer znajduje się za granicą, dostępny jest jedynie interfejs WWW. Cóż, w związku z tym musiałem przejść do konsoli wirtualnej, aby uruchomić niektóre polecenia. Od tego się zaczęło.
Jak wiadomo, Java jest zwykle używana w różnego rodzaju konsolach wirtualnych, czy to w HP, czy Dell. Przynajmniej tak było kiedyś (a systemy są bardzo stare). Jednak Firefox i Chrome już dawno przestały wspierać te aplety, a nowa IcedTea nie współpracuje z tymi systemami. Dlatego pojawiło się kilka opcji:

1. Zacznij budować zoo z przeglądarek i wersji Java na swoim komputerze, ta opcja nie była już potrzebna. Nie ma potrzeby kpić z systemu ze względu na kilka poleceń.
2. Uruchom na maszynie wirtualnej coś dość starego (eksperymentalnie okazało się, że potrzebujesz Java 6) i skonfiguruj za jego pośrednictwem wszystko, czego potrzebujesz.
3. To samo co w punkcie 2, tylko w kontenerze, ponieważ kilku kolegów spotkało się z tym samym problemem i dużo łatwiej jest im przenieść link do kontenera na Dockerhub niż obraz maszyny wirtualnej, ze wszystkimi hasłami itp.
(Właściwie doszedłem do punktu 3 dopiero po zrobieniu punktu 2)
Dzisiaj zrobimy punkt 3.

Inspirowałem się głównie dwoma projektami:
1. docker-baseimage-gui
2. docker-firefox-java
W zasadzie pierwszy projekt docker-baseimage-gui zawiera już narzędzia i konfiguracje do uruchamiania aplikacji komputerowych w Dockerze. Zazwyczaj musisz zdefiniować standardowe zmienne, a Twoja aplikacja będzie dostępna poprzez przeglądarkę (websocket) lub VNC. W naszym przypadku uruchomimy przez przeglądarkę Firefox i VNC; nie działało to przez websocket.
Najpierw zainstalujmy niezbędne 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, że przejdziesz do strony interfejsu ILO i wprowadzisz swoją nazwę użytkownika i hasło. Uruchom przeglądarkę Firefox w trybie autostartu:

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

Zmienna środowiskowa HILO_HOST zawiera na przykład adres internetowy naszego interfejsu ILO myhp.example.com
Aby zautomatyzować logowanie, dodajmy autoryzację. Logowanie do ILO odbywa się za pomocą zwykłego żądania POST, w wyniku czego otrzymujesz klucz sesji JSON, który następnie przekazujesz w żądaniu GET:
Obliczmy session_key poprzez curl, jeśli zdefiniowano zmienne środowiskowe HILO_USER i 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

Po zarejestrowaniu klucza sesji w oknie dokowanym możemy uruchomić VNC:

exec x11vnc -forever -create

Teraz po prostu łączymy się przez VNC z portem 5900 (lub innym wybranym przez Ciebie) na localhost i przechodzimy do konsoli wirtualnej.
Cały kod znajduje się w repozytorium klient docker-ilo.
Pełne polecenie 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 to login i odpowiednio SOME_PASSWORD to hasło do ILO.
Następnie po prostu uruchom dowolnego klienta VNC pod adresem: vnc://localhost:5900
Dodatki i prośby o ściągnięcie są oczywiście mile widziane.

Istnieje podobny projekt umożliwiający podłączenie do interfejsów IDRAC maszyn DELL: docker-idrac6.

Źródło: www.habr.com

Dodaj komentarz