Docker container para sa pamamahala ng mga HP server sa pamamagitan ng ILO

Marahil ay nagtataka ka - bakit nandito si Docker? Ano ang problema sa pag-access sa ILO web interface at pag-set up ng iyong server nang maayos?
Kaya naisip ko kapag binigyan nila ako ng ilang lumang hindi kinakailangang mga server na kailangan kong i-install muli (kung ano ang tinatawag na reprovision). Ang mga server mismo ay nasa ibang bansa, ang tanging magagamit ay ang web interface. Kaya naman, kailangan kong pumunta sa Virtual Console para magsagawa ng ilang utos. Dito nagsimula.
Tulad ng alam mo, para sa iba't ibang uri ng mga virtual console, karaniwang ginagamit ang Java, kapwa sa HP at Dell. Sa anumang kaso, ito ay dati nang sigurado (at ang mga sistema ay napakaluma). Ngunit ang Firefox at Chrome ay matagal nang tumigil sa pagsuporta sa mga applet na ito, at ang bagong IcedTea ay hindi gumagana sa mga system na ito. Samakatuwid, mayroong ilang mga pagpipilian:

1. Magsimulang gumawa ng zoo mula sa mga browser at bersyon ng Java sa iyong makina, agad na nawala ang opsyong ito. Walang pagnanais na kutyain ang sistema para sa kapakanan ng isang pares ng mga utos.
2. Patakbuhin ang isang bagay na medyo luma sa virtual machine (pang-eksperimentong lumabas na kailangan ang Java 6) at i-configure ang lahat ng kailangan mo sa pamamagitan nito.
3. Kapareho ng point 2, sa container lang, dahil ang ilang mga kasamahan ay nahaharap sa parehong problema at mas madaling magpadala sa kanila ng link sa container sa dockerhub kaysa sa isang imahe ng isang virtual machine na may lahat ng password, atbp.
(Sa katunayan, nakarating lang ako sa point 3 pagkatapos kong gawin ang point 2)
Point 3 ang gagawin natin ngayon.

Pangunahing inspirasyon ako ng dalawang proyekto:
1. docker-baseimage-gui
2. docker-firefox-java
Talaga ang unang proyekto docker-baseimage-gui naglalaman na ng mga utility at configuration para sa pagpapatakbo ng mga desktop application sa docker. Kadalasan kailangan mong tukuyin ang mga karaniwang variable at ang iyong application ay maa-access sa pamamagitan ng browser (websocket) o VNC. Sa aming kaso, tatakbo kami sa Firefox at VNC, hindi ito gumana sa pamamagitan ng websocket.
Una, i-install ang mga kinakailangang pakete - Java 6 at 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

Ngayon ay nananatiling pumunta sa pahina ng interface ng ILO at ipasok ang iyong username at password. Ilunsad ang Firefox sa autostart:

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

Ang HILO_HOST environment variable ay naglalaman ng web address ng aming ILO interface, halimbawa myhp.example.com
Para i-automate ang pag-log in, i-fasten natin ang authorization. Ang pag-login sa ILO ay nangyayari sa isang regular na kahilingan sa POST, bilang isang resulta kung saan makakakuha ka ng isang JSON session_key, na pagkatapos ay ipinasa mo sa isang kahilingan sa GET:
Kalkulahin ang session_key sa pamamagitan ng curl kung ang HILO_USER at HILO_PASS na mga variable ng kapaligiran ay tinukoy:

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

Pagkatapos naming maitala ang session_key sa docker, maaari naming simulan ang VNC:

exec x11vnc -forever -create

Ngayon kumonekta lang kami sa pamamagitan ng VNC sa port 5900 (o anumang iba pang gusto mo) sa localhost at pumunta sa virtual console.
Ang lahat ng code ay nasa repositoryo docker-ilo-kliyente.
Buong utos para kumonekta sa 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

kung saan ang ADDRESS_OF_YOUR_HOST ay ang hostname ng ILO, ang SOME_USERNAME ay ang login at, nang naaayon, ang SOME_PASSWORD ay ang password ng ILO.
Pagkatapos nito, ilunsad lamang ang anumang VNC client sa address: vnc://localhost:5900
Ang mga pagdaragdag at mga kahilingan sa paghila ay siyempre malugod na tinatanggap.

Mayroong katulad na proyekto para sa pagkonekta sa mga interface ng IDRAC ng mga DELL machine: docker-idrac6.

Pinagmulan: www.habr.com

Magdagdag ng komento