O Ansible foi projetado para trabalhar com múltiplos sistemas (servidores baremetal, máquinas virtuais, Dispositivos de rede etc.) ao mesmo tempo. Ele trabalha selecionando partes desses sistemas listados num arquivo de inventário, que por padrão fica salvo em /etc/ansible/hosts
. É possível também especificar um arquivo diferente usando o parâmetro -i <path/nomeinventario>
na linha de comando (Ad-Hoc $ ansible
ou Playbook $ ansible-playbook
).
O arquivo padrão de inventário já vem com vários exemplos, conforme se vê abaixo:
Criaremos um inventário simplificado com vários hosts que apontam para localhost através da variável ansible_connection=local
. Com isso teremos mais de um host no inventário apontando para um único servidor, simulando vários sistemas.
Copie, cole e salve o conteúdo abaixo no arquivo /etc/ansible/hosts-test
web1.example.com
web2.example.com
db.example.com
[webservers]
web1.example.com
web2.example.com
[dbservers]
db.example.com
[datacenter:children]
webservers
dbservers
[datacenter:vars]
ansible_connection=local
$ ansible -i /etc/ansible/hosts-test -m ping all
web1.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
web2.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
db.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
$ ansible -i /etc/ansible/hosts-test -m ping webservers
web1.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
web2.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
$ ansible -i /etc/ansible/hosts-test -m ping dbservers
db.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
$ ansible -i /etc/ansible/hosts-test -m ping datacenter
db.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
web1.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
web2.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
Na seleção do host do inventário, é possível informar um padrão diferente de host/grupo. Padrões podem ser expressões regulares, caracteres coringas e outros. Exemplo: ansible *.example.* -m <nome_modulo> -a <argumentos>
. Para outros padrões, clique aqui (Inglês)