2016-04-18 3 views

ответ

59

Вы можете использовать цикл with_fileglob для этого:

- copy: 
    src: "{{ item }}" 
    dest: /etc/fooapp/ 
    owner: root 
    mode: 600 
    with_fileglob: 
    - /playbooks/files/fooapp/* 
+0

Такой подход мог бы помочь мне, если у меня были все мои файлы в том же корень для копирования в удаленную машину , как насчет наличия некоторых файлов в разных каталогах. Например, я хочу скопировать 3 файла из 3 разных директорий. – Mark

+0

Эй, я пытаюсь переместить все файлы из своих// ролей/db/файлов, но я не могу заставить его работать с этим методом. Я пробовал 'with_fileglob: -/role/db/file/*', но он не будет штрафовать путь – Batman

4

Если вам нужно больше, чем одно место, вам нужно больше, чем одну задачу. Одна задача копирования может копироваться только из одного места (включая несколько файлов) в другое на узле.

- copy: src=/file1 dest=/destination/file1 
- copy: src=/file2 dest=/destination/file2 

# copy each file over that matches the given pattern 
- copy: src={{ item }} dest=/destination/ 
    with_fileglob: 
    - /files/* 
+0

- name: copy file1 copy: src =/file1 dest =/destination/file1 - имя: copy file2 copy: src =/file2 dest =/destination/file2 – Mark

11

Вы можете использовать with_together для этой цели:

- name: Copy multiple files to multiple directories 
    copy: src={{ item.0 }} dest={{ item.1 }} 
    with_together: 
    - [ 'file1', 'file2', 'file3' ] 
    - [ '/dir1/', '/dir2/', '/dir3/' ] 
+0

Хотя это работает, это не семантически чистое - есть более чистые варианты. – plesiv

4
- hosts: lnx 
    tasks: 
    - find: paths="/appl/scripts/inq" recurse=yes patterns="inq.Linux*" 
     register: file_to_copy 
    - copy: src={{ item.path }} dest=/usr/local/sbin/ 
     owner: root 
     mode: 0775 
     with_items: "{{ files_to_copy.files }}" 
+0

только сторона примечания, что 'find' модуль работает только для anxible 2.x, но не для ansible 1.x –

+0

Я исправил ваш ответ, потому что вы упоминали' stdout_lines' в возвращаемом значении, но не применимы для 'find' модуль. Он имеет только «файлы», «проверены» и «сопоставлен» как возвращаемые значения. Надеюсь, что это поможет другим? –

+0

Кто-нибудь мог получить эту работу для копирования файлов на удаленные узлы? 'find' только кажется, смотрит на удаленную систему, не позволяя захватывать что-либо из управляющего узла. Эти ответы с использованием 'with_fileglob', кажется, более подходят: https://stackoverflow.com/a/42290160/272387, https://stackoverflow.com/a/36720342/272387. – Richlv

52
- name: Your copy task 
    copy: src={{ item.src }} dest={{ item.dest }} 
    with_items: 
    - { src: 'containerizers', dest: '/etc/mesos/containerizers' } 
    - { src: 'another_file', dest: '/etc/somewhere' } 
    - { src: 'dynamic', dest: '{{ var_path }}' } 
    # more files here 
+0

Возможно ли это решение с набором 'dest' как переменной? '{src: 'containerizers', dest: {{containerizers}}}'. – Gesias

+1

@ Геся, да. На самом деле обе стороны могут быть переменными: '{src: '{{source.var}}', dest: '{{dest.var}}'}' – ntwrkguru

Смежные вопросы