это документация объясняет, как копировать файлы и каталоги с помощью copy
модуль в Ansible. Как скопировать всех детей кроме одного?
Обсуждение
Лучшим вариантом, вероятно, было бы использование synchronize
модуль.
synchronize - это оболочка для команды rsync, предназначенная для упрощения общих задач с помощью rsync.
В то время как copy
модуль копирует файлы с помощью Python и ограничен в своей функциональности. Есть примечание в копировать документацию модуля:
Модуль «копировать» модуль рекурсивного копирования не масштабируется до множества (> сотен) файлов. В качестве альтернативы см. Модуль синхронизации, который является оболочкой для rsync.
С synchronize
модуль можно пройти exclude
шаблоны через rsync_opts
к rsync
команда выполняется Ansible.
# Synchronize passing in extra rsync options
synchronize:
src: /tmp/helloworld
dest: /var/www/helloword
rsync_opts:
- "--exclude=.git"
Но synchronize
модуль имеет некоторые предостережения. Как и требование rsync
установлен на локальной и удаленной машине. Вот почему я бы не стал использовать его, когда он не нужен.
Если бы мне пришлось использовать только copy
, вот что я бы сделал. В этом примере я использую patterns
которые характерны для Python и .hiddenfile
(Я использую скрытый, чтобы продемонстрировать, что у find есть много вариантов для изучения). Однако основная идея - вы можете использовать фильтры шаблонов / регулярных выражений, чтобы удовлетворить ваши потребности.
- name: prepare a list of files to copy from some place
find:
paths: /var/some-place
hidden: yes
patterns:
- "*.py"
- ".hiddenfile"
delegate_to: localhost
register: target_files
- name: copy files to other place
copy:
src: "{{ item.path }}"
dest: /var/other-place
with_items: "{{ target_files.files }}"
tags:
- copy