ansible-playbook: ¿limitar más de un host?

ansible-playbook: ¿limitar más de un host?

Por varias razones/limitaciones, no puedo crear nuevos grupos en el archivo de inventario y necesito usarlos --limit/-lpara especificar los hosts.

Me dijeron que hiciera algo como:

ansible-playbook -i /path/to/my/inventory/file.ini -l server.1.com server.2.com my-playbook.yml --check --diff

Esto arrojaba un error:

ERROR! the playbook: server.2.com could not be found

Desde elDocumentación ansibleSobre este tema descubrí que puedes usar un archivo separado para enumerar todos los hosts que deseas limitar. Algo como:

ansible-playbook -i /path/to/my/inventory/file.ini -l @list-to-limit.txt my-playbook.yml

Sin embargo, necesito hacerlo todo en línea sin crear un archivo adicional.

Respuesta1

Lo mismoPatrones comunesaplicar a la opción de línea de comando -l. Citando la nota:

"Puede utilizar una coma (,) o dos puntos (:) para separar una lista de hosts. Se prefiere la coma cuando se trata de rangos y direcciones IPv6".

Por ejemplo, dado el inventario

shell> cat hosts
[webservers]
test_01
test_02

[dbservers]
test_03
test_04

y el libro de jugadas

shell> cat pb.yml 
- hosts: all
  tasks:
    - debug:
        var: inventory_hostname

Los distintos patrones del host funcionan como se esperaba. Por ejemplo

  1. Todos los hosts en servidores web más todos los hosts en dbservers
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. Los hosts test_02 y 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 los hosts en servidores web excepto el host test_02
shell> ansible-playbook -i hosts pb.yml  -l webservers:\!test_02

  inventory_hostname: test_01

Respuesta2

Aquí se explica cómo hacerlo:

ansible-playbook ./your_playbook --limit "host1,host2,host3,host4"

Respuesta3

Estaba distraído y en ese momento pensé totalmente que podría enumerar todos los hosts en línea y ansible-playbooklo entendería.

Solucioné mi problema simplemente agregando -lantes de cada nombre de host en el comando.

(Me doy cuenta de que esto podría no ser una "mejor práctica")

Mi comando final se parecía a algo así:

ansible-playbook -i /path/to/my/inventory/file.ini -l server.1.com -l server.2.com my-playbook.yml --check --diff

información relacionada