Je dois vérifier si un fichier existe au format /etc/
. Si le fichier existe, je dois sauter la tâche. Voici le code que j'utilise:
- name: checking the file exists
command: touch file.txt
when: $(! -s /etc/file.txt)
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/file.txt
register: stat_result
- name: Create the file, if it doesnt exist already
file:
path: /etc/file.txt
state: touch
when: not stat_result.stat.exists
stat_result
aura la valeurstat_result.state.exists
False (et c'est à ce moment-là que la deuxième tâche s'exécute). Vous pouvez voir les détails du module de statistiques ici: docs.ansible.com/ansible/stat_module.htmlwhen: stat_result.stat.exists == False
àwhen: not stat_result.stat.exists
si vous le souhaitez pour une lecture plus naturelle.Le module stat fera cela et obtiendra de nombreuses autres informations sur les fichiers. À partir de l'exemple de documentation:
la source
Cela peut être réalisé avec le module stat pour sauter la tâche lorsque le fichier existe.
la source
En général, vous feriez cela avec le module stat . Mais le module de commande a l'
creates
option qui rend cela très simple:Je suppose que votre commande tactile n'est qu'un exemple? La meilleure pratique serait de ne rien vérifier du tout et de laisser ansible faire son travail - avec le bon module. Donc, si vous voulez vous assurer que le fichier existe, vous utiliserez le module de fichiers:
la source
state: file
ne crée pas de fichiers. Voir docs.ansible.com/ansible/file_module.htmlla source
when: mypath is not exists
signifie dans ce cas? N'est-ce pasmypath
une simple chaîne?Je trouve que faire beaucoup de ces
.stat.exists
vérifications de type peut être ennuyeux et sujet aux erreurs . Par exemple, ils nécessitent une attention particulière pour faire fonctionner le mode de vérification (--check
).De nombreuses réponses suggèrent ici
Cependant, il s'agit parfois d'une odeur de code, alors cherchez toujours de meilleures façons d'utiliser Ansible, en particulier, il y a de nombreux avantages à utiliser le bon module. par exemple
ou
Mais quand ce n'est pas possible, utilisez un module, cherchez également si vous pouvez vous inscrire et vérifier le résultat d'une tâche précédente. par exemple
Notez le
when:
mais aussi lecreates:
donc--check
ne fait pas d'erreurJe mentionne cela parce que souvent ces pratiques moins qu'idéales viennent par paires, c'est-à-dire pas de package apt / yum, nous devons donc 1) télécharger et 2) décompresser
J'espère que cela t'aides
la source
Découvert que l'appel
stat
est lent et recueille beaucoup d'informations qui ne sont pas nécessaires pour la vérification de l'existence des fichiers.Après avoir passé du temps à chercher une solution, j'ai découvert la solution suivante, qui fonctionne beaucoup plus rapidement:
la source
Vous pouvez utiliser le module Ansible stat pour enregistrer le fichier et le module When pour appliquer la condition.
la source
**
Comment vérifier si un fichier existe dans Ansible en utilisant la condition When
**
Vous trouverez ci-dessous la lecture ansible que j'ai utilisée pour supprimer le fichier lorsque le fichier existe à la fin du système d'exploitation.
J'ai utilisé la condition de jeu comme ci-dessous
vous pouvez donner vrai / faux en fonction de vos besoins
la source
Si vous voulez simplement vous assurer qu'un certain fichier existe (par exemple, car il devrait être créé d'une manière différente de celle via ansible) et échouer si ce n'est pas le cas, vous pouvez le faire:
la source
Une note sur les chemins relatifs pour compléter les autres réponses.
Lorsque j'utilise une infrastructure en tant que code, j'utilise généralement des rôles et des tâches qui acceptent des chemins relatifs, en particulier pour les fichiers définis dans ces rôles.
Des variables spéciales comme playbook_dir et role_path sont très utiles pour créer les chemins absolus nécessaires pour tester l'existence.
la source