it-swarm.com.de

Ansible: Vorlage nur kopieren, wenn die Zieldatei nicht vorhanden ist

Ich verwende Ansible 1.6.6, Um meinen Computer 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 somefile.conf Nicht ersetzen, wenn es bereits existiert. Ist das mit Ansible möglich? Wenn das so ist, wie?

48
Slava Fomin II

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

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

Sie können einfach den Parameter force des Vorlagenmoduls 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

Aus dem Ansible Template Modul docs:

force: Der Standardwert ist yes. Ersetzt die Remote-Datei, wenn sich der Inhalt von der Quelle unterscheidet. Wenn nein, wird die Datei nur übertragen, wenn das Ziel nicht vorhanden ist.

Andere Antworten verwenden stat, da der Parameter force nach dem Schreiben hinzugefügt wurde.

45
sanzante

Sie können zuerst überprüfen, ob die Zieldatei vorhanden ist oder nicht, und dann basierend auf der Ausgabe des Ergebnisses eine Entscheidung 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   
10
arbabnazar