58 votes

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

J'utilise Ansible 1.6.6 pour provisionner ma machine.

Il existe un tâche du 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 oui, comment ?

71voto

mant Points 21

Vous pouvez simplement utiliser la fonction force du module du 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

Desde el Module de template Ansible docs :

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

Les autres réponses utilisent stat parce que le force a été ajouté après leur rédaction.

69voto

Teftin Points 1911

Vous pouvez vérifier l'existence d'un fichier à l'aide de stat, puis n'utiliser le modèle que 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

11voto

arbabnazar Points 459

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

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

-1voto

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X