Перейти к основному содержимому

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.

Установка

  1. Распакуйте пакет на вашей системе (лучше на базе Linux)

  2. (Необязательно, но рекомендуется) Настройте виртуальное окружение Python 2.1. Создайте новое виртуальное окружение в каталоге проекта:

    python -m venv venv

    2.2. Активируйте виртуальное окружение:

    • В Linux/Mac:
    source venv/bin/activate
    • В Windows:
    venv\Scripts\activate
  3. Установите зависимости:

    pip install -r requirements.txt
  4. Подготовьте файл конфигурации (см. раздел Config File ниже).


Файл конфигурации

  1. Ознакомьтесь с примером конфигурационного файла config.ini.sample. В этом файле указаны все настраиваемые параметры, включая:

    • Имя хоста или IP LXCA
    • Учетные данные API LXCA
    • Список узлов кластера Proxmox
  2. Скопируйте пример и настройте его:

    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