Supongamos que necesitamos recuperar un parámetro por entrada estándar de manera interactiva en un playbook de Ansible. Es posible hacerlo utilizando la sección vars_prompt
. Este artículo demuestra un ejemplo de uso.
Un buen ejemplo sería el siguiente. Cierta tarea requiere ingresar una contraseña (ya que el servicio en cuestión no está configurado para soportar autenticación con clave pública). Sin embargo no deseamos pasar la contraseña como parámetro (ya sea en el propio comando o como parámetro del playbook) para que no quede hardcodeada en el código YML del playbook o en el historial de comandos del host.
Lo mejor, entonces, sería obtener la contraseña de forma interactiva, directamente desde teclado. Esto permite obtener información sensible que no se desee divulgar.
Ansible permite recuperar variables de forma interactiva mediante la sección vars_prompt
. Simplemente hay que definir el nombre de la variable donde se almacenará el valor recuperado desde teclado, y una frase o texto descriptivo. Veamos un ejemplo:
--- - hosts: all vars_prompt: - name: pass prompt: "Ingrese la contraseña"
Luego es posible utilizar la variable pass
al igual que cualquier otra en alguna de las tareas del playbook. Por ejemplo:
- hosts: db.linuxito.com become: yes tasks: - name: Crear un dump de la base mibase - shell: mysqldump -R -ubkpusr -p{{ mypass }} mibase > /tmp/mibase.sql
Otro ejemplo ejecutando un playbook de prueba:
--- - hosts: www.linuxito.com vars_prompt: - name: pass prompt: "Ingrese la clave" tasks: - debug: msg: "La clave ingresada es: {{ pass }}"
Al ejecutar con ansible-playbook
, el resultado es el siguiente:
ansible@ansible:~$ ansible-playbook test.yml Ingrese la clave: PLAY [www.linuxito.com] ************************************************ TASK [Gathering Facts] ************************************************* ok: [www.linuxito.com] TASK [debug] *********************************************************** ok: [www.linuxito.com] => { "msg": "La clave ingresada es: 1234" } PLAY RECAP ************************************************************* www.linuxito.com : ok=2 changed=0 unreachable=0 failed=0
El texto definido en el parámetro prompt
es el que se muestra durante la ejecución del playbook. Por otro lado, notar que no se hace echo de los caracteres ingresados. Este es el comportamiento por defecto. Si no se desea que sean ocultados (es decir, que se haga echo de los caracteres tipeados) especificar el parámetro private: no
.
Referencias