Eu criei um arquivo de inventário com extensão .yml como abaixo:
---
all:
server1
hosts:
server2
children:
hana:
prod:
client1:
hosts:
server3
client2:
hosts:
server4
test:
client1:
hosts:
server5
client1:
hosts:
server6
...
Em seguida, executei ping ad-hoc para todos os hosts com o comando abaixo:
ansible -m ping -i /etc/ansible/inventories/linuxall.yml all
E eu vi esses avisos e o ping não funcionou:
[WARNING]: Unable to parse /etc/ansible/inventories/linuxall.yml as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
Por que o ansible não pode analisar meu inventário? Devo fazer alguma coisa para isso?
No exemplo do link a seguir, todas as linhas, incluindo os nomes dos servidores, terminam com dois pontos:
https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
Encontrei o problema e a solução:
Há uma seção chamada [inventory] no arquivo ansible.cfg. Remova o caractere # no início da linha "ativar plugins de inventário...". Em seguida, os arquivos de inventário .yml e .yaml serão ativados.
Além disso, o caractere ":" também é necessário após cada linha, além de nomes de host.
Para mim, a correção foi: eu precisava especificar a localização de playbook.yml com a
-K
opção