Por varias razones/limitaciones, no puedo crear nuevos grupos en el archivo de inventario y necesito usarlos --limit/-l
para 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
- 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
- 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
- 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-playbook
lo entendería.
Solucioné mi problema simplemente agregando -l
antes 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