Как я могу скопировать более одного файла на удаленные узлы с помощью Ansible в задаче?
Я попытался продублировать строку модуля копирования в своей задаче для определения файлов, но она копирует только первый файл.
Для этого можно использовать with_fileglob
цикл:
- copy:
src: "{{ item }}"
dest: /etc/fooapp/
owner: root
mode: 600
with_fileglob:
- /playbooks/files/fooapp/*
/roles/db/files
но не могу заставить его работать с этим методом. Я пробовал,with_fileglob: - /roles/db/file/*
но путь неисточник
dest
набором в качестве переменной?{ src: 'containerizers', dest: {{ containerizers }} }
.{ src: '{{ source.var }}', dest: '{{ dest.var }}' }
Для этого можно использовать with_toght:
источник
Если вам нужно более одного места, вам нужно более одной задачи. Одна задача копирования может копировать только из одного места (включая несколько файлов) в другое на узле.
источник
Начиная с Ansible 2.5
with_*
конструкции устарели , иloop
следует использовать синтаксис. Простой практический пример:источник
источник
find
модуль работает только для ansible 2.x, но не для ansible 1.xstdout_lines
в возвращаемом значении, но это не применимо дляfind
модуля. Это толькоfiles
,examined
и вmatched
качестве возвращаемых значений. Надеюсь, что поможет другимfind
только кажется, что смотрит на удаленную систему, не давая ничего захватить с управляющего узла. Эти ответы с использованиемwith_fileglob
кажутся более подходящими: stackoverflow.com/a/42290160/272387 , stackoverflow.com/a/36720342/272387 .Или вы можете использовать with_items:
источник
источник
Вы можете перебирать переменную со списком каталогов:
источник
Используйте следующий исходный код для копирования нескольких файлов на ваш клиентский компьютер.
Примечание:
Если вы передаете несколько путей с помощью переменной, тогда
SRC: "/ корень / {{элемент}}"
Если вы передаете путь, используя переменную для разных элементов, тогда
src: "/ root / {{item.source_path}}"
источник
copy
module - неправильный инструмент для копирования многих файлов и / или структуры каталогов, используйтеsynchronize
вместо него модуль, который используетсяrsync
как бэкэнд. Имейте в виду, это требуетrsync
установки как на контроллере, так и на целевом хосте. Это действительно мощно, проверьте доступную документацию .Пример - копирование файлов из
build
каталога (с подкаталогами) контроллера в/var/www/html
каталог на целевом хосте:источник