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?

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

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.


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   

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.