Por vários motivos/limitações não consigo criar novos grupos no arquivo de inventário e preciso usar --limit/-l
para especificar os hosts.
Disseram-me para fazer algo como:
ansible-playbook -i /path/to/my/inventory/file.ini -l server.1.com server.2.com my-playbook.yml --check --diff
Isso estava gerando um erro:
ERROR! the playbook: server.2.com could not be found
DeDocumentação Ansiblesobre este assunto descobri que você poderia usar um arquivo separado para listar todos os hosts que deseja limitar. Algo como:
ansible-playbook -i /path/to/my/inventory/file.ini -l @list-to-limit.txt my-playbook.yml
No entanto, preciso fazer tudo inline sem criar um arquivo adicional.
Responder1
O mesmoPadrões comunsaplique à opção de linha de comando -l
. Citando a nota:
"Você pode usar uma vírgula (,) ou dois pontos (:) para separar uma lista de hosts. A vírgula é preferida ao lidar com intervalos e endereços IPv6."
Por exemplo, dado o inventário
shell> cat hosts
[webservers]
test_01
test_02
[dbservers]
test_03
test_04
e o manual
shell> cat pb.yml
- hosts: all
tasks:
- debug:
var: inventory_hostname
Os vários padrões de host funcionam conforme o esperado. Por exemplo
- Todos os hosts em servidores web mais todos os hosts em servidores db
shell> ansible-playbook -i hosts pb.yml -l webservers:dbservers
...
ok: [test_01] =>
inventory_hostname: test_01
ok: [test_02] =>
inventory_hostname: test_02
ok: [test_03] =>
inventory_hostname: test_03
ok: [test_04] =>
inventory_hostname: test_04
- Os hosts test_02 e test_04
shell> ansible-playbook -i hosts pb.yml -l test_02,test_04
ok: [test_02] =>
inventory_hostname: test_02
ok: [test_04] =>
inventory_hostname: test_04
- Todos os hosts em servidores web, exceto o host test_02
shell> ansible-playbook -i hosts pb.yml -l webservers:\!test_02
inventory_hostname: test_01
Responder2
Aqui está como fazer isso:
ansible-playbook ./your_playbook --limit "host1,host2,host3,host4"
Responder3
Eu estava me distanciando e na época pensei que poderia simplesmente listar todos os hosts inline e ansible-playbook
entenderia.
Resolvi meu problema simplesmente adicionando -l
antes de cada nome de host no comando.
(Sei que isso pode não ser uma 'melhor prática')
Meu comando final foi algo como:
ansible-playbook -i /path/to/my/inventory/file.ini -l server.1.com -l server.2.com my-playbook.yml --check --diff