Ansible – inventario dinâmico VMWare
Resumo
Automação é extremamente necessário para tornar possível a infraestrutura de TI acompanhar o dinamismo das necessidades de seus usuários. Criar, configurar, alterar e remover novos servidores torna-se parte da rotina diária das operações de TI. Como efeito colateral, é mais fácil perder a rastreabilidade desses servidores. Manter um inventário atualizado começa a se tornar uma tarefa trabalhosa. Para quem usa Ansible e o monitor de máquinas virtuais (hypervisor) da VMWare, é possível manter seu inventário atualizado, de forma automática, através de um plugin de inventário dinâmico. O inventário sempre irá refletir as VMs existentes no vCenter. Nesse post falarei sobre como instalar, configurar e usar essa ferramenta..
Requisitos
- Possuir conhecimentos básicos de Ansible
- Possuir conhecimentos básicos de vCenter da VMWare
Cenário usado
Para validar essa postagem eu usei o seguinte ambiente:
- vCenter 6.7
- Ubuntu 22.04 minimal
- Ansible 2.14 (ppa)
Instalando
Instalando o Ansible via apt no Ubuntu.
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible-core
Essa instalação foi feita em um Ubuntu minimal recém instalado, que não possuía o Ansible instalado. Caso a sua instalação já possua um Ansible instalado, remova com sudo apt remove ansible
Instalando as bibliotecas adicionais para comunicação com vCenter.
$ sudo apt install pip
$ pip install pyvmomi
$ ansible-galaxy collection install community.vmware
Configurando
Crie um arquivo inventory.vmware.yml com o seguinte conteúdo. Importante o arquivo finalizar com vmware.yml ou vmware.yaml. Caso não finalize dessa forma o filtro não será carregado.
---
plugin: community.vmware.vmware_vm_inventory
strict: false
hostname: <fqdn ou ip do vcenter>
username: <usuario para acesso ao vcenter>
password: <senha do usuario para acesso ao vcenter>
validate_certs: false
No meu ambiente de testes o vcenter usa um certificado auto-assinado. Se não for o seu caso, recomenda-se a remoção da última linha para que o certificado seja devidamente validado
Testando
Para testar, liste os hosts com o seguinte comando
$ ansible-inventory -i inventory.vmware.yaml --graph
Esse comando irá listar todas as VMs existentes no vcenter.
@all:
|--@ungrouped:
|--@ubuntu64Guest:
| |--VM-k8dn-duzv_42168141-84d3-4bd6-45c4-3b23bec5d81e
| |--VM-4spa-jh6g_42163c5e-7eca-7d91-c740-58b3a2d74b8e
| |--zabbix-sandbox_421695c6-a980-09af-d8ca-6a0dc712d9d1
| |--VM-2ztj-4ndb_42162ab4-0d78-00e8-fd86-624bcff76392
| |--dhcp-sandbox_42163f69-0b69-977c-80d8-0f9bf5437855
| |--VM-onsa-rlsp_42168bdc-0096-b4b2-623c-cf6896cea3e8
|--@poweredOn:
| |--VM-k8dn-duzv_42168141-84d3-4bd6-45c4-3b23bec5d81e
| |--VM-4spa-jh6g_42163c5e-7eca-7d91-c740-58b3a2d74b8e
| |--zabbix-sandbox_421695c6-a980-09af-d8ca-6a0dc712d9d1
| |--VM-2ztj-4ndb_42162ab4-0d78-00e8-fd86-624bcff76392
| |--dhcp-sandbox_42163f69-0b69-977c-80d8-0f9bf5437855
| |--VM-onsa-rlsp_42168bdc-0096-b4b2-623c-cf6896cea3e8
| |--radius_4216b4ae-8277-3fd7-9ad2-260a9e83d756
|--@windows9Server64Guest:
| |--radius_4216b4ae-8277-3fd7-9ad2-260a9e83d756
Algumas informações importantes dessa saída, que é a padrão do plugin:
- Os nomes dos ativos listados é uma composição do nome da VM no vcenter concatenado com o uuid da VM, separados por um _.
- As VMs são agrupadas pela família do sistema operacional e pelo estado da vm (Ligada ou desligada).
A inventário listado acima seria o equivalente ao seguinte arquivo .ini
[ungrouped]
[ubuntu64Guest]
VM-k8dn-duzv_42168141-84d3-4bd6-45c4-3b23bec5d81e
VM-4spa-jh6g_42163c5e-7eca-7d91-c740-58b3a2d74b8e
zabbix-sandbox_421695c6-a980-09af-d8ca-6a0dc712d9d1
VM-2ztj-4ndb_42162ab4-0d78-00e8-fd86-624bcff76392
dhcp-sandbox_42163f69-0b69-977c-80d8-0f9bf5437855
VM-onsa-rlsp_42168bdc-0096-b4b2-623c-cf6896cea3e8
[poweredOn]
VM-k8dn-duzv_42168141-84d3-4bd6-45c4-3b23bec5d81e
VM-4spa-jh6g_42163c5e-7eca-7d91-c740-58b3a2d74b8e
zabbix-sandbox_421695c6-a980-09af-d8ca-6a0dc712d9d1
VM-2ztj-4ndb_42162ab4-0d78-00e8-fd86-624bcff76392
dhcp-sandbox_42163f69-0b69-977c-80d8-0f9bf5437855
VM-onsa-rlsp_42168bdc-0096-b4b2-623c-cf6896cea3e8
radius_4216b4ae-8277-3fd7-9ad2-260a9e83d756
[windows9Server64Guest]
radius_4216b4ae-8277-3fd7-9ad2-260a9e83d756
E no campo target do playbook é possível usar poweredOn ou ubuntu64Guest, ou mesmo ubuntu64Guest:&poweredOn
---
- name: Update ubuntu servers
hosts: ubuntu64Guest
remote_user: root
tasks:
...
Conclusão
Esse post mostra apenas como fazer a configuração inicial de um inventário dinâmico baseado no vCenter. Nos próximos posts será visto coisas bem mais divertidas como uso de filtros, tags, customização de informações e assim por diante. Todos os assuntos direcionados para a construção de uma esteira de entrega de máquinas virtuais baseada em configuração declarativa!
Referências:
- https://docs.ansible.com/ansible/latest/collections/community/vmware/docsite/vmware_scenarios/vmware_inventory.html
- https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vm_inventory_inventory.html
- https://www.ansiblepilot.com/articles/how-to-install-ansible-in-ubuntu-22.04-ansible-install/