synchronize – Обёртка вокруг rsync для ускорения и упрощения выполнения общих задач в ваших playbook.
Новая версия с 1.4.
Описание
-
synchronize— это обёртка вокруг rsync, которая ускоряет и упрощает выполнение общих задач в ваших playbook. Она выполняется и запускается на локальном хосте, где выполняется Ansible. Конечно, вы можете просто использовать действиеcommand, чтобы самим вызвать rsync, но вам также придётся добавить множество дополнительных опций и фактов хоста.synchronizeне предназначена для предоставления доступа ко всей мощи rsync, но упрощает наиболее часто используемые вызовы. Возможно, вамstillпотребуется вызвать rsync напрямую с помощьюcommandилиshell, в зависимости от вашего сценария использования.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| archive логический |
| Отражает флаг rsync archive, включает рекурсивный поиск, ссылки, разрешения, время, владельца, группу и флаг -D. |
| checksum логический добавлено в 1.6 |
| Пропускать на основе контрольной суммы вместо mod-time и размера; Обратите внимание, что опция «archive» по-прежнему включена по умолчанию — опция «checksum» не отключит её. |
| compress логический добавлено в 1.7 |
| Сжимать данные файла во время передачи. В большинстве случаев оставляйте это включённым, если это не вызывает проблем. |
| copy_links логический |
| Копировать символические ссылки как элемент, на который они указывают (ссылочная цель), а не символическую ссылку. |
| delete логический |
| Удалять файлы в dest, которых нет (после передачи, а не до неё) в пути src. Эта опция требует recursive=yes. |
| dest - / обязательно | Путь на целевом хосте, который будет синхронизироваться с исходным; Путь может быть абсолютным или относительным. | |
| dest_port - добавлено в 1.5 | По умолчанию: «Значение ansible_ssh_port для этого хоста, параметр remote_port конфигурации или значение из конфигурации SSH-клиента, если ни один из них не установлен» | Номер порта SSH на целевом хосте. До Ansible 2.0 переменная инвентаризации ansible_ssh_port имела приоритет перед этим значением. |
| dirs логический |
| Передавать каталоги без рекурсии |
| existing_only логический добавлено в 1.5 |
| Пропускать создание новых файлов на принимающей стороне. |
| group логический |
«значение опции archive» | Сохранить группу |
| link_dest - добавлено в 2.5 | По умолчанию: null | Добавить целевой путь для жёсткой ссылки во время rsync. |
| links логический |
«значение опции archive» | Копировать символические ссылки как символические ссылки. |
| mode - |
| Укажите направление синхронизации. В режиме push локальный хост или делегат является источником; в режиме pull удалённый хост в контексте является источником. |
| owner логический |
«значение опции archive» | Сохранить владельца (только для суперпользователя) |
| partial логический добавлено в 2.0 |
| Указывает rsync сохранить частичный файл, что значительно ускорит последующую передачу остальной части файла. |
| perms логический |
«значение опции archive» | Сохранить разрешения. |
| private_key - добавлено в 1.6 | Укажите приватный ключ для использования в SSH-соединениях rsync (например, ~/.ssh/id_rsa) | |
| recursive логический |
«значение опции archive» | Рекурсивный поиск в каталогах. |
| rsync_opts - добавлено в 1.6 | По умолчанию: null | Укажите дополнительные параметры rsync, передав массив. |
| rsync_path - | Укажите команду rsync для запуска на удалённом хосте. См. --rsync-path в справке rsync.Чтобы указать команду rsync для запуска на локальном хосте, вам нужно задать переменную вашей задачи ansible_rsync_path. | |
| rsync_timeout - | По умолчанию: 0 | Укажите --timeout для команды rsync в секундах. |
| set_remote_user - | По умолчанию: «yes» | Добавить user@ для удалённых путей. Если у вас есть настройка SSH для определения удалённого пользователя для хоста, которая не совпадает с пользователем инвентаризации, вы должны установить этот параметр в «no». |
| src - / обязательно | Путь на исходном хосте, который будет синхронизирован с целевым; Путь может быть абсолютным или относительным. | |
| times логический |
«значение опции archive» | Сохранить время изменения |
| use_ssh_args логический добавлено в 2.0 |
| Использовать параметры ssh_args, указанные в ansible.cfg |
| verify_host логический добавлено в 2.0 |
| Проверить ключ целевого хоста. |
Примечания
Примечание
- rsync должен быть установлен как на локальном, так и на удалённом хосте.
- Для модуля
synchronize, «локальный хост» — это хостthe synchronize task originates on, а «хост назначения» — это хостsynchronize is connecting to. - «Локальный хост» можно изменить на другой хост, используя
delegate_to. Это позволяет копировать данные между двумя удалёнными хостами или полностью на одном удалённом компьютере. - Пользователь и права для синхронизации
srcсоответствуют пользователю, выполняющему задание Ansible на локальном хосте (или remote_user для хоста delegate_to, если используется delegate_to). - Пользователь и права для синхронизации
destсоответствуют пользователюremote_userна хосте назначения илиbecome_user, еслиbecome=yesактивен. - В версии 2.0.0.0 в модуле synchronize произошла ошибка на «локальном хосте». Эта ошибка была исправлена в 2.0.1.
- В настоящее время synchronize ограничен повышением прав через беспарольный sudo. Это связано с тем, что сам rsync подключается к удалённому компьютеру, и rsync не предоставляет способ передачи данных для sudo.
- В настоящее время существует лишь несколько типов подключений, которые поддерживают synchronize (ssh, paramiko, local и docker), так как для этих типов подключений определена стратегия синхронизации. Обратите внимание, что подключение для них не должно требовать пароля, так как сам rsync выполняет подключение, и rsync не предоставляет способ передачи пароля для подключения.
- Ожидайте, что dest=~/x будет ~<remote_user>/x, даже если используется sudo.
- Проверьте вывод в подробном режиме, чтобы убедиться, что пользователь назначения/хост/путь соответствуют ожиданиям.
- Для исключения файлов и каталогов из синхронизации можно добавить файлы
.rsync-filterв исходный каталог. - Дэмон rsync должен быть запущен и иметь правильные права при использовании протокола rsync в источнике или целевом пути.
- Модуль
synchronizeпринудительно выполняет–delay-updates, чтобы избежать оставления целевого состояния в разрывном промежуточном состоянии, если подлежащий процесс rsync столкнётся с ошибкой. Те, кто синхронизирует большое количество файлов и готовы пожертвовать надёжностью ради производительности, должны вызывать rsync напрямую. - link_destination подчиняется тем же ограничениям, что и подлежащий дэмон rsync. Жёсткие ссылки сохраняются только в том случае, если относительные поддеревья источника и назначения идентичны. Попытки создания жёсткой ссылки в каталог, являющийся подкаталогом источника, будут предотвращены.
Примеры
- name: Synchronization of src on the control machine to dest on the remote hosts
synchronize:
src: some/relative/path
dest: /some/absolute/path
- name: Synchronization using rsync protocol (push)
synchronize:
src: some/relative/path/
dest: rsync://somehost.com/path/
- name: Synchronization using rsync protocol (pull)
synchronize:
mode: pull
src: rsync://somehost.com/path/
dest: /some/absolute/path/
- name: Synchronization using rsync protocol on delegate host (push)
synchronize:
src: /some/absolute/path/
dest: rsync://somehost.com/path/
delegate_to: delegate.host
- name: Synchronization using rsync protocol on delegate host (pull)
synchronize:
mode: pull
src: rsync://somehost.com/path/
dest: /some/absolute/path/
delegate_to: delegate.host
- name: Synchronization without any --archive options enabled
synchronize:
src: some/relative/path
dest: /some/absolute/path
archive: no
- name: Synchronization with --archive options enabled except for --recursive
synchronize:
src: some/relative/path
dest: /some/absolute/path
recursive: no
- name: Synchronization with --archive options enabled except for --times, with --checksum option enabled
synchronize:
src: some/relative/path
dest: /some/absolute/path
checksum: yes
times: no
- name: Synchronization without --archive options enabled except use --links
synchronize:
src: some/relative/path
dest: /some/absolute/path
archive: no
links: yes
- name: Synchronization of two paths both on the control machine
synchronize:
src: some/relative/path
dest: /some/absolute/path
delegate_to: localhost
- name: Synchronization of src on the inventory host to the dest on the localhost in pull mode
synchronize:
mode: pull
src: some/relative/path
dest: /some/absolute/path
- name: Synchronization of src on delegate host to dest on the current inventory host.
synchronize:
src: /first/absolute/path
dest: /second/absolute/path
delegate_to: delegate.host
- name: Synchronize two directories on one remote host.
synchronize:
src: /first/absolute/path
dest: /second/absolute/path
delegate_to: "{{ inventory_hostname }}"
- name: Synchronize and delete files in dest on the remote host that are not found in src of localhost.
synchronize:
src: some/relative/path
dest: /some/absolute/path
delete: yes
recursive: yes
# This specific command is granted su privileges on the destination
- name: Synchronize using an alternate rsync command
synchronize:
src: some/relative/path
dest: /some/absolute/path
rsync_path: "su -c rsync"
# Example .rsync-filter file in the source directory
# - var # exclude any path whose last part is 'var'
# - /var # exclude any path starting with 'var' starting at the source directory
# + /var/conf # include /var/conf even though it was previously excluded
- name: Synchronize passing in extra rsync options
synchronize:
src: /tmp/helloworld
dest: /var/www/helloworld
rsync_opts:
- "--no-motd"
- "--exclude=.git"
# Hardlink files if they didn't change
- name: Use hardlinks when synchronizing filesystems
synchronize:
src: /tmp/path_a/foo.txt
dest: /tmp/path_b/foo.txt
link_dest: /tmp/path_a/
# Specify the rsync binary to use on remote host and on local host
- hosts: groupofhosts
vars:
ansible_rsync_path: "/usr/gnu/bin/rsync"
tasks:
- name: copy /tmp/localpath/ to remote location /tmp/remotepath
synchronize:
src: "/tmp/localpath/"
dest: "/tmp/remotepath"
rsync_path: "/usr/gnu/bin/rsync"
Статус
- Этот модуль не гарантирует обратную совместимость интерфейса. [превью]
- Этот модуль поддерживается командой Ansible Core. [ядро]
Поддержка Red Hat
Дополнительную информацию о поддержке данного модуля Red Hat можно найти в этой статье базы знаний Red Hat.
Авторы
- Timothy Appnel (@tima)
Подсказка
Если вы обнаружите какие-либо проблемы в этой документации, вы можете отредактировать этот документ, чтобы улучшить его.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.7/modules/synchronize_module.html