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
...