ansible-playbook --limit mais de um host?

ansible-playbook --limit mais de um host?

Por vários motivos/limitações não consigo criar novos grupos no arquivo de inventário e preciso usar --limit/-lpara 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

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

Resolvi meu problema simplesmente adicionando -lantes 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

informação relacionada