Требуется изменение разрешений для папки файлов вместе с помощью модуля синхронизации Ansible

#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 }}"