Docker кантэйнер для кіравання HP серверамі праз ILO

Вы напэўна можа задацца пытаннем - а тут то Docker навошта? У чым праблема зайсці на вэб-інтэрфейс ILO і наладзіць свой сервер як трэба?
Так і я думаў калі мне падалі пару старых непатрэбных сервераў, якія мне трэба было пераўсталяваць (тое што завецца reprovision). Самі сервер знаходзяцца за акіянам, адзінае што даступна гэта вэб інтэрфейс. Ну і адпаведна мне трэба было зайсці ў Virtual Console для выканання некаторых каманд. Тут і пачалося.
Як вядома для рознага роду віртуальных кансоляў звычайна выкарыстоўваецца Java, што ў HP, што ў Dell. Ва ўсякім разе раней так дакладна (а сістэмы вельмі старыя). Але Firefox і Chrome даўно ўжо перасталі падтрымліваць гэтыя аплеты, ды і не працуе новы IcedTea з гэтымі сістэмамі. Таму акрэслілася некалькі варыянтаў:

1. Пачаць канструяваць заапарк з браўзэраў і Java версій на сваёй машыне, гэты варыянт адпаў адразу. Ніякага жадання здзекавацца над сістэмай дзеля пары каманд няма.
2. Запусціць на віртуалцы што-небудзь дастаткова старое (вопытным шляхам высветлілася што патрэбна Java 6) і праз яго сканфігураваць усё што трэба.
3. Тое ж самае што і пункт 2, толькі ў кантэйнеры, бо з той жа праблемай сутыкнуліся некалькі калегаў і значна лягчэй перадаць ім спасылку на кантэйнер на dockerhub, чым выява віртуалкі, з усімі паролямі і г.д.
(Насамрэч да пункта 3 я дайшоў толькі пасля таго як зрабіў пункт 2)
Пункт 3 мы і зробім сёньня.

Я натхняўся ў асноўным двума праектамі:
1. docker-baseimage-gui
2. docker-firefox-java
У прынцыпе першы праект docker-baseimage-gui ужо змяшчае ўтыліты і канфігурацыі для запуску дэсктопных прыкладанняў у докеры. Звычайна вам трэба вызначыць стандартныя зменныя і ваша прыкладанне будзе даступна праз браўзэр (websocket) ці VNC. У нашым выпадку мы будзем запускаць праз Firefox і VNC, праз websocket не атрымалася.
Спачатку ўсталюем патрэбныя пакеты – Java 6 і 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

Цяпер засталося зайсці на старонку ILO інтэрфейсу і ўбіць свой лагін і пароль. Запускаем Firefox у аўтастарце:

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

Пераменная асяроддзя HILO_HOST змяшчае вэб адрас нашага ILO інтэрфейсу, напрыклад myhp.example.com
Для аўтаматызацыі ўваходу давайце прыкруцім аўтарызацыю. Лагін у ILO адбываецца звычайным POST запытам, у выніку якога атрымліваеце JSON session_key, які потым перадаеце ў GET запыце:
Вылічым session_key праз curl, калі вызначаны зменныя асяроддзі HILO_USER і 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

Пасля таго як мы запісалі session_key у докеры, можна запускаць VNC:

exec x11vnc -forever -create

Зараз проста злучаемся па VNC да порта 5900 (ці любому іншаму па вашаму выбару) на localhost і заходзім у віртуальную кансоль.
Увесь код знаходзіцца ў рэпазітары docker-ilo-client.
Поўная каманда для падлучэння да 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

дзе ADDRESS_OF_YOUR_HOST гэтае імя хаста ILO, SOME_USERNAME - лагін і адпаведна SOME_PASSWORD пароль да ILO.
Пасля гэтага проста запускаеце любы VNC кліент на адрас: vnc://localhost:5900
Дапаўненні і пул рэквесты, вядома, вітаюцца.

Падобны праект існуе для злучэння да IDRAC інтэрфейсаў DELL машын: docker-idrac6.

Крыніца: habr.com

Дадаць каментар