Y a-t-il with_fileglob
qui fonctionne à distance en ansible?
Je veux surtout utiliser quelque chose de similaire avec le with_fileglob
mais qui globera les fichiers sur la machine distante/cible, pas sur celle qui exécute ansible.
La totalité de la with_*
les mécanismes de bouclage sont malheureusement des recherches locales, donc il n'y a pas de moyen vraiment propre de le faire dans Ansible. Les opérations à distance par conception doivent être incluses dans les tâches car elles devraient traiter des connexions et de l'inventaire, etc.
Ce que vous pouvez faire est de générer votre fileglob en bombardant l'hôte, puis en enregistrant la sortie et en bouclant sur le stdout_lines
partie de la sortie.
Donc, un exemple trivial peut être quelque chose comme ceci:
- name : get files in /path/
Shell : ls /path/*
register: path_files
- name: fetch these back to the local Ansible Host for backup purposes
fetch:
src : /path/"{{item}}"
dest: /path/to/backups/
with_items: "{{ path_files.stdout_lines }}"
Cela se connecterait à l'hôte distant (par exemple, Host.example.com
), récupérez tous les noms de fichiers sous /path/
, puis copiez-les sur l'hôte Ansible dans le chemin: /path/Host.example.com/
.
Utilisez find
module pour filtrer les fichiers, puis traitez la liste résultante:
- name: Get files on remote machine
find:
paths: /path/on/remote
register: my_find
- debug:
var: item.path
with_items: "{{ my_find.files }}"
En utilisant ls /path/*
n'a pas fonctionné pour moi, voici donc un exemple qui utilise find
et quelques regex simples pour supprimer tous les hôtes virtuels gérés par nginx:
- name: get all managed vhosts
Shell: find /etc/nginx/sites-enabled/ -type f -name \*-managed.conf
register: nginx_managed_virtual_hosts
- name: delete all managed nginx virtual hosts
file:
path: "{{ item }}"
state: absent
with_items: "{{ nginx_managed_virtual_hosts.stdout_lines }}"
Vous pouvez l'utiliser pour trouver tous les fichiers avec une extension spécifique ou tout autre mélange. Par exemple, pour obtenir simplement tous les fichiers d'un répertoire: find /etc/nginx/sites-enabled/ -type f
.