Ansible: sadece hedef dosya bulunmadığında şablonu kopyala


47

Ansible 1.6.6Makinemi hazırlamak için kullanıyorum .

Çalma kitabımda, Jinja2 şablonundan hedef dosya oluşturan bir şablon görevi var :

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

somefile.confZaten varsa , değiştirmek istemiyorum . Ansible ile mümkün mü? Öyleyse nasıl?

Yanıtlar:


61

Stat kullanarak dosya varlığını kontrol edebilir ve sonra sadece dosya yoksa şablonu kullanabilirsiniz.

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

42

Sadece şablon modülünün kuvvet paramını kullanabilirsiniz :

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

Veya görevi adlandırmak ;-)

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

Gönderen yanıtlayıcı 'şablon modülü docs:

zorla: varsayılan, evet; bu, içerikler kaynaktan farklı olduğunda uzak dosyanın yerini alacak. Hayır ise, dosya yalnızca hedef mevcut değilse aktarılacaktır.

Diğer cevaplar stat, zorlama parametresi yazıldıktan sonra eklendiği için kullanılır.


2
Cevabım stat kullanıyor, çünkü soru / cevap sırasında şablon için uygun bir güç argümanı yoktu
Teftin

10

İlk önce hedef dosyanın var olup olmadığını kontrol edebilir ve daha sonra sonucunun çıktısına dayanarak bir karar verebilirsiniz.

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
Bu cevabı tercih ediyorum çünkü görevlerine
isimleniyor

-3

Bana göre, en kolay çözüm, şablon modülünden "force = no" özniteliğini kullanmaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.