Есть ли с_fileglob, который работает удаленно в недоступном?

Есть ли with_fileglob который работает удаленно в недоступном?

В основном я хочу использовать что-то похожее с with_fileglob но это будет glob файлы на удаленной/целевой машине, а не на той, которая работает.

Ответ 1

К сожалению, все механизмы with_* являются локальными поисками, поэтому в Ansible нет действительно чистого способа сделать это. Удаленные операции по дизайну должны быть заключены в задачи, поскольку они должны иметь дело с соединениями и инвентарем и т.д.

Что вы можете сделать, так это сгенерировать свой файловый глобус, выгрузив его на хост, а затем зарегистрировав вывод и stdout_lines часть вывода stdout_lines.

Таким образом, тривиальный пример может быть примерно таким:

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

Это будет подключаться к удаленному хосту (например, host.example.com), получить все имена файлов в /path/ а затем скопировать их обратно на хост Ansible по пути: /path/host.example.com/.

Ответ 2

Используйте модуль find для фильтрации файлов, а затем обработайте полученный список:

- name: Get files on remote machine
  find:
    paths: /path/on/remote
  register: my_find

- debug:
    var: item.path
  with_items: "{{ my_find.files }}"

Ответ 3

Использование ls/path/* не работало для меня, поэтому здесь пример, который использует find и некоторое простое регулярное выражение для удаления всех управляемых виртуальных хостов 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 }}"

Вы можете использовать его для поиска всех файлов с определенным расширением или любым другим микс. Например, чтобы просто получить все файлы в каталоге: find/etc/nginx/sites-enabled / -type f.