Capturez la sortie du modèle à la volée

8

J'ai besoin d'exécuter une commande sur le serveur cible qui accepte les données via stdin uniquement. Les données que je fournis proviennent d'un fichier de modèle et contiennent des données sensibles, donc je préfère ne pas les avoir dans le système de fichiers, même pendant une seconde.

J'essaie de trouver un moyen de récupérer la sortie d'une tâche de modèle afin de pouvoir la transmettre à la commande. Quelque chose comme:

- name: generate data
  template:
    src: data.j2
    dest: [I'd rather not have any files written]
  register: myvar

- name: run command
  shell: "command < {{ myvar }}"

Est-ce une meilleure façon de procéder qui n'implique pas d'écrire un fichier temporaire, de le nourrir à la commande puis de l'effacer?

Giovanni Tirloni
la source
Je l'ai fait une fois comme vous l'avez décrit, avec un fichier temporaire. Création d'une demande de fonctionnalité pour les gars ansible: github.com/ansible/ansible/issues/22134
Selivanov Pavel

Réponses:

6

Vous avez la réponse de gars ansible:

some_var: "{{ lookup('template', 'tmpl.j2') }}"
Selivanov Pavel
la source
1
Génial! Si vous utilisez "with_items" avec votre tâche, vous pouvez utiliser la variable "item" dans le modèle.
Ikrom
2

Le bon moyen de gérer les commandes qui nécessitent une entrée stdinest le module expect .

La manière appropriée de traiter les données sensibles avec Ansible est le coffre-fort ansible . D'une manière ou d'une autre, les données resteront non chiffrées sur le système de fichiers car Ansible crée des scripts Python pour exécuter les commandes définies sous les tâches.

Henrik Pingel
la source