Gerencie VPS Proxmox via CLI usando pvesh e jq

10 min de leitura Infraestrutura
Gerencie VPS Proxmox via CLI usando pvesh e jq

A automação de infraestrutura é um pilar fundamental para profissionais de TI que gerenciam ambientes de virtualização em escala. Embora a interface web do Proxmox VE (PVE) seja intuitiva e robusta para tarefas manuais, ela se torna um gargalo quando precisamos executar operações repetitivas, criar scripts de provisionamento ou integrar o hipervisor com ferramentas de orquestração como Ansible, Terraform ou Jenkins. É aqui que a linha de comando entra em jogo, oferecendo velocidade, precisão e a capacidade de scriptar ações complexas.

O pvesh é uma ferramenta de linha de comando incluída nativamente no Proxmox VE. Ela permite acessar a API REST do Proxmox sem a necessidade de instalar bibliotecas externas ou gerenciar tokens manualmente. Combinada com o jq, um processador JSON leve e flexível, você ganha o poder de transformar dados brutos da API em informações estruturadas e acionáveis instantaneamente. Neste tutorial, vamos explorar como configurar seu ambiente e utilizar essas ferramentas para gerenciar sua VPS Proxmox via CLI.

Entendendo a Ferramenta pvesh

O pvesh funciona como uma interface de linha de comando para a API REST do Proxmox. Diferente das ferramentas tradicionais de gerenciamento que muitas vezes dependem de chamadas complexas ao shell do host, o pvesh comunica-se diretamente com os endpoints da API. Isso significa que qualquer ação que você pode realizar na interface gráfica, pode ser replicada via linha de comando, garantindo consistência e permitindo a automação.

A grande vantagem do pvesh é sua simplicidade de autenticação. Ele utiliza as credenciais do usuário configuradas no sistema local ou pode ser direcionado para usar certificados SSH, facilitando a execução remota segura. Além disso, o formato de saída padrão é JSON, o que torna a ferramenta perfeitamente compatível com jq e outras ferramentas de processamento de dados.

Instalação do jq no Ambiente Local

Para extrair valor completo dos dados retornados pelo pvesh, precisamos de uma ferramenta para analisar JSON. O jq é o padrão da indústria para essa tarefa em ambientes Linux. Antes de prosseguir com os comandos, certifique-se de que o jq está instalado na máquina onde você irá executar os scripts (seja no nó Proxmox ou em sua estação de trabalho administrativa).

Em distribuições baseadas em Debian/Ubuntu, utilize o gerenciador de pacotes apt:

sudo apt update
sudo apt install jq -y

Para sistemas RHEL/CentOS/Rocky Linux:

sudo dnf install jq -y

Verifique a instalação executando jq --version. Se a versão for exibida, seu ambiente está pronto para processar as saídas JSON do Proxmox.

Configurando Autenticação e Permissões

Antes de emitir qualquer comando, é crucial entender como o pvesh se autentica. Por padrão, ele tenta usar as credenciais armazenadas no arquivo /etc/pve/priv/accesscontrol ou solicita interação via terminal. Para automação, a melhor prática é utilizar um token de API específico ou configurar o uso de chaves SSH.

Importante: Nunca utilize a conta root para scripts de automação se puder evitar. Crie um usuário dedicado com permissões mínimas necessárias (Privilégio Mínimo). No Proxmox VE, vá em Datacenter > Permissions > Users e crie um novo usuário, por exemplo, automation@pam. Atribua a este usuário apenas as permissões de leitura ou escrita específicas para os recursos que ele precisa gerenciar.

Se você estiver executando os comandos diretamente no nó Proxmox, o pvesh já terá acesso local. Se for executar remotamente, use a flag --server e forneça as credenciais via variáveis de ambiente ou entrada padrão para evitar expor senhas no histórico de comandos.

Listando Máquinas Virtuais e Containers

A primeira tarefa comum é obter um inventário dos recursos disponíveis. O pvesh organiza os comandos em hierarquias que espelham a estrutura da API. Para listar todas as VMs (máquinas virtuais QEMU), utilizamos o caminho /nodes/{node}/qemu.

O comando básico seria:

pvesh get /nodes/proxmox1/qemu

No entanto, a saída padrão pode ser verbosa. Para obter uma lista limpa apenas dos IDs das VMs e seus estados, combinamos o pvesh com o jq. Isso é essencial para criar loops em scripts bash.

pvesh get /nodes/proxmox1/qemu | jq -r '.[] | "\(.id) \(.status)"'

Neste comando, o jq -r remove as aspas da saída final. A expressão .[] itera sobre cada item do array JSON retornado. Em seguida, interpolamos as propriedades id e status para exibir apenas o identificador da máquina (ex: 100) e seu estado atual (ex: running, stopped). Isso permite que você crie relatórios rápidos de saúde do ambiente.

Para listar containers LXC, a lógica é idêntica, alterando apenas o caminho:

pvesh get /nodes/proxmox1/lxc | jq -r '.[] | "\(.id) \(.status)"'

Gestão de Recursos e Storage

Além de máquinas virtuais, a gestão de armazenamento é crítica. O Proxmox utiliza conceitos como datastores (lvm-thin, nfs, dir, etc.). Para verificar o uso de espaço em disco dos storage disponíveis no nó, podemos consultar o endpoint de storage.

pvesh get /nodes/proxmox1/storage | jq -r '.[] | "\(.storage): \(.content)"'

Este comando retorna uma lista simples de cada nome de storage e os tipos de conteúdo permitidos (vm, images, iso, backup). Para obter informações mais detalhadas sobre capacidade, uso e tipo específico, podemos filtrar ainda mais:

