He estado tratando de ejecutar anisble-libros de jugadas utilizando Java (tiempo de ejecución (). Exec () y ProcessBuilder), y en ambos casos veo que las variables adicionales que desean pasar usando la línea de comandos nunca llegan ejecutado o eso parece.
ProcessBuilder builder = new ProcessBuilder("ansible-playbook", "/root/playbooks/script-ilo.yml", "-e", "'@/tmp/vars.yml'");
y
String[] ansible_run = {"ansible-playbook", "/root/playbooks/script-ilo.yml", "-e", "'@/tmp/vars.yml'"};
Process p = Runtime.getRuntime().exec(ansible_run,null);
Metí el código como un frasco y se ejecutan en el sistema de prueba y en ambos casos, pistas ansibles el libro de jugadas y genera un error.
# java -jar /home/admin/test-script.jar
PLAY [esxi] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [192.168.50.100]
TASK [Set XML with new secrets] ************************************************
fatal: [192.168.50.100]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'change_user' is undefined\n\nThe error appears to have been in '/root/playbooks/script-ilo.yml': line 3, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n tasks:\n - name: Set XML with new secrets\n ^ here\n"}
to retry, use: --limit @/root/playbooks/script-ilo.retry
PLAY RECAP *********************************************************************
192.168.50.100 : ok=1 changed=0 unreachable=0 failed=1
Cuando ejecuto el comando ansible-playbook /root/playbooks/script-ilo.yml -e '@/tmp/vars.yml'
en la cáscara, que funcione perfecta.
Necesito ayuda con conseguir desbloqueado aquí. Si hay una forma mejor de hacer esto, soy todo oídos.
String[] ansible_run = {"ansible-playbook", "/root/playbooks/script-ilo.yml", "-e", "'@/tmp/vars.yml'"};
No ponga comillas simples en ese -e
valor; las comillas simples sólo son necesarios para el shell, pero ProcessBuilder
no pasa por su cáscara, por lo que los argumentos no necesitan ser escapado.
En realidad estaba esperando ansible a quejarse cuando me daba de comer una falsa descaradamente -e
, pero resulta que tal valor se pasa a la hostvars
que _raw_params
, por lo que en su caso, hubiera establecido un valor como:
"hostvars": {
"192.168.50.100": {
"_raw_params": "'@/tmp/vars.yml'",