Možná se ptáte, proč je zde Docker? Jaký je problém přihlásit se do webového rozhraní ILO a nakonfigurovat svůj server tak, jak potřebujete?
Také jsem si to myslel, když mi dali pár starých nepotřebných serverů, které jsem musel přeinstalovat (což se nazývá reprovision). Servery jsou za oceánem, jediné, co je k dispozici, je webové rozhraní. A samozřejmě jsem se potřeboval přihlásit do Virtuální Konzoly, abych provedl některé příkazy. A tady to začalo.
Jak je známo, pro různé druhy virtuálních konzolí se obvykle používá Java, ať už u HP nebo Dell. V každém případě to tak bylo dříve (a systémy jsou opravdu staré). Ale Firefox a Chrome dávno přestaly podporovat tyto appletové aplikace a nová verze IcedTea nefunguje s těmito systémy. Takže se objevilo několik možností:
1. Začít konstruovat zoo z prohlížečů a verzí Javy na svém stroji, tohle řešení odpadlo hned. Nemám žádnou chuť si lámat hlavu se systémem kvůli pár příkazům.
2. Spustit na virtuálním stroji něco dost starého (zkušenostní cestou se zjistilo, že je potřeba Java 6) a přes něj nakonfigurovat vše, co je třeba.
3. Totéž jako bod 2, jen v kontejneru, protože se stejným problémem se potýkalo několik kolegů a mnohem snadnější je poskytnout jim odkaz na kontejner na dockerhub, než image virtuálního stroje se všemi hesly atd.
(Ve skutečnosti jsem k bodu 3 došel až poté, co jsem udělal bod 2.)
Bod 3 dnes také uděláme.
Hlavně jsem se inspiroval dvěma projekty:
1.
2.
První projekt v zásadě už obsahuje nástroje a konfigurace pro spuštění desktopových aplikací v dockeru. Obvykle potřebujete definovat standardní proměnné a vaše aplikace bude dostupná přes prohlížeč (websocket) nebo VNC. V našem případě budeme spouštět přes Firefox a VNC, přes websocket se to nepovedlo.
Nejprve nainstalujeme potřebné balíčky – Java 6 a 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
Teď zbývá jen přejít na stránku ILO rozhraní a zadat své uživatelské jméno a heslo. Spouštíme Firefox při startu:
RUN bash -c 'echo "exec openbox-session &" >> ~/ .xinitrc' &&
bash -c 'echo "firefox ${HILO_HOST}" >> ~/ .xinitrc' &&
bash -c 'chmod 755 ~/ .xinitrc'
Proměnná prostředí HILO_HOST obsahuje webovou adresu našeho ILO rozhraní, například
Pro automatizaci přihlášení přidáme autorizaci. Přihlášení do ILO probíhá běžným POST požadavkem, v důsledku kterého získáte JSON session_key, který poté předáte v GET požadavku:
Spočítáme session_key přes curl, pokud jsou definovány proměnné prostředí HILO_USER a 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
Poté, co jsme uložili session_key v dockeru, můžeme spustit VNC:
exec x11vnc -forever -create
Nyní se jednoduše připojíme přes VNC na port 5900 (nebo jakýkoli jiný podle vašeho výběru) na localhost a vstoupíme do virtuální konzole.
Celý kód se nachází v repozitáři .
Úplný příkaz pro připojení k 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
kde ADDRESS_OF_YOUR_HOST je název hostitele ILO, SOME_USERNAME — uživatelské jméno a podle toho SOME_PASSWORD heslo k ILO.
Poté stačí spustit libovolného VNC klienta na adrese: vnc://localhost:5900
Rozšíření a pull requesty jsou samozřejmě vítány.
Podobný projekt existuje pro připojení k IDRAC rozhraním DELL strojů: .
Zdroj: habr.com
