ansible.posix.synchronize – Обёртка вокруг rsync для ускорения и упрощения общих задач в ваших задачах Ansible
Примечание
Этот плагин входит в коллекцию ansible.posix (версия 1.1.1).
Для установки используйте: ansible-galaxy collection install ansible.posix.
Для использования в задаче Ansible укажите: ansible.posix.synchronize.
Новое в версии 1.0.0: из ansible.posix
Обзор
-
synchronize— это обёртка вокруг rsync для ускорения и упрощения общих задач в ваших задачах Ansible. - Он выполняется и находится на локальном хосте, на котором выполняется Ansible.
- Конечно, вы можете просто использовать действие
command, чтобы сами вызвать rsync, но вам также придётся добавить большое количество стандартных опций и фактов хоста. - Этот модуль не предназначен для предоставления доступа ко всем возможностям rsync, но упрощает самые распространённые вызовы. Вам
stillможет потребоваться вызвать rsync напрямую черезcommandилиshell, в зависимости от вашей задачи.
Примечание
Этот модуль имеет соответствующий плагин действий.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| archive булево |
| Отражает флаг rsync archive, включает рекурсивный режим, ссылки, разрешения, время, владельца, группу и флаг -D. |
| checksum булево |
| Пропустить на основе контрольной суммы, а не на основе времени изменения и размера; обратите внимание, что параметр «archive» всё ещё включён по умолчанию — параметр «checksum» не отключит его. |
| compress булево |
| Сжимать данные файла во время передачи. В большинстве случаев оставьте это включённым, если это не вызывает проблем. |
| copy_links булево |
| Копировать символические ссылки как элемент, на который они указывают (ссылочный объект), а не символическую ссылку. |
| delete булево |
| Удалять файлы в dest, которые не существуют (после передачи, а не до неё) в пути src.Этот параметр требует recursive=yes.Этот параметр игнорирует исключённые файлы и работает так же, как опция rsync --delete-excluded. |
| dest строка / обязательно | Путь на хосте назначения, который будет синхронизирован с исходного хоста. Путь может быть абсолютным или относительным. | |
| dest_port целое число | Номер порта для ssh на хосте назначения. Перед Ansible 2.0, переменная инвентаризации ansible_ssh_port имела приоритет над этим значением. Этот параметр по умолчанию принимает значение ansible_ssh_port или ansible_port, параметр конфигурации remote_port или значение из конфигурации ssh-клиента, если ни одно из предыдущих не было задано. | |
| dirs булево |
| Передавать каталоги без рекурсии. |
| existing_only булево |
| Пропустить создание новых файлов на получателе. |
| group булево |
| Сохранить группу. Этот параметр по умолчанию принимает значение параметра archive. |
| link_dest список / элементы=строка | Добавить назначение для жёсткой ссылки во время rsync. | |
| links булево |
| Копировать символические ссылки как символические ссылки. Этот параметр по умолчанию принимает значение параметра archive. |
| mode строка |
| Указать направление синхронизации. В режиме push локальный хост или делегат является источником. В режиме pull удалённый хост в контексте является источником. |
| owner булево |
| Сохранить владельца (только для суперпользователей). Этот параметр по умолчанию принимает значение параметра archive. |
| partial булево |
| Указывает rsync сохранять частичный файл, что значительно ускорит последующую передачу оставшейся части файла. |
| perms булево |
| Сохранить разрешения. Этот параметр по умолчанию принимает значение параметра archive. |
| private_key путь | Укажите закрытый ключ для использования в подключениях rsync на основе SSH (например, ~/.ssh/id_rsa). | |
| recursive булево |
| Рекурсивно пройтись по каталогам. Этот параметр по умолчанию принимает значение параметра archive. |
| rsync_opts список / элементы=строка | Укажите дополнительные параметры rsync, передав массив. Обратите внимание, что пустая строка в rsync_opts приведет к передаче текущей рабочей директории. | |
| rsync_path строка | Укажите команду rsync, которая будет запущена на удалённом хосте. См. --rsync-path в справке rsync.Чтобы указать команду rsync для запуска на локальном хосте, необходимо установить эту переменную задачи ansible_rsync_path. | |
| rsync_timeout целое число | Значение по умолчанию: 0 | Укажите --timeout для команды rsync в секундах. |
| set_remote_user булево |
| Добавить user@ для удалённых путей. Если у вас есть настройка ssh для определения удалённого пользователя для хоста, которая не соответствует пользователю инвентаризации, вы должны установить этот параметр в no. |
| src строка / обязательно | Путь на исходном хосте, который будет синхронизирован на хост назначения. Путь может быть абсолютным или относительным. | |
| times булево |
| Сохранить время изменения. Этот параметр по умолчанию принимает значение параметра archive. |
| use_ssh_args булево |
| Использовать указанные в ansible.cfg параметры ssh_args. |
| verify_host булево |
| Проверить ключ хоста назначения. |
Примечания
Примечание
- 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активен. - В Ansible 2.0 в модуле synchronize была ошибка, из-за которой происходили сбои на «локальном хосте». Эта ошибка была исправлена в Ansible 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 демону. Жёсткие ссылки сохраняются только в том случае, если относительные поддеревья источника и назначения одинаковы. Попытки создать жёсткую ссылку в директории, являющейся поддиректорией источника, будут предотвращены.
См. также
См. также
- copy
-
Официальная документация модуля copy.
- community.windows.win_robocopy
-
Официальная документация модуля community.windows.win_robocopy.
Примеры
- name: Synchronization of src on the control machine to dest on the remote hosts
ansible.posix.synchronize:
src: some/relative/path
dest: /some/absolute/path
- name: Synchronization using rsync protocol (push)
ansible.posix.synchronize:
src: some/relative/path/
dest: rsync://somehost.com/path/
- name: Synchronization using rsync protocol (pull)
ansible.posix.synchronize:
mode: pull
src: rsync://somehost.com/path/
dest: /some/absolute/path/
- name: Synchronization using rsync protocol on delegate host (push)
ansible.posix.synchronize:
src: /some/absolute/path/
dest: rsync://somehost.com/path/
delegate_to: delegate.host
- name: Synchronization using rsync protocol on delegate host (pull)
ansible.posix.synchronize:
mode: pull
src: rsync://somehost.com/path/
dest: /some/absolute/path/
delegate_to: delegate.host
- name: Synchronization without any --archive options enabled
ansible.posix.synchronize:
src: some/relative/path
dest: /some/absolute/path
archive: no
- name: Synchronization with --archive options enabled except for --recursive
ansible.posix.synchronize:
src: some/relative/path
dest: /some/absolute/path
recursive: no
- name: Synchronization with --archive options enabled except for --times, with --checksum option enabled
ansible.posix.synchronize:
src: some/relative/path
dest: /some/absolute/path
checksum: yes
times: no
- name: Synchronization without --archive options enabled except use --links
ansible.posix.synchronize:
src: some/relative/path
dest: /some/absolute/path
archive: no
links: yes
- name: Synchronization of two paths both on the control machine
ansible.posix.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
ansible.posix.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.
ansible.posix.synchronize:
src: /first/absolute/path
dest: /second/absolute/path
delegate_to: delegate.host
- name: Synchronize two directories on one remote host.
ansible.posix.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.
ansible.posix.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
ansible.posix.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
ansible.posix.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
ansible.posix.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
ansible.posix.synchronize:
src: /tmp/localpath/
dest: /tmp/remotepath
rsync_path: /usr/gnu/bin/rsync
Авторы
- 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.10/collections/ansible/posix/synchronize_module.html