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

Додати коментар або відгук