Capture la salida de la plantilla sobre la marcha

8

Necesito ejecutar un comando en el servidor de destino que acepte datos solo a través de stdin. Los datos que estoy suministrando 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 pasarla 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 hacer esto que no implica escribir un archivo temporal, alimentarlo al comando y luego borrarlo?

Giovanni Tirloni
fuente
Hice eso una vez como lo describió, con un archivo temporal. Solicitud de función creada para chicos ansibles
Selivanov Pavel

Respuestas:

6

Recibí respuesta de chicos ansibles:

some_var: "{{ lookup('template', 'tmpl.j2') }}"
Selivanov Pavel
fuente
1
¡Excelente! Si está usando "with_items" con su tarea, entonces puede usar la variable "item" en la plantilla.
Ikrom
2

La forma correcta de manejar los comandos que necesitan entrada stdines desde el módulo de espera .

La forma correcta de tratar datos sensibles con Ansible es la bóveda ansible . De una forma u otra, los datos se ubicarán sin cifrar en el sistema de archivos, ya que Ansible crea scripts de Python para ejecutar los comandos definidos en las tareas.

Henrik Pingel
fuente