Erfassen Sie die Vorlagenausgabe im laufenden Betrieb

8

Ich muss einen Befehl auf dem Zielserver ausführen, der Daten nur über stdin akzeptiert. Die Daten, die ich füttere, stammen aus einer Vorlagendatei und enthalten vertrauliche Daten. Daher möchte ich sie nicht einmal für eine Sekunde im Dateisystem haben.

Ich versuche einen Weg zu finden, um die Ausgabe einer Vorlagenaufgabe abzurufen, damit ich sie an den Befehl übergeben kann. Etwas wie:

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

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

Ist dies ein besserer Weg, bei dem keine temporäre Datei geschrieben, dem Befehl zugeführt und dann gelöscht wird?

Giovanni Tirloni
quelle
Haben Sie das einmal wie beschrieben mit temporärer Datei gemacht. Erstellt Feature-Anfrage für Ansible Jungs: github.com/ansible/ansible/issues/22134
Selivanov Pavel

Antworten:

6

Antwort von ansible Jungs bekommen:

some_var: "{{ lookup('template', 'tmpl.j2') }}"
Selivanov Pavel
quelle
1
Großartig! Wenn Sie für Ihre Aufgabe "with_items" verwenden, können Sie die Variable "item" in der Vorlage verwenden.
Ikrom
2

Die richtige Art, Befehle zu verarbeiten, von denen Eingaben benötigt werden, stdinist das Expect- Modul.

Der richtige Umgang mit vertraulichen Daten mit Ansible ist ansible vault . Auf die eine oder andere Weise bleiben die Daten unverschlüsselt im Dateisystem, während Ansible Python-Skripte erstellt, um die unter Aufgaben definierten Befehle auszuführen.

Henrik Pingel
quelle