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.
2.
O primeiro projeto, 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,
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 .
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: .
Fonte: habr.com
