2016-10-11 23 views
1

Я пытаюсь скопировать кучу файлов с сервера X (не контролировать машину) к группе серверов, цели: Y1, Y2, ..., Yn (определенный в хозяине файл)анзибль Копирование файлов

files: 
    '-path 
     '- files 
      '- file1 
      '- file2 
      '- dir 
       '- file_x 

Мой сборник пьес:

#!/usr/bin/env ansible-playbook 
--- 
vars: 
    src_dir: /path/files 
hosts: {{ targets }} 
tasks: 
    - name: copying files 
    command: "rsync -avrcz X:{{ src_dir }}/{{ artifacts }} {{ dest_dir }}" 

Моя командная строка:

./playbook.yml -e '{"targets": "targets", "artifacts" : "{file1,file2,dir/file_x}", "dest_dir": "/yserv/dest/path"}' 

Это работает, и я могу распараллелить довольно прилично, но я получаю:

[ПРЕДУПРЕЖДЕНИЕ]: Рассмотрите возможность использования синхронизации модуля, а не работает Rsync

Есть ли способ, чтобы достичь это с помощью модуля синхронизации? Ansible, похоже, не нравится bash расширение скобки синтаксис. Передача списка файлов в виде массива и использование with_items не практично, так как это заставляет все это последовательный, вызывая Rsync для каждого файла и, следовательно, очень медленно (есть огромный список файлов для копирования)

+0

Вам нужно скопировать только те файлы, а не всю структуру каталогов из 'files' вниз? –

+0

@XiongChiamiov Спасибо, что ответили. Да, это очень важный вопрос, но я требую, чтобы иерархия dir/file назначения несколько отличалась. Поэтому, если на XI есть: _/store/a/b/c/{d, e}/{f11, f12 ...} _, есть также файлы на уровне/store/a/b say x_1, x_2. .. по месту назначения я хочу: _/home/xuser/b/{d, e, f1}/{f11, f12, ..} _ и _/home/xuser/b/{x_1, x_2 ..} _. Следовательно, в действительности, в расширении скобки, я пропускаю _ {x_1, x_2, c/d, c/e} _ –

+0

не используют для этого модуль синхронизации, он не работает даже для версии 2.3, предпочитает команду rsync – pinkvoid

ответ

0

Использование Rsync в вы делаете быстрее. Единственным недостатком является то, что задача всегда будет возвращать "changed": false, даже если rsync ничего не изменил. Synchronize module подтверждают, что «вам все равно может потребоваться вызвать rsync напрямую через команду или оболочку в зависимости от вашего варианта использования». Просто игнорируйте предупреждение.