Odpowiedź: skopiuj szablon tylko wtedy, gdy plik docelowy nie istnieje

47

Używam Ansible 1.6.6do obsługi mojego komputera.

W moim poradniku jest zadanie szablonu, które tworzy plik docelowy z szablonu Jinja2:

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

Nie chcę zastępować, somefile.confjeśli już istnieje. Czy jest to możliwe dzięki Ansible? Jeśli tak to jak?

Slava Fomin II
źródło

Odpowiedzi:

61

Możesz sprawdzić istnienie pliku za pomocą stat, a następnie użyć szablonu tylko wtedy, gdy plik nie istnieje.

tasks:
  - stat: path=/etc/somefile.conf
    register: st
  - template: src=somefile.j2 dest=/etc/somefile.conf
    when: not st.stat.exists
Teftin
źródło
42

Możesz po prostu użyć parametru siły modułu modułu:

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

Lub nazwij zadanie ;-)

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

Z dokumentacji modułu szablonu Ansible :

force: wartością domyślną jest yes, która zastąpi plik zdalny, gdy zawartość jest inna niż źródło. Jeśli nie, plik zostanie przesłany tylko wtedy, gdy miejsce docelowe nie istnieje.

Inne odpowiedzi używają, statponieważ parametr siły został dodany po ich napisaniu.

sanzante
źródło
2
moja odpowiedź używa statystyki, ponieważ w momencie pytania / odpowiedzi nie było żadnej argumentu siły dostępnego dla szablonu
Teftin
10

Możesz najpierw sprawdzić, czy plik docelowy istnieje, czy nie, a następnie podjąć decyzję w oparciu o wynik jego wyniku.

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
źródło
1
Wolę tę odpowiedź, ponieważ określa jej zadania :)
Asfand Qazi
-3

Według mnie najłatwiejszym rozwiązaniem jest użycie atrybutu „force = no” z modułu szablonu

Thibault Richard
źródło