用于通过 ILO 管理 HP 服务器的 Docker 容器

您可能想知道 - 为什么 Docker 存在于此? 登录 ILO Web 界面并根据需要设置服务器有什么问题?
当他们给我一些不需要的旧服务器需要我重新安装(所谓的重新配置)时,我就是这么想的。 服务器本身位于海外,唯一可用的就是网络界面。 好吧,相应地,我必须转到虚拟控制台来运行一些命令。 这就是事情开始的地方。
如您所知,Java 通常用于各种虚拟控制台,无论是 HP 还是 Dell。 至少过去是这样的(而且系统非常旧)。 但 Firefox 和 Chrome 早已停止支持这些小程序,新的 IcedTea 也无法在这些系统上运行。 因此,出现了几种选择:

1. 开始从你的机器上的浏览器和Java版本构建一个动物园,不再需要这个选项。 不想为了几个命令而模拟系统。
2. 在虚拟机上启动一些相当旧的东西(实验证明你需要Java 6)并通过它配置你需要的一切。
3. 与第 2 点相同,只是在容器中,因为几个同事遇到了同样的问题,并且向他们传输 Dockerhub 上容器的链接比向他们传输虚拟机映像以及所有密码等要容易得多。
(事实上​​,我是在完成第3点之后才到达第2点的)
我们今天将做第3点。

我的灵感主要来自两个项目:
1. docker-baseimage-gui
2. docker-firefox-java
基本上是第一个项目 docker-baseimage-gui 已经包含用于在 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:

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

HILO_HOST 环境变量包含我们的 ILO 接口的 Web 地址,例如 myhp.example.com
为了自动登录,让我们添加授权。 通过常规 POST 请求登录 ILO,因此您会收到 JSON session_key,然后将其传入 GET 请求:
如果定义了 HILO_USER 和 HILO_PASS 环境变量,让我们通过curl 计算session_key:

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

一旦我们在docker中记录了session_key,我们就可以启动VNC:

exec x11vnc -forever -create

现在我们只需通过 VNC 连接到本地主机上的端口 5900(或您选择的任何其他端口)并转到虚拟控制台。
所有代码都在存储库中 docker-ilo-客户端.
连接到 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
当然,欢迎添加和拉取请求。

存在一个类似的项目用于连接到 DELL 机器的 IDRAC 接口: docker-idrac6.

来源: habr.com

添加评论