Origem em russoBem, você pode se perguntar - por que eu usaria o contêiner de encaixe para esse fim? Qual é o problema de entrar na interface da Web da OIT e gerenciar o servidor normalmente?
O mesmo pensamento que tive quando tenho alguns servidores antigos que exigiam uma reprovação. Os servidores estão localizados em diferentes continentes e a única interface que eu tinha era apenas uma interface da Web da OIT. E quando tive que inserir alguns comandos manuais via Virtual Console, descobri que isso é quase impossível.
Para vários tipos de console virtual de servidores (HP e Dells), geralmente são usados applets da web Java. Mas o Firefox e o Chrome não os suportam mais e o IcedTea mais recente não funciona com o sistema antigo. Então, eu tinha algumas opções:
- Para instalar em versões antigas paralelas de navegadores e Java, tentando encontrar uma combinação necessária, no meu sistema. Essa opção foi filtrada, pois não quero poluir meu sistema apenas por causa de alguns comandos do console.
- Crie uma máquina virtual com sistemas antigos, instale o Java 6 e use o Virtual Console como antes.
- O mesmo que no ponto 2, mas com contêiner, não uma máquina virtual. Como alguns colegas enfrentaram o mesmo problema, eu preferiria passar um comando bash para executar o Virtual Console em vez de compartilhar o disco da Máquina Virtual, senhas para ele, etc.
(Para ser sincero, o ponto 3 eu fiz somente após o ponto 2).
O ponto 3 é o que vamos implementar hoje.
Eu fui inspirado principalmente por esses dois projetos:
- docker-baseimage-gui
- docker-firefox-java
Na verdade, o primeiro projeto
docker-baseimage-gui já contém todas as configurações e ferramentas necessárias para iniciar aplicativos da área de trabalho no navegador em um contêiner. Geralmente, você define variáveis de ambiente específicas e seu aplicativo se torna acessível via navegador (websocket) ou VNC. No nosso caso, começamos com o Firefox e o VNC, o websocket não funcionou bem.
Primeiro, vamos instalar os pacotes necessários: Java 6 e 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
Agora vamos abrir a página da web da interface da OIT no Firefox e inserir credenciais lá. Inicie o Firefox:
RUN bash -c 'echo "exec openbox-session &" >> ~/.xinitrc' && \ bash -c 'echo "firefox \${HILO_HOST}">> ~/.xinitrc' && \ bash -c 'chmod 755 ~/.xinitrc'
A variável HILO_HOST é o URL da nossa interface da OIT, por exemplo,
https://myhp.example.com
.
Para automação, vamos adicionar autenticação. O login da OIT é executado por meio de uma simples solicitação POST. Em resposta, você obtém o valor session_key e passa esse valor na solicitação GET. Vamos descobrir session_key com 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 escrevemos session_key em contêineres, podemos iniciar o servidor VNC:
exec x11vnc -forever -create
Agora, basta conectar-se ao cliente VNC à porta 5900 (ou o que você definiu em sua escolha) para o host local e entrar no console virtual do servidor HP.
O código está localizado no
docker-ilo-client do repositório git.
Comando completo de uma linha para conectar-se ao console virtual da OIT:
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 da ILO, SOME_USERNAME é o login e SOME_PASSWORD é a senha da ILO.
Em seguida, basta ir com qualquer cliente VNC para endereçar
vnc://localhost:5900
.
Solicitações pull e comentários são mais que bem-vindos.
O projeto semelhante para conexão aos servidores Dell IDRAC está aqui:
docker-idrac6 .