Вероятно, у вас возникает вопрос: зачем здесь Docker? В чем трудность войти в веб-интерфейс ILO и настроить свой сервер по своему усмотрению?
Так я и думал, когда мне отдали пару старых ненужных серверов, которые нужно было переустановить. Эти серверы находятся за океаном, и единственное доступное - это веб-интерфейс. Меня интересовало, как зайти в виртуальную консоль, чтобы выполнить несколько команд. Тут начались трудности.
Как известно, для различных виртуальных консолей обычно используется Java, как в HP, так и в Dell. Во всяком случае, раньше так было (а системы очень старые). Но Firefox и Chrome давно уже не поддерживают эти апплеты, и новый IcedTea с этими системами также не работает. Поэтому появились несколько вариантов:
1. Начать собирать зоопарк из браузеров и версий Java на своей машине, но этот вариант сразу отпал. Нет желания мучить систему ради пары команд.
2. Запустить что-то достаточно старое на виртуальной машине (опыт показал, что нужна Java 6) и через него настроить все, что нужно.
3. То же самое, что и в пункте 2, только в контейнере, поскольку и у других коллег возникли те же проблемы, и гораздо проще передать им ссылку на контейнер на Docker Hub, чем образ виртуальной машины со всеми паролями и т.д.
(На самом деле до пункта 3 я дошел только после выполнения пункта 2.)
Пункт 3 мы и реализуем сегодня.
Я вдохновлялся в основном двумя проектами:
1.
2.
В принципе, первый проект уже содержит утилиты и конфигурации для запуска настольных приложений в Docker. Обычно нужно определить стандартные переменные, и ваше приложение будет доступно через браузер (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 в автостарте:
ИЗПЪЛНЯВАЙ 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 в Docker, можем да стартираме 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
Добавления и pull requests, разбира се, са добре дошли.
Подобен проект съществува за свързване към IDRAC интерфейсите на DELL машини: .
Източник: habr.com
