#directory #ansible #permissions #file-permissions #rsync
#каталог #ansible #разрешения #файл-разрешения #rsync
Вопрос:
Я разрешаю пользователю вводить 3-значный номер для установки разрешения на передачу файлов или папок, скажем -e myperm: 775
Я использую ansible, где я предоставляю rsync_opts: --chmod:F775
(модуль синхронизации), чтобы изменить разрешение переданного файла / папки в пункте назначения на 775
- name: sync file
synchronize:
src: /tmp/file.py
dest: /home/myuser/file.py
mode: push
rsync_opts:
- "--chmod=F0{{ myperm }}"
Вышеописанное отлично работает для файлов; однако то же самое не работает для передачи папок, скажем, когда src: /tmp/folder
Я пробовал --chmod=D0{{ myperm }},F0{{ myperm }}
в ansible, но он переводит --chmod=D0775 F0775
и выдает эту ошибку:
msg": "Unexpected remote arg: user@desthost:/tmp/foldernrsync error: syntax or usage error (code 1) at main.c(1344) [sender=3.1.2]n", "rc": 1}
Не могли бы вы предложить rsync_opts
переменную myperm
для изменения разрешений как для файлов, так и для папок?
Любое другое решение также подойдет.
Комментарии:
1. rsync позволяет использовать несколько вариантов chmod, вы пробовали с:
rsync_opts: - "--chmod=F0{{ myperm }}" - "--chmod=D0{{ myperm }}"
?2. @guido это все еще не работает. См. Вывод:
failed: [desthost] (item=/tmp/folder) => {"changed": false, "cmd": "/bin/rsync --delay-updates -F --compress --archive --rsh=/usr/share/centrifydc/bin/ssh -S none -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null - "--chmod=D0777" - "--chmod=F0777" --out-format=<<CHANGED>>%i %n%L destuser@desthost:/tmp/folder /web/playbooks/filecopy/tmpfiles/107/", "item": "/tmp/folder", "msg": "rsync: - "--chmod=D0777" - "--chmod=F0777": unknown optionnrsync error: syntax or usage error (code 1) at main.c(1568) [client=3.1.2]n", "rc": 1}
3.
"rsync: Invalid argument passed to --chmod (F0777 - --chmod=D0777)nrsync error: syntax or usage error (code 1) at main.c(1568) [client=3.1.2]n", "rc": 1}
4. ах, извините, два элемента chmod должны были находиться в разных строках (формируя массив); или вы можете использовать компактный синтаксис
rsync_opts: [ '--chmod=F0{{ myperm }}', '--chmod=D0{{ myperm }}' ]
5. @guido с новыми разными строками я смог заставить это работать как для файлов, так и для папок. Не могли бы вы опубликовать это как ответ, который я должен принять? Кстати, отличная помощь!!
Ответ №1:
Однако, поскольку rsync допускает несколько параметров chmod, вы можете переписать свою задачу как:
[..]
rsync_opts:
- "--chmod=F0{{ myperm }}"
- "--chmod=D0{{ myperm }}"