pvesh get /nodes/proxmox1/storage | jq -r '.[] | select(.enabled == true) | "\(.storage): Total=\(.maxdisk) Used=\(.used)"'

O uso de select no jq é poderoso para filtrar apenas recursos ativos, ignorando storages desabilitados ou offline. Essa abordagem permite monitorar a saúde do armazenamento diretamente via CLI e integrar com sistemas de alerta como Prometheus ou Zabbix.

Criando e Configurando VMs via Script

A verdadeira potência da automação surge quando criamos recursos programaticamente. Embora a criação completa de uma VM com todas as opções via linha de comando seja extensa, o pvesh permite a execução de métodos POST na API.

Para criar uma VM básica, você deve montar um payload JSON e enviá-lo ao endpoint correto. No entanto, o pvesh facilita isso aceitando parâmetros via linha de comando ou stdin. Um exemplo simplificado de criação de uma VM QEMU seria:

pvesh create /nodes/proxmox1/qemu \
  --name my-new-vm \
  --memory 2048 \
  --cores 2 \
  --net0 virtio=92:7E:3A:1B:2C:3D,bridge=vmbr0 \
  --scsi0 local-lvm:0

Atenção: Este comando é um exemplo básico. Em produção, você deve especificar discos com tamanhos explícitos e garantir que o disco de boot exista. A validação dos parâmetros antes da execução é vital para evitar a criação de VMs incompletas.

Para tarefas mais complexas, como clonagem de templates ou criação de snapshots, o fluxo envolve gerar um JSON estruturado e passá-lo ao comando create. O jq pode ser usado para construir esse payload dinamicamente baseado em variáveis do ambiente:

SNAPSHOT_NAME="backup-$(date +%F)"
PAYLOAD=$(jq -n --arg snap "$SNAPSHOT_NAME" '{vmid: 100, description: $snap}')
echo $PAYLOAD | pvesh create /nodes/proxmox1/qemu/100/snapshot

Neste exemplo, geramos dinamicamente o nome do snapshot baseado na data atual e criamos uma nova cópia de segurança instantânea da VM com ID 100. Isso é extremamente útil para rotinas de backup noturno automatizado.

Monitoramento de Status e Logs

A automação também serve para monitoramento. Você pode criar scripts que verificam periodicamente o status das VMs e enviam alertas se alguma máquina crítica parar inesperadamente.

pvesh get /nodes/proxmox1/qemu | jq -r '.[] | select(.status != "running") | "\(.id) is \(.status)"'

Se este comando retornar linhas, significa que há VMs não em execução. Você pode integrar essa lógica a um script cron:

#!/bin/bash
DOWN_VMS=$(pvesh get /nodes/proxmox1/qemu | jq -r '.[] | select(.status != "running") | .id')
if [ -n "$DOWN_VMS" ]; then
    echo "Alerta: As seguintes VMs estão paradas: $DOWN_VMS"
    # Adicione aqui a lógica de envio de e-mail ou notificação Slack
fi

Esse script pode ser executado a cada 5 minutos. A combinação de pvesh para coleta de dados e jq para filtragem torna o script leve, rápido e sem dependências pesadas.

Boas Práticas e Segurança

Ao adotar a automação via CLI no Proxmox, considere as seguintes práticas para manter a estabilidade e segurança do seu ambiente:

  • Teste em Ambiente Homologado: Nunca execute scripts de criação ou modificação diretamente em produção sem testar antes. Use um nó de laboratório idêntico.
  • Versionamento de Scripts: Mantenha seus scripts de automação em repositórios Git. Isso permite rastrear mudanças, reverter erros e colaborar com a equipe.
  • Logs Detalhados: Ao escrever scripts bash que utilizam pvesh, redirecione saídas de erro para logs separados. A API do Proxmox retorna códigos de erro específicos que ajudam na depuração.
  • Limites de Rate: A API do Proxmox possui limites de requisições. Evite loops infinitos ou consultas excessivamente frequentes (ex: a cada segundo) para não bloquear seu usuário na API.

Integração com Ansible

Embora o pvesh seja excelente para scripts bash simples, para orquestração complexa de múltiplos nós, a integração com Ansible é recomendada. O Proxmox oferece módulos oficiais no Ansible Galaxy que utilizam internamente chamadas similares à API REST. No entanto, entender o pvesh ajuda diretamente na escrita de playbooks Ansible personalizados ou na resolução de problemas quando os módulos padrão não cobrem um caso de uso específico.

Você pode usar o módulo command ou shell no Ansible para chamar o pvesh se precisar de uma funcionalidade muito específica que ainda não tenha um módulo dedicado, aproveitando a mesma sintaxe JSON e filtros do jq.

Conclusão

O gerenciamento de VPS Proxmox via CLI com pvesh e jq representa o nível seguinte na maturidade operacional de qualquer administrador de sistemas. Ao abandonar a dependência exclusiva da interface web, você ganha controle granular, velocidade de execução e a capacidade de integrar seu ambiente de virtualização a pipelines CI/CD modernos.

A curva de aprendizado inicial para entender a estrutura JSON da API pode ser íngrime, mas uma vez dominada, a produtividade aumenta significativamente. Comece simples: liste suas VMs, monitore o status do storage e automatize backups básicos. À medida que ganha confiança, expanda para criação dinâmica de recursos e integração com ferramentas de monitoramento.

Lembre-se sempre de validar seus comandos em ambiente seguro e manter suas credenciais protegidas. A automação é uma ferramenta poderosa que, quando usada corretamente, transforma a gestão de infraestrutura de uma tarefa manual propensa a erros em um processo confiável e escalável.

Compartilhar: Link copiado!
Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000