Ansible: copier le modèle uniquement lorsque le fichier de destination n'existe pas


47

J'utilise Ansible 1.6.6pour approvisionner ma machine.

Il y a une tâche de modèle dans mon playbook qui crée un fichier de destination à partir d'un modèle Jinja2:

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

Je ne veux pas remplacer somefile.confs'il existe déjà. Est-ce possible avec Ansible? Si c'est le cas, comment?

Réponses:


61

Vous pouvez vérifier l'existence d'un fichier à l'aide de stat, puis utiliser le modèle uniquement si le fichier n'existe pas.

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

42

Vous pouvez simplement utiliser le paramètre force du module template:

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

Ou nommer la tâche ;-)

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

À partir de la documentation du module de modèle Ansible :

force: la valeur par défaut est yes, ce qui remplacera le fichier distant lorsque le contenu sera différent de celui de la source. Si non, le fichier ne sera transféré que si la destination n'existe pas.

D'autres réponses utilisent statparce que le paramètre force a été ajouté après leur écriture.


2
ma réponse utilise stat, car au moment de la question / réponse, il n'y avait pas d'argument de la force valable pour template
Teftin

10

Vous pouvez d’abord vérifier que le fichier de destination existe ou non, puis prendre une décision en fonction du résultat de son résultat.

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
Je préfère cette réponse car elle nomme ses tâches :)
Asfand Qazi

-3

Selon moi, la solution la plus simple consiste à utiliser l'attribut "force = no" du module de modèle.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.