Назад | Перейти на главную страницу

Как скопировать в Ansible всех дочерних элементов, кроме одного?

это документация объясняет, как копировать файлы и каталоги с помощью copy модуль в Ansible. Как скопировать всех детей кроме одного?

Обсуждение

  1. В параметры не уточняйте, как это можно было сделать.
  2. Копирование всех дочерних элементов по отдельности невозможно, поскольку родительский элемент содержит более 100 дочерних элементов.

Лучшим вариантом, вероятно, было бы использование 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