Ansible: salin template hanya ketika file tujuan tidak ada

47

Saya menggunakan Ansible 1.6.6untuk menyediakan mesin saya.

Ada tugas template di buku pedoman saya yang membuat file tujuan dari template Jinja2:

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

Saya tidak ingin mengganti somefile.confjika sudah ada. Apakah mungkin dengan Ansible? Jika ya, bagaimana caranya?

Slava Fomin II
sumber

Jawaban:

61

Anda dapat memeriksa keberadaan file menggunakan stat, dan kemudian menggunakan template hanya jika file tidak ada.

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

Anda bisa menggunakan param force dari modul template:

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

Atau penamaan tugas ;-)

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

Dari dokumen modul template yang mungkin :

force: defaultnya adalah ya, yang akan menggantikan file jarak jauh ketika isinya berbeda dari sumbernya. Jika tidak, file hanya akan ditransfer jika tujuan tidak ada.

Jawaban lain digunakan statkarena parameter gaya ditambahkan setelah ditulis.

sanzante
sumber
2
jawaban saya menggunakan stat, karena pada saat pertanyaan / jawaban tidak ada argumen yang tersedia untuk template
Teftin
10

Pertama-tama Anda dapat memeriksa apakah file tujuan ada atau tidak dan kemudian mengambil keputusan berdasarkan output dari hasilnya.

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
sumber
1
Saya lebih suka jawaban ini karena ini menamai tugas itu :)
Asfand Qazi
-3

Menurut saya, solusi termudah adalah dengan menggunakan atribut "force = no" dari modul template

Thibault Richard
sumber