web-dev-qa-db-fra.com

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

J'utilise Ansible 1.6.6 pour approvisionner ma machine.

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

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

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

48
Slava Fomin II

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
62
Teftin

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

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

Depuis le module de modèle Ansible docs:

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

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

45
sanzante

Vous pouvez d'abord vérifier que le fichier de destination existe ou non, puis prendre une décision en fonction de la sortie 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   
10
arbabnazar