Introdução à Automação de Infraestrutura com Nutanix Playbooks
No cenário atual de DevOps e operações de TI modernas, a agilidade na entrega de infraestrutura é tão crítica quanto a qualidade do código aplicado. A virtualização deixou de ser apenas uma ferramenta de consolidação de recursos para se tornar a base dinâmica sobre a qual os serviços cloud-native são construídos. Neste contexto, o Nutanix se destaca não apenas por sua arquitetura hyperconverged (HCI), mas também pela robustez de suas ferramentas de orquestração.
Muitos administradores de sistemas e engenheiros de infraestrutura ainda recorrem à interface gráfica do Prism Element ou Prism Central para provisionar máquinas virtuais. Embora eficaz para tarefas pontuais, essa abordagem manual torna-se um gargalo em ambientes escaláveis. É aqui que os Nutanix Playbooks entram em cena. Baseados na engine do Ansible, os Playbooks permitem definir a infraestrutura como código (IaC), garantindo consistência, repetibilidade e auditoria completa dos processos de deploy.
Este tutorial guia você pelo processo completo de criação e execução de um playbook para automatizar o provisionamento de uma VM, utilizando a API RESTful do Nutanix. O objetivo é demonstrar como integrar a camada de virtualização ao pipeline de CI/CD, eliminando erros humanos e acelerando o tempo de provisionamento.
Pré-requisitos e Configuração do Ambiente
Antes de escrever a primeira linha de código, é essencial garantir que seu ambiente esteja preparado para comunicar-se com a API do Nutanix. Os Playbooks do Nutanix dependem fortemente da interação via REST API, portanto, a segurança e a conectividade são pontos críticos.
- Acesso à API: Certifique-se de que possui credenciais de administrador ou um usuário personalizado com permissões suficientes para criar VMs, gerenciar redes e discos no cluster Nutanix (AHV - Acropolis Hypervisor).
- Ferramentas Locais: Em sua estação de trabalho ou servidor de controle Ansible, você precisará ter o Python 3 instalado. O módulo oficial do Nutanix para Ansible deve ser baixado.
- Instalação do Módulo: Utilize o gerenciador de pacotes pip para instalar a coleção necessária. Execute o comando abaixo no terminal:
pip install ntnx-ansible-collection
Após a instalação, verifique se o módulo foi reconhecido executando ansible-galaxy collection list. Você deve ver a coleção nutanix.nutanix ou similar em sua lista. Esta etapa é fundamental para que o Ansible reconheça os módulos específicos de virtualização do Nutanix durante a execução.
Estruturação do Playbook: Definição de Variáveis e Conexão
Um playbook bem estruturado deve separar claramente a configuração da conexão dos recursos a serem criados. Vamos começar definindo as variáveis que armazenam os dados sensíveis e os parâmetros de conexão. Isso facilita a reutilização do código em diferentes ambientes (dev, staging, production) apenas alterando um arquivo de variáveis.
Crie um arquivo chamado vars.yml para manter suas configurações fora do playbook principal. Isso é uma boa prática de segurança e organização.
# vars.yml
ntnx_controller_ip: "192.168.5.10"
ntnx_username: "admin"
ntnx_password: "sua_senha_segura_aqui"
vm_name: "web-server-01"
vm_description: "Servidor Web automatizado via Nutanix Playbook"
Agora, abra o arquivo principal do playbook, por exemplo, deploy_vm.yml. A primeira seção deve definir a conexão com o cluster. Utilizamos o módulo ntnx_info ou configurações diretas de host para estabelecer o contexto.
---
- name: Provisionar VM no Nutanix AHV
hosts: localhost
connection: local
gather_facts: no
vars_files:
- vars.yml
tasks:
# Tarefa de conexão e validação básica
- name: Validar conexão com o Cluster Nutanix
nutanix.nutanix.ntnx_info:
hostname: "{{ ntnx_controller_ip }}"
username: "{{ ntnx_username }}"
password: "{{ ntnx_password }}"
api_version: "2021-07-30"
register: cluster_info
Neste trecho, estamos usando o módulo ntnx_info para garantir que o endpoint da API está acessível. O parâmetro api_version é crucial; verifique sempre a versão mais recente suportada pela sua instância do Prism Central ou Prism Element. Se a conexão falhar, o playbook interromperá a execução imediatamente, evitando provisionamentos incompletos.
Identificando Recursos de Infraestrutura
Antes de criar a máquina virtual, precisamos identificar os identificadores únicos (UUIDs) dos recursos existentes no cluster: o sub-rede onde a VM residirá e o template de disco (ou ISO) que servirá como base. Criar UUIDs manualmente é propenso a erros; vamos automatizar essa descoberta.
Adicione uma nova tarefa para buscar a lista de redes disponíveis. Isso permite que você selecione dinamicamente a rede correta baseada em tags ou nomes.
- name: Buscar UUID da Rede (Subnet)
nutanix.nutanix.ntnx_network_info:
hostname: "{{ ntnx_controller_ip }}"
username: "{{ ntnx_username }}"
password: "{{ ntnx_password }}"
api_version: "2021-07-30"
filter: "name=={{ network_name }}" # Defina network_name em vars.yml
register: network_result
- name: Definir UUID da Rede
set_fact:
target_network_uuid: "{{ network_result.entities[0].metadata.uuid }}"
O mesmo processo deve ser aplicado para o disco. Se você estiver utilizando um template de VM pré-configurado (Golden Image), obtenha seu UUID. Caso contrário, especifique o caminho da ISO no armazenamento do Nutanix.
- name: Buscar UUID do Template/Disco
nutanix.nutanix.ntnx_disk_info:
hostname: "{{ ntnx_controller_ip }}"
username: "{{ ntnx_username }}"
password: "{{ ntnx_password }}"
api_version: "2021-07-30"
filter: "name=={{ disk_template_name }}"
register: disk_result
- name: Definir UUID do Disco Base
set_fact:
target_disk_uuid: "{{ disk_result.entities[0].metadata.uuid }}"
Essa abordagem de "descoberta dinâmica" torna o playbook resiliente a mudanças na infraestrutura. Se você mover uma rede ou renomear um disco (desde que mantenha o padrão de busca), o script se ajustará automaticamente.
Criação da Máquina Virtual
Agora chegamos ao núcleo da automação: a criação da VM em si. Utilizaremos o módulo ntnx_vm. Este é o módulo mais complexo, pois requer a definição detalhada de hardware (CPU, RAM), disco e rede.
- name: Criar Máquina Virtual no AHV
nutanix.nutanix.ntnx_vm:
hostname: "{{ ntnx_controller_ip }}"
username: "{{ ntnx_username }}"
password: "{{ ntnx_password }}"
api_version: "2021-07-30"
name: "{{ vm_name }}"
description: "{{ vm_description }}"
power_state: "ON"
num_vcpus_per_socket: 2
num_sockets: 2
memory_size_mib: 4096
boot_type: "UEFI_SECURE_BOOT"
devices:
disk_devices:
- data_source_identifier_type: "UUID_ENDPOINT"
data_source_identifier: "{{ target_disk_uuid }}"
disk_address:
device_index: 0
adapter_type: "SCSI"
- data_source_identifier_type: "DISK_ENDPOINT"
disk_size_bytes: 21474836480 # 20GB
disk_address:
device_index: 1
adapter_type: "SCSI"
nic_devices:
- network_uuid: "{{ target_network_uuid }}"
state: present
register: vm_creation_result
Observe os detalhes importantes neste bloco:
- Power State: Definimos como "ON" para que a VM inicie assim que for criada. Se preferir apenas provisionar e iniciar manualmente depois, use "OFF".
- Boot Type: Especificamos UEFI Secure Boot, padrão moderno para sistemas operacionais recentes (Windows Server 2019+, Ubuntu 20.04+).
- Dispositivos: A estrutura de dispositivos é hierárquica. O primeiro disco aponta para o UUID do template (o sistema operacional), e o segundo é um disco vazio de 20GB, útil para dados ou logs.
- NIC Devices: Conectamos a placa de rede ao UUID da sub-rede descoberta anteriormente.
A variável register: vm_creation_result captura a resposta da API. Isso é vital para extração posterior do IP atribuído à VM, permitindo que o próximo passo do seu pipeline (ex: Ansible WinRM ou SSH) se conecte à nova instância.
Extração de Endereço IP e Validação Final
Após a criação, o Nutanix atribuirá um endereço IP via DHCP (ou estático, se configurado na rede). Para que outros sistemas possam interagir com essa VM, precisamos extrair esse IP.
- name: Aguardar inicialização e obter IP
wait_for:
timeout: 120
# Nota: Em ambientes reais, use um loop ou task específica do Nutanix para polling de status da VM
# até que o status seja "Running" e os dados de rede estejam disponíveis.
- name: Exibir IP da Nova VM
debug:
msg: "A VM {{ vm_name }} foi criada com sucesso. UUID: {{ vm_creation_result.metadata.uuid }}"
Em um cenário de produção avançado, você pode querer integrar isso com o Ansible wait_for_connection para aguardar até que a porta SSH (Linux) ou RDP/WinRM (Windows) esteja aberta antes de prosseguir com configurações de software.
Execução e Troubleshooting
Com o playbook completo, execute-o usando o comando ansible-playbook. Recomendamos sempre usar a flag --check na primeira execução para simular as alterações sem aplicá-las ao ambiente real.
ansible-playbook deploy_vm.yml --check -v
A flag -v aumenta o nível de verbosidade, mostrando exatamente quais chamadas de API estão sendo feitas. Isso é inestimável para debug. Se tudo passar no modo check, execute novamente sem a flag:
ansible-playbook deploy_vm.yml -v
Se ocorrerem erros comuns, verifique os seguintes pontos:
- Autorização 401: Verifique se o usuário e senha em
vars.ymlestão corretos e se o usuário tem permissão de leitura/escrita no cluster. - UUID Inválido: Se o módulo reclamar sobre UUIDs inválidos, verifique se a busca pela rede ou disco retornou resultados. Às vezes, o filtro de nome pode não encontrar nada se houver espaços ou maiúsculas/diminutas incorretas.
- Espaço em Disco: Certifique-se de que há espaço suficiente no armazenamento do Nutanix para a nova VM e o template base.
Integração com CI/CD e Boas Práticas
A verdadeira potência dos Nutanix Playbooks é revelada quando integrados a ferramentas como Jenkins, GitLab CI ou GitHub Actions. Você pode versionar seus playbooks em um repositório Git. Sempre que houver uma mudança no código da aplicação, o pipeline de CI/CD pode disparar este playbook para provisionar uma VM fresca, aplicar configurações via Ansible (config management) e desligá-la após os testes.
Para ambientes de grande escala, considere usar Sentinels do Nutanix em conjunto com Playbooks. Os Sentinels são gatilhos baseados em eventos que podem iniciar um playbook automaticamente quando uma VM é criada ou deletada, permitindo automações reativas e complexas sem necessidade de orquestrador externo.
Além disso, utilize AhV Templates (Golden Images) para garantir que todas as VMs provisionadas tenham o mesmo nível de patching e hardening. Nunca provisione a partir de uma ISO crua em ambientes de produção; use templates pré-criados e versionados.
Conclusão
A automação de deploy com Nutanix Playbooks transforma a virtualização de uma atividade operacional manual para um processo de engenharia de software. Ao tratar a infraestrutura como código, equipes de DevOps ganham controle, visibilidade e velocidade.
Neste tutorial, cobrimos desde a configuração inicial até a criação completa de uma VM com discos e rede, utilizando os módulos oficiais do Ansible. A prática contínua dessas técnicas permitirá que você escale sua infraestrutura horizontalmente, mantendo a consistência e a confiabilidade exigidas pelos ambientes corporativos modernos. Lembre-se: a documentação da API REST do Nutanix é sua melhor amiga para expandir essas capacidades além do básico.