Você provavelmente desejará saber onde o arquivo hosts está em ansible.cfg , por exemplo
[defaults]
inventory=inventory
assumindo que inventory é realmente seu arquivo de inventário.
Estou seguindo um tutorial Ansible que recebi do Packt, cheguei a essa parte em que criei 3 contêineres Ubuntu (lxc) e os coloquei em funcionamento. Eu também sou capaz de fazer login em cada um deles.
Eu baixei o Ansible fazendo: git clone ansible-git-url e, em seguida, obtive o código.
Minha configuração de trabalho é a seguinte:
/home/myuser/code aqui tenho 2 pastas: ansible (o repositório inteiro do git) e ansible_course onde eu tenho 2 arquivos: ansible.cfg e inventory .
inventory contém o seguinte:
[allservers]
192.168.122.117
192.168.122.146
192.168.122.14
[web]
192.168.122.146
192.168.122.14
[database]
192.168.122.117
E ansible.cfg contém:
[root@localhost ansible_course]# cat ansible.cfg
[defaults]
host_key_checking = False
Então, a partir desse caminho: /home/myuser/code/ansible_course , tento executar o seguinte:
$ ansible 192.168.122.117 -m ping -u root
O cara do tutorial faz exatamente isso, e ele obtém resposta de sucesso do ping , mas recebo as seguintes mensagens de erro:
[WARNING]: Unable to parse /etc/ansible/hosts 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'
[WARNING]: Could not match supplied host pattern, ignoring: 192.168.122.117
No tutorial, ele nunca diz que eu preciso fazer algo especial para dar uma inventory source, ele apenas diz que precisamos criar um arquivo inventory com os endereços IP dos containers Linux que nós ter.
Quero dizer, ele não diz que precisamos executar um comando para configurar isso.
Com ansible você pode depender do arquivo ansible.cfg para designar o nome do arquivo inventory ou você pode especificá-lo manualmente assim:
$ ansible -i inventory -m ping -u root 192.168.122.117
implicitamente contada através do ansible.cfg
$ ansible -m ping -u root 192.168.122.117
Para o método em que você diz explicitamente a ansible qual arquivo de inventário usar o uso mostra esta descrição:
Do ansible usage:
-i INVENTORY, --inventory=INVENTORY
specify inventory host path or comma separated host list.
Para o método implícito, você tem que ser um pouco mais versado em Ansible para perceber que funciona assim. Você pode usar o modo detalhado de ansible para ver mais do que está fazendo por padrão:
$ ansible -vvv -m ping -u root box-101
...
...
config file = /Users/user1/somedir/ansible.cfg
...
...
Using /Users/user1/somedir/ansible.cfg as config file
Parsed /Users/user1/somedir/inventory inventory source with ini plugin
META: ran handlers
Using module file /Users/user1/projects/git_repos/ansible/lib/ansible/modules/system/ping.py
...
...
box-101 | SUCCESS => {
"changed": false,
"invocation": {
"module_args": {
"data": "pong"
}
},
"ping": "pong"
}
...
...
Acima eu estou pingando box-101. Você pode ver essas linhas mostrando qual arquivo ansible.cfg está sendo usado:
config file = /Users/user1/somedir/ansible.cfg Using /Users/user1/ansible.cfg as config file
E através desse arquivo ansible.cfg , enfim, qual inventário:
Parsed /Users/user1/somedir/inventory inventory source with ini plugin
E são essas opções que estão direcionando ansible para o arquivo inventory :
$ cat ansible.cfg
...
[defaults]
inventory = inventory
...