Ansible: copia il modello solo quando il file di destinazione non esiste


47

Sto usando Ansible 1.6.6per eseguire il provisioning della mia macchina.

Nel mio playbook è presente un'attività modello che crea il file di destinazione dal modello Jinja2:

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

Non voglio sostituirlo somefile.confse esiste già. È possibile con Ansible? Se é cosi, come?

Risposte:


61

È possibile verificare l'esistenza del file utilizzando stat, quindi utilizzare il modello solo se il file non esiste.

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

42

Puoi semplicemente usare il parametro force del modulo template:

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

O nominando l'attività ;-)

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

Dai documenti del modulo modello Ansible :

force: il valore predefinito è yes, che sostituirà il file remoto quando i contenuti sono diversi dalla sorgente. In caso contrario, il file verrà trasferito solo se la destinazione non esiste.

Altre risposte usano statperché il parametro force è stato aggiunto dopo essere stato scritto.


2
la mia risposta usa stat, perché al momento della domanda / risposta non c'era argomento di forza disponibile per template
Teftin

10

Puoi prima verificare che il file di destinazione esista o meno e quindi prendere una decisione in base all'output del suo risultato.

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
Preferisco questa risposta perché nomina i suoi compiti :)
Asfand Qazi il

-3

Secondo me, la soluzione più semplice è usare l'attributo "force = no" dal modulo template

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.