Contêiner Docker para gerenciar servidores HP através do ILO

Você deve estar se perguntando — mas para que o Docker aqui? Qual é o problema em acessar a interface web do ILO e configurar seu servidor corretamente?
Foi o que pensei quando me entregaram alguns servidores antigos que eu precisava reinstalar (o que chamamos de reprovision). Os servidores estão do outro lado do oceano, e a única coisa disponível é a interface web. Assim, eu precisava acessar o Console Virtual para executar alguns comandos. E foi a partir daí que tudo começou.
Como é sabido, para esse tipo de console virtual geralmente se usa Java, tanto na HP quanto na Dell. De qualquer forma, antes era assim (e os sistemas são muito antigos). Mas o Firefox e o Chrome já não suportam mais esses applets, e o novo IcedTea também não funciona com esses sistemas. Portanto, surgiram algumas alternativas:

1. Começar a construir um verdadeiro zoológico de navegadores e versões do Java na minha máquina, essa opção foi descartada imediatamente. Não tenho interesse em maltratar o sistema por causa de alguns comandos.
2. Rodar uma versão antiga em uma máquina virtual (descobri por experiência que precisava do Java 6) e configurar tudo o que era necessário por meio dela.
3. O mesmo que o ponto 2, mas em um contêiner, pois alguns colegas enfrentaram o mesmo problema e é muito mais fácil passar um link para o contêiner no Docker Hub do que uma imagem da máquina virtual, com todas as senhas etc.
(Na verdade, cheguei ao ponto 3 só depois de completar o ponto 2)
Hoje faremos o ponto 3.

Eu me inspirei principalmente em dois projetos:
1. docker-baseimage-gui
2. docker-firefox-java
O primeiro projeto, docker-baseimage-gui já contém utilitários e configurações para executar aplicativos desktop no Docker. Normalmente, você precisa definir variáveis padrão, e seu aplicativo estará disponível através de um navegador (websocket) ou VNC. No nosso caso, iremos rodar através do Firefox e VNC; a conexão via websocket não funcionou.
Primeiro, vamos instalar os pacotes necessários — Java 6 e IcedTea:

EXECUTAR 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

Agora é só acessar a página da interface do ILO e inserir seu login e senha. Vamos iniciar o Firefox no auto-início:

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

A variável de ambiente HILO_HOST contém o endereço web da nossa interface do ILO, por exemplo, myhp.example.com
Para automatizar o login, vamos implementar a autenticação. O login no ILO é feito por meio de uma solicitação POST, resultando em um JSON session_key, que depois é usado em uma solicitação GET:
Vamos calcular o session_key via curl, se as variáveis de ambiente HILO_USER e HILO_PASS estiverem definidas:

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

Depois que gravamos o session_key no Docker, podemos iniciar o VNC:

exec x11vnc -forever -create

Agora, basta conectar via VNC à porta 5900 (ou qualquer outra de sua escolha) no localhost e acessar o console virtual.
Todo o código está no repositório docker-ilo-client.
O comando completo para se conectar ao 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

onde ADDRESS_OF_YOUR_HOST é o nome do host ILO, SOME_USERNAME é o login e, respectivamente, SOME_PASSWORD é a senha do ILO.
Depois disso, basta iniciar qualquer cliente VNC no endereço: vnc://localhost:5900
Contribuições e pull requests são, claro, bem-vindos.

Um projeto semelhante existe para conectar a interfaces IDRAC de máquinas DELL: docker-idrac6.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster