yaml - playbook - Pase la matriz en--extra-vars-Ansible
ansible inventory (2)
¿Cómo puedo pasar la matriz de --extra-vars
a --extra-vars
en el libro de jugadas de Ansible? La documentación de Ansible no declara su sintaxis ni puedo encontrarla en ningún recurso de Internet.
Quiero decir, si tengo un libro de jugadas:
---
- hosts: {{hostName}}
- remote_user: admin
...
Entonces debería llamar a mi libro de jugadas como
ansible-playbook DeployWar.yml --extra-vars="hostName=tomcat-webApp"
Pero quiero ejecutar este libro de jugadas en dos servidores, dicen tomcat-webApp
y tomcat-all
, y quiero controlarlo desde fuera, es decir, usando --extra-vars
. Lo que he tratado de hacer es:
ansible-playbook DeployWar.yml --extra-vars="hostName=[tomcat-webApp, tomcat-all]"
ansible-playbook DeployWar.yml --extra-vars="hostName={tomcat-webApp, tomcat-all}"
ansible-playbook DeployWar.yml --extra-vars="[{hostName: tomcat-webApp}, {hostName: tomcat-all}]"
Pero en todos los casos el libro de jugadas falla al declarar un error de sintaxis en mi llamada. Cualquier ayuda apreciada.
A partir de Ansible 1.3, los vars extra se pueden formatear como YAML, ya sea en la línea de comandos o en un archivo. Consulte la documentación de Ansible titulada Pasar variables en la línea de comando .
desde el enlace: --extra-vars "@ some_file.json"
Para responder a su primera pregunta "¿Cómo puedo pasar yaml array a --extra-vars en el libro de jugadas de Ansible"? puedes pasar una cadena json formateada a extra-vars .
Aquí hay un juego de ejemplo:
- hosts: all
gather_facts: no
tasks:
- debug: var=test_list
Y cómo pasar test_list a ansible-playbook:
ansible-playbook -c local -i localhost, test.yml --extra-vars=''{"test_list": [1,2,3]}''
Aunque puede usar una variable para hosts, recomiendo consultar el mecanismo de Ansible para la administración del host, que es el inventory junto con la opción --limit
.