synchronize - Обертка вокруг rsync для быстрого и простого выполнения общих задач в ваших playbooks.
Новая версия 1.4.
Обзор
-
synchronize— это обертка вокруг rsync, которая упрощает и ускоряет выполнение общих задач в ваших playbooks. Она запускается и выполняется на локальном хосте, где выполняется Ansible. Конечно, вы можете просто использовать действиеcommand, чтобы самостоятельно вызвать rsync, но вам также потребуется добавить большое количество служебных параметров и фактов о хосте.synchronizeне предназначен для предоставления доступа ко всем возможностям rsync, но упрощает реализацию наиболее распространённых вызовов. Возможно, вамstillпотребуется вызвать rsync напрямую с помощьюcommandилиshell, в зависимости от вашего случая использования.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| archive bool |
| Отражает флаг rsync archive, включает рекурсивный, ссылки, разрешения, время, владельца, группу и флаги -D. |
| checksum bool (добавлен в 1.6) |
| Пропуск на основе контрольной суммы вместо mod-time и размера; обратите внимание, что опция "archive" по-прежнему включена по умолчанию — опция "checksum" её не отключит. |
| compress bool (добавлен в 1.7) |
| Сжимать данные файла во время передачи. В большинстве случаев оставляйте это включённым, если это не вызывает проблем. |
| copy_links bool |
| Копировать символические ссылки как элемент, на который они ссылаются (ссылка), а не символическую ссылку. |
| delete bool |
| Удалять файлы в dest, которых нет (после передачи, а не до) в пути src. Для этой опции требуется recursive=yes. |
| dest обязательно | Путь на хосте назначения, который будет синхронизироваться с исходным путём; путь может быть абсолютным или относительным. | |
| dest_port (добавлен в 1.5) | Значение по умолчанию: "Значение ansible_ssh_port для этого хоста, значение параметра remote_port конфигурации или значение из конфигурации SSH-клиента, если ни одно из этих значений не задано" | Номер порта SSH на хосте назначения. До Ansible 2.0 переменная инвентаризации ansible_ssh_port имела приоритет перед этим значением. |
| dirs bool |
| Передавать каталоги без рекурсии |
| existing_only bool (добавлен в 1.5) |
| Пропустить создание новых файлов на приемнике. |
| group bool |
"значение опции archive" | Сохранить группу |
| link_dest (добавлен в 2.5) | Значение по умолчанию: null | Добавить пункт назначения для жёсткой ссылки во время rsync. |
| links bool |
"значение опции archive" | Копировать символические ссылки как символические ссылки. |
| mode |
| Укажите направление синхронизации. В режиме push локальный хост или делегат является источником; в режиме pull удалённый хост в контексте является источником. |
| owner bool |
"значение опции archive" | Сохранить владельца (только для суперпользователя) |
| partial bool (добавлен в 2.0) |
| Указывает rsync сохранить частичный файл, что должно значительно ускорить последующую передачу остальной части файла. |
| perms bool |
"значение опции archive" | Сохранить разрешения. |
| private_key (добавлен в 1.6) | Укажите закрытый ключ для использования в SSH-базируемых подключениях rsync (например, ~/.ssh/id_rsa) | |
| recursive bool |
"значение опции archive" | Рекурсивно входить в каталоги. |
| rsync_opts (добавлен в 1.6) | Значение по умолчанию: null | Укажите дополнительные параметры rsync, передав массив. |
| rsync_path | Укажите команду rsync, которая будет запущена на удалённом хосте. Смотрите --rsync-path в справке rsync. | |
| rsync_timeout | Значение по умолчанию: 0 | Укажите --timeout для команды rsync в секундах. |
| set_remote_user | Значение по умолчанию: "yes" | Добавлять user@ к удалённым путям. Если у вас есть настройка ssh для определения удалённого пользователя для хоста, которая не соответствует пользователю в инвентаризации, вы должны установить этот параметр в "no". |
| src обязательно | Путь на хосте источника, который будет синхронизироваться с путём назначения; путь может быть абсолютным или относительным. | |
| times bool |
"значение опции archive" | Сохранить время изменения |
| use_ssh_args bool (добавлен в 2.0) |
| Использовать заданные ssh_args в ansible.cfg |
| verify_host bool (добавлен в 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/
Статус
Этот модуль помечен как превью, что означает, что его интерфейс не гарантируется обратной совместимостью.
Техническое обслуживание
Этот модуль помечен как ядерный, что означает, что он поддерживается Командой ядра Ansible. Дополнительную информацию см. в разделе Техническое обслуживание и поддержка модулей.
Список других модулей, поддерживаемых Командой ядра Ansible, см. в разделе здесь.
Поддержка
Дополнительную информацию о поддержке этого модуля компанией 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.6/modules/synchronize_module.html