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?
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
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.
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