Ansible: Kopiere die Vorlage nur, wenn die Zieldatei nicht existiert

47

Ich verwende, Ansible 1.6.6um meine Maschine bereitzustellen.

In meinem Playbook befindet sich eine Vorlagenaufgabe , die eine Zieldatei aus der Jinja2-Vorlage erstellt:

tasks:
    - template: src=somefile.j2 dest=/etc/somefile.conf

Ich möchte nicht ersetzen, somefile.confwenn es bereits existiert. Ist das mit Ansible möglich? Wenn das so ist, wie?

Slava Fomin II
quelle

Antworten:

61

Sie können das Vorhandensein von Dateien mit stat überprüfen und dann die Vorlage nur verwenden, wenn die Datei nicht vorhanden ist.

tasks:
  - stat: path=/etc/somefile.conf
    register: st
  - template: src=somefile.j2 dest=/etc/somefile.conf
    when: not st.stat.exists
Teftin
quelle
42

Sie können einfach den Force- Parameter des Template-Moduls verwenden:

tasks:
    - template: src=somefile.j2 dest=/etc/somefile.conf force=no

Oder die Aufgabe benennen ;-)

tasks:
    - name: Create file from template if it doesn't exist already.
      template: 
        src: somefile.j2
        dest:/etc/somefile.conf
        force: no

In den Ansible-Vorlagenmodul- Dokumenten:

force: der Standardwert ist yes, wodurch die entfernte Datei ersetzt wird, wenn sich der Inhalt von der Quelle unterscheidet. Wenn nein, wird die Datei nur übertragen, wenn das Ziel nicht existiert.

Andere Antworten werden verwendet, statweil der Force- Parameter nach dem Schreiben hinzugefügt wurde.

sanzante
quelle
2
Meine Antwort verwendet stat, da zum Zeitpunkt der Frage / Antwort kein erzwungenes Argument für die Vorlage
verfügbar war
10

Sie können zunächst prüfen, ob die Zieldatei vorhanden ist oder nicht, und dann eine Entscheidung anhand der Ausgabe des Ergebnisses treffen.

tasks:
  - name: Check that the somefile.conf exists
    stat:
      path: /etc/somefile.conf
    register: stat_result

  - name: Copy the template, if it doesnt exist already
    template:
      src: somefile.j2
      dest: /etc/somefile.conf
    when: stat_result.stat.exists == False   
Arbabnazar
quelle
1
Ich bevorzuge diese Antwort, weil sie die Aufgaben nennt :)
Asfand Qazi
-3

Nach meiner Meinung ist die einfachste Lösung, das Attribut "force = no" aus dem Vorlagenmodul zu verwenden

Thibault Richard
quelle