Lenovo XClarity Integrator para Proxmox
Lenovo XClarity Integrator para Proxmox é uma ferramenta baseada em Python que permite atualizações automatizadas de firmware para ambientes Proxmox Cluster rodando em servidores Lenovo ThinkSystem. Ela se integra ao Lenovo XClarity Administrator (LXCA) para garantir que sua infraestrutura esteja sempre atualizada com as últimas atualizações de hardware, minimizando o tempo de inatividade e reduzindo a intervenção manual.
Essa solução foi criada para administradores de TI que desejam simplificar a gestão de atualizações em seus clusters Proxmox.
Funcionalidades
- Integração transparente com a API REST do Lenovo XClarity Administrator.
- Atualização automática de firmware baseada em políticas aplicadas via Lenovo XClarity Administrator
- Operações de atualização com reconhecimento de cluster para reduzir interrupções de serviço.
- Registro e relatório dos resultados das atualizações.
- Configuração personalizável via
config.ini.
Como funciona
Ao executar o programa, ele realiza os seguintes passos:
- Carrega os parâmetros de execução do arquivo
config.ini - Solicita a senha mestra, caso as senhas estejam armazenadas de forma segura (ou seja, criptografadas)
- Verifica se os hosts são gerenciados pelo LXCA e se existe uma política de conformidade de firmware associada
- Verifica se os hosts estão em conformidade com a política atribuída
- Se não estiverem, sequencialmente, evacua as VMs e CTs do host, realiza a atualização de firmware via LXCA, e retorna as VMs para o host atualizado
Requisitos
- Python: 3.x (testado com Python 3.11 e Python 3.13 (SSL estrito))
- As bibliotecas Python listadas em
requirements.txt - Uma instância do Lenovo XClarity Administrator em funcionamento com credenciais de API apropriadas
- Um cluster Proxmox VE ou nó único Proxmox VE rodando em servidores suportados pelo Lenovo XClarity Administrator (testado apenas em servidores Lenovo ThinkSystem)
- Uma Política de Conformidade atribuída a cada servidor do cluster
- Uma instância de SO para rodar essa ferramenta (Linux é preferido, mas deve funcionar também no Windows). ATENÇÃO: Não é suportado/recomendado rodar diretamente nos servidores Proxmox.
Instalação
-
Extraia o pacote no seu sistema (preferencialmente Linux)
-
(Opcional, mas recomendado) Configure um Ambiente Virtual Python 2.1. Crie um novo ambiente virtual no diretório do projeto:
python -m venv venv2.2. Ative o ambiente virtual:
- No Linux/Mac:
source venv/bin/activate- No Windows:
venv\Scripts\activate -
Instale as dependências:
pip install -r requirements.txt -
Prepare seu arquivo de configuração (veja Arquivo de Configuração abaixo).
Arquivo de Configuração
-
Revise o arquivo de configuração de exemplo
config.ini.sample. Esse arquivo contém todos os parâmetros configuráveis, incluindo:- Hostname ou IP do LXCA
- Credenciais de API do LXCA
- Lista de nós do cluster Proxmox
-
Copie o exemplo e personalize:
cp config.ini.sample config.ini
Edite o config.ini com seu editor preferido para declarar as configurações específicas do ambiente.
Detalhes dos campos
Seção Proxmox
-
PROXMOX_USER - Obrigatório - Este campo contém o nome do usuário autorizado a acessar o cluster Proxmox (todos os nós do cluster) e realizar ações como migrar VMs. DEVE ser um usuário Linux, pois também é necessário para colocar o nó em modo de manutenção. - Padrão = root@pam (sem aspas).
-
PROXMOX_PASS - Obrigatório - Você deve armazenar aqui a senha do usuário declarado no campo
PROXMOX_USER. A senha pode ser armazenada, sem aspas, em texto simples (mais fácil, menos seguro) ou de forma criptografada (mais seguro). Para instruções de como armazenar a senha criptografada no arquivo de configuração, veja a seção "Segurança" abaixo. -
PROXMOX_VERIFY_SSL - Obrigatório - Se quiser ignorar a validação do certificado SSL, pode definir este campo como
False. Normalmente, com certificados autoassinados, esse é o comportamento mais comum; se estiver usando certificados autoassinados e Python > 3.11, você DEVE definir esse parâmetro comoFalse. Você pode definir comoTrueseguindo as instruções da seção "Validação de Certificado CA". -
CLUSTER_NODES - Obrigatório - Este campo contém o(s) host(s) que podem ser atualizados pela ferramenta. O campo é um array onde cada elemento é um objeto tipo JSON descrevendo três parâmetros do host: -- xcc = Endereço IP do XCC do host (DEVE ser o endereço IP, não o hostname) -- pve_ip = Endereço IP do host PVE -- pve_host = hostname do host PVE
o formato esperado para o host é:
{"xcc":<IP_xcc_node>, "pve_ip": <IP_node> , "pve_host": <NAME_node>}
-
TIMEOUT_HOST - Opcional - Especifique aqui o tempo máximo (em segundos) para aguardar a conclusão do processo de upgrade. - Padrão = 3600
-
TIMEOUT_VM - Opcional - Especifique aqui o tempo máximo (em segundos) para aguardar a conclusão das operações de VM (migração, desligamento) antes de retornar um erro. - Padrão = 300 segundos
-
VM_LOCAL_DISKS - Obrigatório - Valores permitidos:
POWEROFFpara autorizar a ferramenta a desligar as VMs com discos locais (ex: cdrom, discos de VM em armazenamento local),FAILpara interromper o procedimento e permitir correção manual. - Padrão =FAIL -
VM_LOCAL_RESOURCES - Obrigatório - Valores permitidos:
POWEROFFpara autorizar a ferramenta a desligar as VMs com recursos locais (ex: adaptador PCIe),FAILpara interromper o procedimento e permitir correção manual. - Padrão =FAIL -
VM_LOCAL_DISKS_EXPERT - Experimental - Opcional - Use por sua conta e risco!! - SOMENTE PARA EXPERTS - Não use a menos que saiba o que está fazendo. Este parâmetro permite a migração de VMs com disco local (sem cdrom). É sua responsabilidade verificar se todos os requisitos estão satisfeitos em tempo de execução (ex: mesmos nomes de storage, espaço em disco suficiente, etc). Valores permitidos:
True, o programa tentará migrar a VM com disco local (sem cd-rom), ouFalse, o programa seguirá o que está definido emVM_LOCAL_DISKS. Padrão =False
Sessão LXCA
-
LXCA_HOST - Obrigatório - Este campo contém o endereço IP (ou hostname se resolvido por DNS) da instância Lenovo XClarity Administrator (LXCA) que gerencia os servidores Proxmox.
-
LXCA_USER - Obrigatório - Este campo contém o nome de usuário administrativo do LXCA autorizado a realizar atualizações nos servidores gerenciados pelo Proxmox.
-
LXCA_PASS - Obrigatório - Insira aqui a senha do usuário LXCA especificado no campo
LXCA_USER. A senha pode ser armazenada, sem aspas, em texto simples (mais fácil, menos seguro) ou de forma criptografada (mais seguro). Para instruções de como armazenar a senha criptografada no arquivo de configuração, veja a seção "Segurança" abaixo. -
LXCA_VERIFY_SSL - Obrigatório - Se quiser ignorar a validação do certificado SSL, pode definir este campo como
False. Normalmente, com certificados autoassinados, esse é o comportamento mais comum; se estiver usando certificados autoassinados e Python > 3.11, você DEVE definir esse parâmetro comoFalse. Você pode definir comoTrueseguindo as instruções da seção "Validação de Certificado CA".
Seção de Segurança
- SALT - Opcional - Você pode armazenar o SALT aqui para permitir o armazenamento de senhas criptografadas.
Atenção: se você se preocupa em armazenar senhas em texto simples no arquivo config.ini, pode usar o procedimento abaixo para armazená-las criptografadas. Se a opção SALT estiver declarada no arquivo config.ini, o programa solicitará a senha mestra para descriptografar os campos de senha na configuração.
Como criptografar a senha no config.ini (opcional)
Você pode executar o programa create_encrypted_password.py se quiser armazenar a senha criptografada no arquivo de configuração.
python create_encrypted_password.py
Ele solicitará uma senha mestra (necessária posteriormente para rodar o integrador) e irá criptografar as senhas do PVE e LXCA, exibindo as linhas que devem ser inseridas no arquivo de configuração (exemplo):
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==
Validação de Certificado CA
Se você utiliza certificados personalizados no seu ambiente, pode optar por validar os certificados dos hosts Proxmox e/ou da instância LXCA para estar em conformidade com requisitos de segurança.
Para isso, é necessário criar, no mesmo diretório da ferramenta, um arquivo chamado custom_cacert.pem onde você deve armazenar manualmente o(s) certificado(s) CA do seu ambiente no formato pem (veja exemplo abaixo):
-----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-----
Atenção: A partir do Python 3.13 alguns padrões mais rígidos foram implementados na gestão de SSL. Isso faz com que a implementação OpenSSL subjacente se comporte mais conforme a RFC 5280, em troca de uma pequena incompatibilidade com certificados X.509 mais antigos. O contexto SSL agora usa VERIFY_X509_PARTIAL_CHAIN e VERIFY_X509_STRICT em suas flags de verificação padrão. Isso significa que o certificado CA deve estar em conformidade com todas as regras rígidas (ex: X509v3 Key Usage, X509v3 Basic Constraints = Critical, etc).
Uso
python lxca_proxmox_integrator.py
Sem nenhum parâmetro passado, você verá esta ajuda de uso:
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
Você DEVE especificar o parâmetro -d | --dry-run ou o -x | --execute.
Os parâmetros de simulação (-d | --dry-run) permitem simular todo o ciclo sem executar nenhuma ação no cluster.
Durante a rodada de simulação, será feita uma análise, listando todos os achados no ambiente (recomendado usar com a opção -v).
É altamente recomendado sempre realizar uma simulação (-d | --dry-run) antes de rodar com o parâmetro -x | --execute, pois este irá executar as atualizações de firmware.
O parâmetro -v | --verbose adiciona verbosidade à saída (tanto no console quanto no log).
O parâmetro -c | --clearlog cria um backup do log atual e inicializa um novo arquivo de log vazio.
O fluxo principal da ferramenta:
- Solicita a senha mestra se necessário (opcional)
- Conecta à sua instância LXCA.
- Verifica seus nós ThinkSystem para atualizações disponíveis.
- Orquestra a atualização de firmware pelo cluster/nós.
Atenção: Atualmente, a migração online de containers CT não é suportada; portanto, a migração será feita desligando o container e reiniciando-o imediatamente no host de destino.
Logs
Todas as operações são registradas no console e também em um arquivo de log (lxca_proxmox_integrator.log). Revise os logs para verificar o sucesso das atualizações e solucionar possíveis problemas.
Avisos
-
Como boa prática, sugerimos fortemente sempre testar atualizações de firmware e drivers em um ambiente de homologação ou não-produtivo antes de aplicá-las em todo o cluster. Você também pode usar a execução DRY_RUN para simular as demais operações sem aplicar as atualizações de firmware.
-
Qualquer erro encontrado durante o procedimento fará com que a ferramenta seja interrompida, permitindo que o administrador de TI verifique e corrija o problema. A única exceção está relacionada ao "power on" das VMs/CTs, que será exibido no log, mas o procedimento continuará. Pode ser necessário realizar recuperação manual para restaurar o estado correto.
-
Exceto quando exigido por lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Veja a Licença para as regras específicas que regem permissões e limitações sob a Licença.
Licença
Licenciado sob a Apache License, Versão 2.0 (a "Licença"): http://www.apache.org/licenses/LICENSE-2.0