Ansible: Como analisar uma origem de inventário

1

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.

    
por grimmjow_sms 26.07.2018 / 00:11

2 respostas

3

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.

    
por 26.07.2018 / 00:18
2

Antecedentes

Com ansible você pode depender do arquivo ansible.cfg para designar o nome do arquivo inventory ou você pode especificá-lo manualmente assim:

explicitamente dito
$ 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

Explícito

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.

Implícito

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
...
    
por 26.07.2018 / 05:03

Tags