ILO 経由で HP サーバーを管理するための Docker コンテナ

おそらく、Docker がなぜここに存在するのか疑問に思っているかもしれません。 ILO Web インターフェースにログインし、必要に応じてサーバーをセットアップする際にどのような問題がありますか?
再インストール (いわゆる再プロビジョニング) が必要な古い不要なサーバーをいくつか提供されたとき、私はそう思いました。 サーバー自体は海外にあり、利用できるのはWebインターフェイスのみです。 したがって、いくつかのコマンドを実行するには仮想コンソールにアクセスする必要がありました。 そこからが始まりました。
ご存知のとおり、Java は通常、HP であろうと Dell であろうと、さまざまな種類の仮想コンソールに使用されます。 少なくとも以前はそうでした (そしてシステムは非常に古いです)。 しかし、Firefox と Chrome はかなり前にこれらのアプレットのサポートを停止しており、新しい IcedTea はこれらのシステムでは動作しません。 したがって、いくつかの選択肢が浮上しました。

1. マシン上のブラウザと Java バージョンから動物園の構築を開始します。このオプションは不要になりました。 いくつかのコマンドのためにシステムを嘲笑するつもりはありません。
2. 仮想マシン上でかなり古いものを起動し (実験的に Java 6 が必要であることが判明しました)、それを通じて必要なものをすべて構成します。
3. コンテナ内のみでポイント 2 と同じです。数人の同僚が同じ問題に遭遇しており、すべてのパスワードなどを含む仮想マシン イメージよりも、Dockerhub 上のコンテナへのリンクを転送する方がはるかに簡単であるためです。
(実際には、ポイント 3 を行った後にポイント 2 に到達しました)
今日はポイント3を行います。

私は主に XNUMX つのプロジェクトからインスピレーションを受けました。
1. docker-baseimage-gui
2. ドッカー-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
ログインを自動化するには、承認を追加しましょう。 ILO へのログインは通常の POST リクエストで行われ、その結果として 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 (または任意のポート) に接続し、仮想コンソールに移動します。
すべてのコードはリポジトリにあります ドッカーイロクライアント.
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

コメントを追加します