Я использую анзибл с synchronize
модуль, который запускает rsync. Моя проблема не связана с ansible, так как я взял команду rsync из результатов отладки и запустил ее вручную - все та же проблема.
Я выполнил следующую команду:
/usr/bin/rsync --delay-updates -F --rsync-path="sudo rsync" --compress --delete-after --archive "/local/path" "ansible@1.2.3.4:/remote/path" --chown=myuser:myuser
Что бы я ни пытался - я получаю каталог, принадлежащий root:root
.
Поэтому теперь rsync успешно работает от имени пользователя root, поэтому у него должны быть все необходимые разрешения. Я также пробовал использовать --usermap=*:myuser --groupmap=*:myuser
- ничего.
я добавил --chmod=750
- не применяется.
В выводе отладки (-vvvv
), Я снова вижу свои параметры, но это все.
Ни предупреждений, ни ошибок, но и никакого последующего упоминания чего-либо, содержащего "user", "group", "chown" и т. Д. Rsync - это 3.1.1 в Debian 8.
Любая помощь будет оценена ...
В chown
системный вызов (и, соответственно, chown
и rsync --chown
команды) могут использоваться только root
. Вы подключаетесь к удаленной системе как ansible
user, поэтому удаленная система не разрешит операцию. В rsync
команда распознает, что она не работает как root
в удаленной системе, поэтому он молча игнорирует --chown
вариант и другие подобные (например, --mapuser
).
В rsync руководство не совсем ясно об этом поведении, но если вы укажете --super
вариант, это вызовет rsync
в удаленной системе, чтобы предположить, что она работает как root
, даже если это не так. Это позволит ему попытаться chown
операции, и для выдачи ошибки в случае сбоя.
РЕДАКТИРОВАТЬ:
Если вам удастся выполнить rsync
в удаленной системе как root
(например, используя --rsync-path="sudo rsync"
) вам все равно нужно будет добавить пару опций для --chown
быть пригодным для использования. В руководстве говорится:
--chown=USER:GROUP
This option forces all files to be owned by USER with group GROUP.
This is a simpler interface than using --usermap and --groupmap
directly, but it is implemented using those options internally, so
you cannot mix them.
И вот что написано в руководстве для --usermap
и --groupmap
:
--usermap=STRING, --groupmap=STRING
...
For the --usermap option to have any effect, the -o (--owner)
option must be used (or implied), and the receiver will need to
be running as a super-user (see also the --fake-super option).
For the --groupmap option to have any effect, the -g (--groups)
option must be used (or implied), and the receiver will need to
have permissions to set that group.
Помимо использования --rsync-path
запустить это под sudo
попробуйте добавить -o
и -g
варианты тоже.
sudo
не преступник ... частично это был я, и, возможно, это также ошибка / функция, работающая не так, как ожидалось.
Моя доступная задача добавила имя исходной папки к пути назначения, в результате чего был создан этот путь, а затем исходная папка была создана внутри этой папки, эффективно удвоив структуру папок до /destination/path/source/source/...
--chmod
применяется ко второму source
папка, но не созданная как часть целевой структуры. Поэтому наверху source
принадлежит root, но второй source
принадлежит пользователю, он тоже должен принадлежать.
Исправлена моя недоступная задача, чтобы использовать правильный путь, а, следовательно, и эту проблему.
Интересно, стоит ли ожидать rsync
также chown
/chmod
папки, которые он создает как часть пути назначения?