Probablemente te preguntes, ¿para qué Docker aquí? ¿Cuál es el problema de acceder a la interfaz web de ILO y configurar tu servidor como es necesario?
Eso pensé cuando me dieron un par de servidores antiguos y innecesarios que necesitaba reinstalar (lo que se llama reprovision). Los propios servidores están al otro lado del océano, lo único que tengo accesible es la interfaz web. Así que, por supuesto, necesito acceder a la Consola Virtual para ejecutar algunos comandos. Aquí es donde comenzó todo.
Como se sabe, para diferentes tipos de consolas virtuales normalmente se utiliza Java, tanto en HP como en Dell. Al menos antes era así (y los sistemas son muy antiguos). Pero Firefox y Chrome ya no soportan estos applets, y tampoco funciona el nuevo IcedTea con estos sistemas. Por lo tanto, surgieron varias opciones:
1. Empezar a construir un zoológico de navegadores y versiones de Java en mi máquina, esta opción se descartó de inmediato. No tengo ningún deseo de torturar a mi sistema por un par de comandos.
2. Iniciar en una máquina virtual algo suficientemente antiguo (experimentos demostraron que se necesita Java 6) y a través de él configurar todo lo necesario.
3. Lo mismo que el punto 2, pero en un contenedor, ya que varios colegas se enfrentaron al mismo problema y resulta mucho más fácil enviarles un enlace al contenedor en Docker Hub que la imagen de la máquina virtual, con todas las contraseñas, etc.
(En realidad, llegué al punto 3 solo después de haber realizado el punto 2)
Hoy procederemos con el punto 3.
Me inspiré principalmente en dos proyectos:
1.
2.
En principio, el primer proyecto ya contiene utilidades y configuraciones para ejecutar aplicaciones de escritorio en Docker. Normalmente, necesitas definir variables estándar y tu aplicación estará disponible a través de un navegador (websocket) o VNC. En nuestro caso, lo ejecutaremos a través de Firefox y VNC, no logré hacerlo funcionar a través de websocket.
Primero, instalaremos los paquetes necesarios: 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
Ahora solo queda acceder a la página de la interfaz ILO e ingresar tu nombre de usuario y contraseña. Iniciamos Firefox en el arranque automático:
RUN bash -c 'echo "exec openbox-session &" >> ~/\.xinitrc' &&
bash -c 'echo "firefox ${HILO_HOST}" >> ~/\.xinitrc' &&
bash -c 'chmod 755 ~/\.xinitrc'
La variable de entorno HILO_HOST contiene la dirección web de nuestra interfaz ILO, por ejemplo
Para automatizar el inicio de sesión, añadamos la autenticación. El inicio de sesión en ILO se realiza mediante una solicitud POST normal, como resultado de la cual obtienes un JSON session_key, que luego se pasa en una solicitud GET:
Calcularemos el session_key a través de curl, si se definen las variables de entorno HILO_USER y 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
Después de que hemos registrado el session_key en Docker, se puede iniciar VNC:
exec x11vnc -forever -create
Ahora simplemente nos conectamos por VNC al puerto 5900 (o cualquier otro de su elección) en localhost y accedemos a la consola virtual.
Todo el código está en el repositorio .
El comando completo para conectarse a 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
donde ADDRESS_OF_YOUR_HOST es el nombre del host ILO, SOME_USERNAME es el inicio de sesión y, por tanto, SOME_PASSWORD es la contraseña para ILO.
Después de esto, simplemente inicie cualquier cliente VNC en la dirección: vnc://localhost:5900
Se agradecen complementos y pull requests, por supuesto.
Un proyecto similar existe para conectarse a las interfaces IDRAC de máquinas DELL: .
Fuente: habr.com
