
Necesito ejecutar un comando en el servidor de destino que acepte datos solo a través de la entrada estándar. Los datos que le estoy proporcionando provienen de un archivo de plantilla y contienen datos confidenciales, por lo que prefiero no tenerlos en el sistema de archivos ni siquiera por un segundo.
Estoy tratando de encontrar una manera de obtener el resultado de una tarea de plantilla para poder pasarlo al comando. Algo como:
- name: generate data
template:
src: data.j2
dest: [I'd rather not have any files written]
register: myvar
- name: run command
shell: "command < {{ myvar }}"
¿Es una mejor manera de hacerlo que no implique escribir un archivo temporal, enviarlo al comando y luego borrarlo?
Respuesta1
Obtuve respuesta de chicos ansibles:
some_var: "{{ lookup('template', 'tmpl.j2') }}"
Respuesta2
La forma adecuada de manejar los comandos que necesitan información stdin
es laesperarmódulo.
La forma adecuada de tratar datos confidenciales con Ansible esbóveda ansible. De una forma u otra, los datos permanecerán sin cifrar en el sistema de archivos, ya que Ansible crea scripts de Python para ejecutar los comandos definidos en las tareas.
Respuesta3
Combinando un par de respuestas anteriores aquí, obtenemos:
- name: run command
command: "command"
args:
stdin: "{{ lookup('template', 'tmpl.j2') }}"