Frage Ansible: Vorlage nur kopieren, wenn die Zieldatei nicht existiert


Ich benutze Ansible 1.6.6 um meine Maschine zu versorgen.

Da ist ein Vorlagenaufgabe in meinem Playbook, das Zieldatei von Jinja2 Vorlage erstellt:

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

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


44
2017-07-05 11:10


Ursprung




Antworten:


Sie können mit stat auf Dateiexistenz prüfen und dann Vorlage nur verwenden, wenn die Datei nicht existiert.

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

54
2017-07-05 11:54



Oh toll. Danke vielmals! ) - Slava Fomin II


Sie können einfach die verwenden Macht Parameter des Vorlagenmoduls:

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

Von dem Ansible Vorlagenmodul Dokumente:

force: Der Standardwert ist yes, der die Remote-Datei ersetzt, wenn   Inhalte sind anders als die Quelle. Wenn nicht, wird die Datei nur sein   übertragen, wenn das Ziel nicht existiert.

Andere Antworten verwenden stat weil der Macht Parameter wurde hinzugefügt, nachdem sie geschrieben wurden.


27
2017-11-26 17:00



Meine Antwort verwendet stat, weil zum Zeitpunkt der Frage / Antwort kein Force-Argument für die Vorlage verfügbar war - Teftin


Sie können zuerst prüfen, ob die Zieldatei existiert oder nicht, und dann eine Entscheidung treffen, die auf der Ausgabe des Ergebnisses basiert.

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
2018-01-16 11:17



Ich bevorzuge diese Antwort, weil sie ihre Aufgaben nennt :) - Asfand Qazi


Die einfachste Lösung ist meiner Meinung nach, das Attribut "force = no" aus dem Template-Modul zu verwenden


-2
2017-09-10 12:09