Comment puis-je copier plusieurs fichiers dans des nœuds distants par Ansible dans une tâche?
J'ai essayé de dupliquer la ligne du module de copie dans ma tâche pour définir les fichiers, mais cela ne copie que le premier fichier.
Vous pouvez utiliser la with_fileglob
boucle pour cela:
- copy:
src: "{{ item }}"
dest: /etc/fooapp/
owner: root
mode: 600
with_fileglob:
- /playbooks/files/fooapp/*
/roles/db/files
mais je ne peux pas le faire fonctionner avec cette méthode. J'ai essayéwith_fileglob: - /roles/db/file/*
mais ça ne va pas bien le cheminla source
dest
ensemble comme variable?{ src: 'containerizers', dest: {{ containerizers }} }
.{ src: '{{ source.var }}', dest: '{{ dest.var }}' }
Vous pouvez utiliser with_together à cet effet:
la source
Si vous avez besoin de plus d'un emplacement, vous avez besoin de plus d'une tâche. Une tâche de copie ne peut copier qu'un emplacement (y compris plusieurs fichiers) vers un autre sur le nœud.
la source
Depuis Ansible 2.5, les
with_*
constructions sont obsolètes et laloop
syntaxe doit être utilisée. Un exemple pratique simple:la source
la source
find
module ne fonctionne que pour ansible 2.x mais pas pour ansible 1.xstdout_lines
dans la valeur de retour mais n'est pas applicable pour lefind
module. Il a seulementfiles
,examined
etmatched
que les valeurs de retour. J'espère que cela aidera les autresfind
ne semble regarder que le système distant, ne permettant pas de récupérer quoi que ce soit du nœud de gestion. Ces réponses, en utilisantwith_fileglob
, semblent plus appropriées: stackoverflow.com/a/42290160/272387 , stackoverflow.com/a/36720342/272387 .Ou vous pouvez utiliser with_items:
la source
la source
Vous pouvez parcourir la variable avec la liste des répertoires:
la source
Utilisez le code source suivant pour copier plusieurs fichiers sur votre ordinateur client.
Remarque:
Si vous passez plusieurs chemins en utilisant la variable, alors
src: "/ root / {{élément}}"
Si vous passez le chemin en utilisant une variable pour différents éléments, alors
src: "/ root / {{item.source_path}}"
la source
copy
module est un mauvais outil pour copier de nombreux fichiers et / ou une structure de répertoires, utilisezsynchronize
plutôt le module qui utilisersync
comme backend. Attention, il doit êtrersync
installé à la fois sur le contrôleur et sur l'hôte cible. C'est vraiment puissant, vérifiez la documentation disponible .Exemple - copier des fichiers du
build
répertoire (avec sous-répertoires) du contrôleur vers le/var/www/html
répertoire sur l'hôte cible:la source