Le code ci-dessous supprime uniquement le premier fichier qu'il obtient dans le répertoire Web. Je souhaite supprimer tous les fichiers et dossiers du répertoire Web et conserver le répertoire Web. Comment puis je faire ça?
- name: remove web dir contents
file: path='/home/mydata/web/{{ item }}' state=absent
with_fileglob:
- /home/mydata/web/*
Remarque: j'ai essayé d' rm -rf
utiliser la commande et le shell, mais ils ne fonctionnent pas. Peut-être que je les utilise à tort.
Toute aide dans la bonne direction sera appréciée.
J'utilise ansible 2.1.0.0
Réponses:
Le code ci-dessous supprimera tout le contenu de
artifact_path
Remarque : cela supprimera également le répertoire.
la source
rm -rf /
moments de l'histoirewhen: artifact_path is defined and artifact_path != ""
Utilisation du module shell ( idempotent aussi):
Solution la plus propre si vous ne vous souciez pas de la date de création et du propriétaire / des autorisations:
la source
shell
contrecommand
et cela fonctionneSupprimez le répertoire (essentiellement une copie de https://stackoverflow.com/a/38201611/1695680 ), Ansible fait cette opération avec
rmtree
sous le capot.Si vous n'avez pas le luxe de supprimer tout le répertoire et de le recréer, vous pouvez le rechercher à la recherche de fichiers (et de répertoires) et de les supprimer un par un. Ce qui prendra du temps. Vous voulez probablement vous assurer que
[ssh_connection]\npipelining = True
votre fichier ansible.cfg est activé.la source
state=empty
Je n'ai vraiment pas aimé la solution rm, et ansible vous donne également des avertissements sur l'utilisation de rm. Voici donc comment le faire sans avoir besoin de rm et sans avertissements anonymes.
source: http://www.mydailytutorials.com/ansible-delete-multiple-files-directories-ansible/
la source
essayez la commande ci-dessous, cela devrait fonctionner
la source
with_items: "{{ contents.stdout_lines }}"
ls
la sortie pour obtenir les noms de fichiers car elle n'imprime pas correctement les noms de fichiers avec des caractères spéciaux tels que les retours à la ligne.Création d'une implémentation globale remaniée et sûre à partir de tous les commentaires et suggestions:
la source
register
pourplugin_dir_deleted
, non?owner: dir_to_delete.stat.pw_name, group: dir_to_delete.stat.gr_name mode: dir_to_delete.stat.mode
mais cela échoue avec ma version actuelle d'Ansible :(En utilisant le fichier glob, cela fonctionnera également. Il y a une erreur de syntaxe dans le code que vous avez publié. J'ai modifié et testé cela devrait fonctionner.
la source
with_fileglob
fonctionne uniquement sur une machine locale, pas distante; n'est-ce pas vrai?Alors qu'Ansible débat toujours de la mise en œuvre de
state = empty
https://github.com/ansible/ansible-modules-core/issues/902Notez cependant qu'avec la synchronisation, vous devriez quand même pouvoir synchroniser correctement vos fichiers (avec suppression).
la source
C'est ce que je propose:
Tout d'abord, nous obtenons la liste des répertoires avec
find
, paramètrefile_type
àany
, afin que nous ne manquions pas de répertoires et de liens imbriquéshidden
àyes
, pour ne pas sauter les fichiers cachésrecurse
suryes
, car ce n'est pas seulement inutile, mais peut augmenter le temps d'exécution.Ensuite, nous parcourons cette liste avec le
file
module. Sa sortie est un peu verbeuse, celaloop_control.label
nous aidera donc à limiter la sortie (vous trouverez ce conseil ici ).Mais j'ai trouvé que la solution précédente était quelque peu lente, car elle itère à travers le contenu, alors je suis allé avec:
stat
Cela me suffisait, mais vous pouvez également ajouter
attributes
, si vous le souhaitez.la source
Il y a une question ouverte à ce sujet.
Pour l'instant, la solution fonctionne pour moi: créer un dossier vide localement et le synchroniser avec le dossier distant.
Voici un exemple de playbook:
la source
J'ai écrit un module ansible personnalisé pour nettoyer les fichiers en fonction de plusieurs filtres tels que l'âge, l'horodatage, les modèles globaux, etc.
Il est également compatible avec les anciennes versions. Il peut être trouvé ici .
Voici un exemple:
la source
Je veux m'assurer que la commande find ne supprime que tout ce qui se trouve dans le répertoire et laisse le répertoire intact car dans mon cas, le répertoire est un système de fichiers. Le système générera une erreur en essayant de supprimer un système de fichiers mais ce n'est pas une bonne option. J'utilise l'option shell car c'est la seule option fonctionnelle que j'ai trouvée jusqu'à présent pour cette question.
Ce que j'ai fait:
Modifiez le fichier hosts pour y insérer des variables:
Et créez un playbook:
Cela supprimera tous les fichiers et répertoires dans le répertoire / système de fichiers de la variable COGNOS_HOME. L'option "-mindepth 1" garantit que le répertoire courant ne sera pas touché.
la source
Juste un petit modèle de copier-coller plus propre de la réponse de ThorSummoners, si vous utilisez Ansible> = 2.3 (la distinction entre les fichiers et les répertoires n'est plus nécessaire.)
la source
En supposant que vous soyez toujours sous Linux, essayez le
find
cmd.Cela devrait effacer les fichiers / dossiers / cachés sous
/home/mydata/web
la source
la source
Ceci est mon exemple.
démarrer rsyslog
la source
Ci-dessous a travaillé pour moi,
la source