web-dev-qa-db-fra.com

Existe-t-il avec_fileglob qui fonctionne à distance en ansible?

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.

24
sorin

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/.

20
ydaetskcoR

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 }}"
12
techraf

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.

3
Sebastiaan Luca