Вы наверное может задаться вопросом — а здесь то Docker зачем? В чем проблема зайти на веб интерфейс ILO и настроить свой сервер как надо?
Так и я думал когда мне отдали пару старых ненужных серверов, которые мне надо было переустановить (то что называется reprovision). Сами сервер находятся за океаном, единственное что доступно это веб интерфейс. Ну и соответственно мне надо было зайти в Virtual Console для выполнения некоторых команд. Тут и началось.
Как известно для разного рода виртуальных консолей обычно используется Java, что в HP, что в Dell. Во всяком случае раньше так точно (а системы очень старые). Но Firefox и Chrome давно уже перестали поддерживать эти апплеты, да и не работает новый IcedTea с этими системами. Поэтому обозначилось несколько вариантов:
1. Начать конструировать зоопарк из браузеров и Java версий на своей машине, этот вариант отпал сразу. Никакого желания издеваться над системой ради пары команд нет.
2. Запустить на виртуалке что-нибудь достаточно старое (опытным путем выяснилось что нужна Java 6) и через него сконфигурировать все что нужно.
3. То же самое что и пункт 2, только в контейнере, так как с той же проблемой столкнулись несколько коллег и гораздо легче передать им ссылку на контейнер на dockerhub, чем образ виртуалки, со всеми паролями и т.д.
(На самом деле до пункта 3 я дошел только после того как сделал пункт 2)
Пункт 3 мы и сделаем сегодня.
Я вдохновлялся в основном двумя проектами:
1.
2.
В принципе первый проект
Сначала установим нужные пакеты — 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 интерфейса, например
Для автоматизации входа давайте прикрутим авторизацию. Логин в 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 и заходим в виртуальную консоль.
Весь код находится в репозитории
Полная команда для подключения к 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 машин:
Источник: habr.com