Docker container để quản lý máy chủ HP thông qua ILO

Có thể bạn sẽ thắc mắc - tại sao Docker tồn tại ở đây? Vấn đề xảy ra khi đăng nhập vào giao diện web ILO và thiết lập máy chủ của bạn khi cần thiết là gì?
Đó là những gì tôi nghĩ khi họ đưa cho tôi một vài máy chủ cũ không cần thiết mà tôi cần phải cài đặt lại (cái gọi là cung cấp lại). Bản thân máy chủ được đặt ở nước ngoài, thứ duy nhất có sẵn là giao diện web. Theo đó, tôi phải vào Virtual Console để chạy một số lệnh. Đó là nơi nó bắt đầu.
Như bạn đã biết, Java thường được sử dụng cho nhiều loại máy chơi game ảo khác nhau, cho dù ở HP hay Dell. Ít nhất trước đây nó là như vậy (và hệ thống này đã rất cũ). Nhưng Firefox và Chrome đã ngừng hỗ trợ các applet này từ lâu và IcedTea mới không hoạt động với các hệ thống này. Do đó, một số lựa chọn đã xuất hiện:

1. Bắt đầu xây dựng vườn thú từ trình duyệt và phiên bản Java trên máy của bạn, tùy chọn này không còn cần thiết nữa. Không có mong muốn chế nhạo hệ thống chỉ vì một vài lệnh.
2. Khởi chạy một cái gì đó khá cũ trên máy ảo (thực nghiệm cho thấy bạn cần Java 6) và định cấu hình mọi thứ bạn cần thông qua nó.
3. Tương tự như điểm 2, chỉ trong một vùng chứa, vì một số đồng nghiệp gặp phải vấn đề tương tự và việc chuyển liên kết cho họ đến vùng chứa trên Dockerhub sẽ dễ dàng hơn nhiều so với hình ảnh máy ảo, với tất cả mật khẩu, v.v.
(Thực tế là tôi chỉ đạt được điểm 3 sau khi làm được điểm 2)
Hôm nay chúng ta sẽ làm điểm 3.

Tôi lấy cảm hứng chủ yếu từ hai dự án:
1. docker-baseimage-gui
2. docker-firefox-java
Về cơ bản dự án đầu tiên docker-baseimage-gui đã chứa các tiện ích và cấu hình để chạy các ứng dụng máy tính để bàn trong Docker. Thông thường, bạn cần xác định các biến tiêu chuẩn và ứng dụng của bạn sẽ có thể truy cập được thông qua trình duyệt (websocket) hoặc VNC. Trong trường hợp của chúng tôi, chúng tôi sẽ khởi chạy qua Firefox và VNC; nó không hoạt động qua websocket.
Trước tiên, hãy cài đặt các gói cần thiết - Java 6 và 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

Bây giờ tất cả những gì bạn phải làm là vào trang giao diện ILO và nhập tên người dùng và mật khẩu của bạn. Khởi chạy Firefox trong chế độ tự động khởi động:

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

Ví dụ: biến môi trường HILO_HOST chứa địa chỉ web của giao diện ILO của chúng tôi myhp.example.com
Để tự động đăng nhập, hãy thêm ủy quyền. Việc đăng nhập vào ILO diễn ra với một yêu cầu POST thông thường, do đó bạn nhận được một session_key JSON, sau đó bạn chuyển yêu cầu này vào một yêu cầu GET:
Hãy tính session_key thông qua Curl nếu các biến môi trường HILO_USER và HILO_PASS được xác định:

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

Khi chúng tôi đã ghi lại session_key trong docker, chúng tôi có thể chạy VNC:

exec x11vnc -forever -create

Bây giờ chúng ta chỉ cần kết nối qua VNC với cổng 5900 (hoặc bất kỳ cổng nào khác mà bạn chọn) trên localhost và đi tới bảng điều khiển ảo.
Tất cả mã đều có trong kho lưu trữ docker-ilo-client.
Lệnh đầy đủ để kết nối với 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

trong đó ADDRESS_OF_YOUR_HOST là tên máy chủ ILO, SOME_USERNAME là thông tin đăng nhập và theo đó, SOME_PASSWORD là mật khẩu cho ILO.
Sau đó, chỉ cần khởi chạy bất kỳ ứng dụng khách VNC nào tới địa chỉ: vnc://localhost:5900
Tất nhiên, các yêu cầu bổ sung và kéo đều được hoan nghênh.

Một dự án tương tự tồn tại để kết nối với giao diện IDRAC của máy DELL: docker-idrac6.

Nguồn: www.habr.com

Thêm một lời nhận xét