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?

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

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.


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   

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.