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?

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

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.


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   

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.