Есть ли с_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
.