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

Cenário usado

Para validar essa postagem eu usei o seguinte ambiente:

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:

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: