MyTetra Share
Делитесь знаниями!
Как в модуле synchronize системы Ansible указывать каталоги, чтобы копировался именно каталог или только содержимое
Время создания: 10.03.2025 11:51
Текстовые метки: ansible, synchronize, модуль, директория, каталог, папка, слеш, "/", завершающий, содержимое, копирование, синхронизация
Раздел: Компьютер - Linux - Оркестрация - Ansible
Запись: xintrea/mytetra_syncro/master/base/1741596703uztpnfiy44/text.html на raw.github.com

Вопрос


Как в модуле syncronize системы оркестрации Ansible указать исходную директорию и директорию назначения так, чтобы скопировалось только содержимое директории, без создания новой директории на управляемом хосте? Есть ли какие-то тонкости с указанием звершающего слеша в конце пути к директории в параметрах src и dest?



Ответ


В модуле synchronize в Ansible, если вы хотите скопировать только содержимое директории, без создания новой директории на управляемом хосте, вам нужно обратить внимание на использование завершающего слеша (/) в параметрах src и dest.



Как указать исходную и целевую директории


Исходная директория (src): Если вы хотите скопировать только содержимое директории, добавьте завершающий слеш (/) к пути исходной директории. Например:



src: /path/to/source/



Этот параметр указывает модулю synchronize, что нужно копировать только содержимое директории, а не саму директорию.


Целевая директория (dest): Убедитесь, что вы не добавляете завершающий слеш к пути целевой директории. Например:



dest: /path/to/destination



Этот параметр гарантирует, что содержимое будет скопировано непосредственно в указанную директорию, без создания дополнительной поддиректории.



Полный пример задачи



- name: Синхронизация содержимого исходной директории с директорией назначения

synchronize:

src: /path/to/source/

dest: /path/to/destination



Тонкости с завершающим слешем (другими словами)


Параметр src: Если добавить завершающий слеш (/), то будет скопировано только содержимое директории. Если не добавить, то будет скопирована сама директория вместе с её содержимым.


Параметр dest: Если добавить завершающий слеш (/), это может привести к неожиданному поведению, так как модуль может интерпретировать это как указание на создание новой поддиректории. Поэтому лучше не добавлять завершающий слеш к dest.


Правильное использование завершающего слеша в src и dest позволяет контролировать, будет ли скопирована сама директория или только её содержимое.



Дополнительные параметры


Если требуется, чтобы модуль synchronize работал в режиме "mirror" (удаляя файлы в целевой директории, которых нет в исходной), можно добавить параметр delete: yes:



- name: Synchronize contents with mirroring

synchronize:

src: /path/to/source/

dest: /path/to/destination

delete: yes



Полезно знать, что модуль synchronize у себя под капотом использует Linux-утилиту rsync. Если нужно использовать rsync с определёнными опциями, то их следует указать их через параметр rsync_opts:



- name: Synchronize with custom rsync options

synchronize:

src: /path/to/source/

dest: /path/to/destination

rsync_opts:

- "--exclude=*.tmp"

- "--archive"



Эти опции будут добавляться в командную строку при конструировании итоговой команды синхронизации.


Так же в этом разделе:
 
MyTetra Share v.0.67
Яндекс индекс цитирования