Lenovo XClarity Integrator для Proxmox
Lenovo XClarity Integrator для Proxmox — это инструмент на Python, который позволяет автоматизировать обновление прошивки в средах Proxmox Cluster, работающих на серверах Lenovo ThinkSystem. Он интегрируется с Lenovo XClarity Administrator (LXCA), чтобы ваша инфраструктура всегда была актуальной, минимизируя простои и снижая необходимость ручного вмешательства.
Это решение предназначено для IT-администраторов, которые хотят упростить управление обновлениями в своих кластерах Proxmox.
Возможности
- Бесшовная интеграция с REST API Lenovo XClarity Administrator.
- Автоматическое обновление прошивки на основе политики, применяемой через Lenovo XClarity Administrator
- Операции обновления с учетом кластера для минимизации перебоев в работе.
- Ведение журнала и отчетность по результатам обновлений.
- Гибкая настройка через
config.ini.
Как это работает
При запуске программа выполняет следующие шаги:
- Загружает параметры выполнения из файла
config.ini - Запрашивает мастер-пароль, если пароли хранятся безопасным способом (т.е. в зашифрованном виде)
- Проверяет, что хосты управляются LXCA и к ним привязана политика соответствия прошивки
- Проверяет, соответствуют ли хосты назначенной политике соответствия
- Если нет, поочередно эвакуирует ВМ и CT с хоста, выполняет обновление прошивки через LXCA, возвращает ВМ на обновленный хост
Требования
- Python: 3.x (тестировалось с Python 3.11 и Python 3.13 (строгий SSL))
- Библиотеки Python, указанные в
requirements.txt - Запущенный экземпляр Lenovo XClarity Administrator с подходящими API-учетными данными
- Proxmox VE cluster или Proxmox VE single node, работающий на серверах, поддерживаемых Lenovo XClarity Administrator (тестировалось только на серверах Lenovo ThinkSystem)
- Назначенная Compliance Policy для каждого сервера в кластере
- ОС, на которой будет запускаться этот инструмент (предпочтительно Linux, но должно работать и на Windows). ВНИМАНИЕ: Не поддерживается/не рекомендуется запускать непосредственно на серверах Proxmox.
Установка
-
Распакуйте пакет на вашей системе (лучше на базе Linux)
-
(Необязательно, но рекомендуется) Настройте виртуальное окружение Python 2.1. Создайте новое виртуальное окружение в каталоге проекта:
python -m venv venv2.2. Активируйте виртуальное окружение:
- В Linux/Mac:
source venv/bin/activate- В Windows:
venv\Scripts\activate -
Установите зависимости:
pip install -r requirements.txt -
Подготовьте файл конфигурации (см. раздел Config File ниже).
Файл конфигурации
-
Ознакомьтесь с примером конфигурационного файла
config.ini.sample. В этом файле указаны все настраиваемые параметры, включая:- Имя хоста или IP LXCA
- Учетные данные API LXCA
- Список узлов кластера Proxmox
-
Скопируйте пример и настройте его:
cp config.ini.sample config.ini
Отредактируйте config.ini в вашем любимом редакторе, чтобы указать параметры для вашей среды.
Описание полей
Раздел Proxmox
-
PROXMOX_USER - Обязательное поле - Здесь указывается имя пользователя, имеющего права доступа к кластеру Proxmox (каждому узлу) и на выполнение действий, таких как миграция ВМ. Должен быть Linux-пользователь, так как требуется для перевода узла в режим обслуживания. - По умолчанию = root@pam (без кавычек).
-
PROXMOX_PASS - Обязательное поле - Здесь необходимо указать пароль пользователя, указанного в поле
PROXMOX_USER. Пароль можно хранить без кавычек в открытом виде (проще, менее безопасно) или в зашифрованном виде (более безопасно). Инструкции по хранению зашифрованного пароля в конфиге смотрите в разделе "Security section" ниже. -
PROXMOX_VERIFY_SSL - Обязательное поле - Если вы хотите пропустить проверку SSL-сертификата, установите это поле в
False. Обычно с самоподписанными сертификатами это наиболее распространенное поведение, если вы используете самоподписанные сертификаты и Python > 3.11, вы ОБЯЗАНЫ установить этот параметр вFalse. Можно установить вTrueсогласно инструкции в разделе "CA Certificate validation". -
CLUSTER_NODES - Обязательное поле - Здесь указываются хосты, которые могут быть обновлены инструментом. Поле — это массив, где каждый элемент — объект, описывающий три параметра для хоста: -- xcc = IP-адрес XCC хоста (ОБЯЗАТЕЛЬНО IP-адрес, а не имя хоста) -- pve_ip = IP-адрес хоста PVE -- pve_host = имя хоста PVE
ожидаемый формат для хоста:
{"xcc":<IP_xcc_node>, "pve_ip": <IP_node> , "pve_host": <NAME_node>}
-
TIMEOUT_HOST - Необязательное поле - Укажите максимальное время ожидания (в секундах) завершения процесса обновления. - По умолчанию = 3600
-
TIMEOUT_VM - Необязательное поле - Укажите максимальное время ожидания (в секундах) завершения операций с ВМ (миграция, выключение) до возврата ошибки. - По умолчанию = 300 сек
-
VM_LOCAL_DISKS - Обязательное поле - Допустимые значения:
POWEROFFдля разрешения выключения ВМ с локальными дисками (например, cdrom, диски ВМ на локальном хранилище),FAILдля остановки процедуры и ручного вмешательства. - По умолчанию =FAIL -
VM_LOCAL_RESOURCES - Обязательное поле - Допустимые значения:
POWEROFFдля разрешения выключения ВМ с локальными ресурсами (например, PCIe-адаптер),FAILдля остановки процедуры и ручного вмешательства. - По умолчанию =FAIL -
VM_LOCAL_DISKS_EXPERT - Экспериментальный параметр - Необязательное поле - Используйте на свой страх и риск!! - Только для экспертов - Не используйте, если не уверены в своих действиях. Этот параметр позволяет мигрировать ВМ с локальным диском (без cdrom). Вы должны сами убедиться, что все требования соблюдены во время выполнения (например, одинаковые имена хранилищ, достаточно места и т.д.). Допустимые значения:
True— программа попытается мигрировать ВМ с локальным диском (без локального cd-rom), илиFalse— программа будет следовать значению вVM_LOCAL_DISKS. По умолчанию =False
Сессия LXCA
-
LXCA_HOST - Обязательное поле - Здесь указывается IP-адрес (или имя хоста, если разрешается через DNS) экземпляра Lenovo XClarity Administrator (LXCA), который управляет серверами Proxmox.
-
LXCA_USER - Обязательное поле - Здесь указывается имя администратора LXCA, имеющего права на обновление серверов Proxmox.
-
LXCA_PASS - Обязательное поле - Введите пароль пользователя LXCA, указанного в поле
LXCA_USER. Пароль можно хранить без кавычек в открытом виде (проще, менее безопасно) или в зашифрованном виде (более безопасно). Инструкции по хранению зашифрованного пароля в конфиге смотрите в разделе "Security section" ниже. -
LXCA_VERIFY_SSL - Обязательное поле - Если вы хотите пропустить проверку SSL-сертификата, установите это поле в
False. Обычно с самоподписанными сертификатами это наиболее распространенное поведение, если вы используете самоподписанные сертификаты и Python > 3.11, вы ОБЯЗАНЫ установить этот параметр вFalse. Можно установить вTrueсогласно инструкции в разделе "CA Certificate validation".
Раздел безопасности
- SALT - Необязательное поле - Здесь можно хранить SALT для возможности хранения паролей в зашифрованном виде.
Обратите внимание: если вы беспокоитесь о хранении паролей в открытом виде в файле config.ini, вы можете воспользоваться процедурой для хранения их в зашифрованном виде. Если опция SALT указана в файле config.ini, программа запросит мастер-пароль для расшифровки полей паролей в конфигурации.
Как зашифровать пароль в config.ini (необязательно)
Вы можете запустить программу create_encrypted_password.py, если хотите хранить пароль в зашифрованном виде в конфиге.
python create_encrypted_password.py
Она запросит мастер-пароль (понадобится при запуске интегратора) и зашифрует пароли PVE и LXCA, выведет строки, которые нужно добавить в конфиг (пример):
Add the following three lines to your config.ini:
LXCA_PASS = gAAAAABonuj0JNenRko_DS-HTcZkFfoho_ZID6RcwLTFPNn7A2QYsNgtE3-wjzCE8R0_bpVquZLDGpe9ARpJdZ7tSEWoNXTOQg==
PROXMOX_PASS = gAAAAABonuj0aXh5IYUhClWjBaOBh9HgcvtmwyB9rYzlvnSO-NAS51rNQXaBH0CjlgvF4lkwpPsXSIi2SLpozKmueTtpV_uQJQ==
SALT = E3T1B/Ty6nk3RJq7dQq8Pg==
Проверка CA-сертификата
Если вы используете собственные сертификаты в вашей среде, вы можете включить проверку сертификатов хостов Proxmox и/или экземпляра LXCA для соответствия требованиям безопасности.
Для этого необходимо создать в каталоге инструмента файл custom_cacert.pem, в который вручную добавить CA-сертификат(ы) вашей среды в формате pem (см. пример ниже):
-----BEGIN CERTIFICATE-----
MIIFzTCCA7WgAwIBAgIUdmBnkIBixu29Fv7wAI4de2sxPQ0wDQYJKoZIhvcNAQEL
BQAwdjEkMCIGA1UEAwwbUHJveG1veCBWaXJ0dWFsIEVudmlyb25tZW50MS0wKwYD
VQQLDCQzNzI4MzdlNS1jMjvkLTQwZjgtODA2NC02YWY2OTFlNWMxODMxHzAdBgNV
BAoMFlBWRSBDbHVzdGVyIE1hbmFnZXIgQ0EwHhcNMjUwMzE0MTE0NDE5WhcNMzUw
MzEyMTE0NDE5WjB2MSQwIgYDVQQDDbtQcm94bW94IFZpcnR1YWwgRW52aXJvbm1l
bnQxLTArBgNVBAsMJDM3MjgzN2U1LWMyNWQtNDBmOC04MDY0LTZhZjY5MWU1YzE4
MzEfMB0GA1UECgwWUFZFIENsdXN0ZXIgTWFuYWdlciBDQTCCAiIwDQYJKoZIhvcN
aQEBBQADggIPADCCAgoCggIBANR+cPxIkIEBNx9YCAaaL2+fOUWy/fBaeBMCdD+D
7F/Bi+Mcpn2p3+gVuhyCaTcYZnP0aewHUI4xCL8YHFwqWv6J7ryMV++i/0Rbkzny
EZvKISNxTuZ/9ZioP1S9K3Se3ZVZI23xyLQ/Wu2mqPo5d3QLttR5/ndBLVmUtMZe
pz3Jlj2kQxvQrbG4SdHBs4GpqLbDoqktkFK+nJjGuibNVovZFKufv+7ySoKhbF9l
I21A4Ta+QqlhG+TD6r4c61yGKgX/IozrsvIOaOBwLHX81gEOwh5BZ6G++OKblQu+
nb7ZEyZYUQ4sT6I+HykcyA9amil4Six5qnOohNJwtd9QCZZiFWQhOS+cI627L0EU
uQ7DJ60McDyrMqgNWZOnBKLqoDSi2M1ZkXI1ACa/IoUeutITlMnZucLIdTM1VPhV
qQIJDqb2TaKQnjxnuqSXaA0DVwcSnX+VZgTUbzbV/+tlPENnQ3KcarqwvkUXlQB0
uagYmCURylUJXOT4r+8oUJDak4zwPjOQLH+PF3OdGScj4FIByNL+1G08UmhHzixi
a76J8eF0NOx65tBJDjie3McU7vrDJ8DrIbcM/LOvFa9PCrGe9wNmHqqOtoUuxdaR
b6co1YE34OF2cdyeaEVRVYtKFFp/Oa0ZA10eBEOFxzv4KTFi4/Y+nuMjKMYY0Kmo
XUxJAgMBAAGjUzBRMB0GA1UdDgQWBBQxTKcz/j1/m505HaGyrZtGqiDaFDAfBgNV
HSMEGDAWgBQxTKcz/j1/m505HaGyrZtGqiDaFDAPBgNVHRMBAf8EBTADAQH/MA0G
CSqGSIb3DQEBCwUAA4ICAQCcsA4imt0cpgYNbBvufvBpObGKkiSoimd6p1fpJhjX
PMDdtn6dVw2zbAmqDmBqdRTenK9J30OWVoYmpnh5H+p8wM1uT5js248DmhtXTeUd
xHHVyz9c2ooZT/7EGqWAa/VRpKAeN99uzEmLZzxxb0Sg7wvN8Q7KbIiJdtckqo09
sZqDXIKFnqRL0Gyys9ZvsGZFpZoUipA+IbJVQlArKjWFNZkPhT14xMPdoZAMX4Zi
45srzk4Z9sJjKkYaA5eFsirbPOi9N5KmrqmD2c1Jb4p3ScdzJO7ay5PmkYdeIq3K
vN9MPAuMSDWmQasqB/oO1gRmdcWNU2ABbsrEeALMPhe/J82meUQd7MorVC87OUJ6
mp2b97TTBDqsqsqrygKmWb2YFXFS/uR5ZaYEXDjxe9LXCRODRJAlGF882PS20YoV
iUBGWd361+nkLkJ3GaT8l/PkpHLg5mXU6UmiPEw9O+mzYFNAhYzvzfIP4G4afYYo
T+/8KBbqWVuW6ecv/vqLQIyc0ucOgnH9vhwliGTyMug/GhaTjXFtRdjdu0W7irmM
CgkLeEpvWN1xgNTBILIqva6dc31V36hOVgSjRcIr4r0sCe2I3J6ixw7ShHXxMYAi
od9Lz4mJrL4k1SovZEonEr6HmXYlsdV2R6/ZaoCKYN2F1zZ4IzGuSRU1iUiz5iCN
WQ==
-----END CERTIFICATE-----
Обратите внимание: Начиная с Python 3.13 реализованы более строгие настройки SSL. Это заставляет OpenSSL вести себя более строго в соответствии с RFC 5280, что может привести к несовместимости со старыми сертификатами X.509. Контекст SSL теперь использует VERIFY_X509_PARTIAL_CHAIN и VERIFY_X509_STRICT по умолчанию. Это означает, что CA-сертификат должен соответствовать всем строгим требованиям (например, X509v3 Key Usage, X509v3 Basic Constraints = Critical и т.д.).
Использование
python lxca_proxmox_integrator.py
Если не указать параметры, вы увидите справку по использованию:
usage: lxca_proxmox_integrator.py [-h] (-d | -x) [-v] [-c] [-V]
LXCA Proxmox integrator command line parameters
options:
-h, --help show this help message and exit
-d, --dry-run Simulate the upgrade
-x, --execute Perform the upgrade
-v, --verbose Add verbosity to the ouput
-c, --clearlog Move current log to backup and start a clean log file
-V, --version Show program version
Вы ОБЯЗАНЫ указать либо параметр -d | --dry-run, либо -x | --execute.
Параметры dry-run (-d | --dry-run) позволяют смоделировать полный цикл без выполнения действий в кластере.
Во время dry-run будет проведена симуляция, с выводом всех найденных особенностей среды (лучше использовать с опцией -v).
Настоятельно рекомендуется всегда сначала выполнять dry-run (-d | --dry-run) перед запуском с параметром -x | --execute, так как он запускает обновление прошивки.
Параметр -v | --verbose увеличивает подробность вывода (и в консоль, и в лог).
Параметр -c | --clearlog создаст резервную копию текущего лога и инициализирует новый пустой лог-файл.
Основной рабочий процесс инструмента:
- Запросит мастер-пароль, если требуется (необязательно)
- Подключится к вашему экземпляру LXCA.
- Проверит ваши узлы ThinkSystem на наличие доступных обновлений.
- Организует обновление прошивки по кластеру/узлам.
Обратите внимание: В настоящее время онлайн-миграция контейнеров CT не поддерживается; поэтому миграция будет выполняться путем выключения контейнера и немедленного запуска на целевом хосте.
Логирование
Все операции логируются в консоль и в файл (lxca_proxmox_integrator.log). Просматривайте логи для проверки успешности обновлений и устранения проблем.
Отказ от ответственности
-
В качестве лучшей практики настоятельно рекомендуем всегда тестировать обновления прошивки и драйверов в тестовой или непроизводственной среде перед массовым развертыванием в кластере. Также можно использовать режим DRY_RUN для симуляции операций без применения обновлений прошивки.
-
Любые ошибки, возникшие в процессе, приведут к остановке инструмента, чтобы IT-администратор мог проверить и устранить проблему. Единственное исключение — "включение" ВМ/CT, которое будет отображено в логе, но процедура продолжится. Может потребоваться ручное восстановление корректного состояния.
-
Если иное не требуется по закону или не согласовано письменно, программное обеспечение, распространяемое по Лицензии, предоставляется "КАК ЕСТЬ", без каких-либо гарантий, явных или подразумеваемых. См. Лицензию для получения информации о правах и ограничениях по Лицензии.
Лицензия
Лицензия Apache, версия 2.0 (далее "Лицензия"): http://www.apache.org/licenses/LICENSE-2.0