En utilisant ansible sur la ligne de commande pour exécuter des commandes ad hoc, un caractère générique est très utile, par ex. pour voir si un fichier existe sur tous les systèmes.
Moi aussi j'ai eu du mal à faire :$ ansible production -a "ls /mypath/*xxx*"
Mais l'envelopper dans bash -c '...' fonctionne :$ ansible production -a "bash -c 'ls /mypath/*xxx*'"
Une tâche définie comme celle-ci ferait l'affaire :
- name: Move internal directories and files
command: bash -c 'mv /tmp/parent-dir/* /opt/destination/'
Comme Larsks l'a écrit, la clé est d'utiliser register
, mais le code ne fonctionnait pas sur ma version ansible actuelle. Alors en voici une corrigée :
- shell: ls -d solr*
register: dir_name
- command: chdir={{ item }} some_command
with_items: dir_name.stdout_lines
Non. Le chdir=
paramètre à, par exemple, le command
le module ne prend pas en charge les caractères génériques.
Vous pouvez accomplir ce que vous voulez en utilisant une variable de registre pour stocker la sortie du ls
commande :
- shell: ls -d solr*
register: dir_name
- command: some_command
args:
chdir: "{{ dir_name.stdout }}"
Mais c'est, franchement, une solution laide. Vous feriez mieux d'utiliser simplement le nom du répertoire réel. S'il diffère sur différents hôtes, vous pouvez utiliser des variables d'hôte pour le définir de manière appropriée.