Ansible: как рекурсивно установить разрешения для каталогов и файлов

в ansible, я могу сделать это:

file: dest=/foo/bar/somedir owner=root group=apache mode=0775 recurse=yes

и рекурсивно устанавливает владельца, группу и разрешения 0775 для всех каталогов и файлов в этом пути. Но я хочу установить каталоги на 0775, а файлы на 0664. Есть ли способ заставить ansible сделать это?

21
задан Edward Ned Harvey
25.11.2022 5:14 Количество просмотров материала 3103
Распечатать страницу

5 ответов

file: dest=/foo/bar/somedir owner=root group=apache mode=u=rwX,g=rX,o=rX recurse=yes

установит каталоги 755, а файлы 644.

12
отвечен Adam Chance 2022-11-26 13:02

Ansible модули архива / экземпляра не дают вам степень детализации определение разрешений на основе типа файла, поэтому вам, скорее всего, потребуется сделайте это вручную, выполнив что-то в следующем порядке:

- name: Ensure directories are 0755
  command: find {{ path }} -type d -exec chmod 0755 {} \;

- name: Ensure files are 0644
  command: find {{ path }} -type f -exec chmod 0644 {} \;

Они будут иметь эффект рекурсивного через {{ path }} и изменение разрешений для каждого файла или каталога на указанные разрешения.

источник:https://stackoverflow.com/a/28782805/1306186

17
отвечен Zulakis 2022-11-26 15:19

Если вы хотите использовать файл модуля в ansible, вы можете:

файл: dest=/foo/bar / somedir владелец=корневая группа=режим apache=0644 рекурс=да

файл: dest=/foo/bar / somedir владелец=корневая группа=режим apache=0775

с помощью этого метода вы сначала устанавливаете весь файл (recurse=yes) в '644', а затем устанавливаете /foo/bar/somedir в '775'.

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

Если вы не хотите иметь статус "изменен", вы можете использовать модуль стат. Он будет перечислять все файлы и каталог в /foo/bar / somedir, поэтому вы регистрируете ответ, а затем делаете цикл только для этих файлов.

9
отвечен gmangin 2022-11-26 17:36

Я не уверен, сколько смысла было бы установить каталоги 0775 (rwxrwxr-x) и файлы 0644 (rw-r--r--): групповые каталоги, но не файлы?

если вы хотите установить 0664 (rw-rw-r--) чтобы гарантировать, что файлы не являются исполняемыми, в то время как каталоги проходимы, существует элегантное решение, включающее только один chmod команда:

chmod -c -R ug=rw,o=r,a-x+X "{{top_dir}}"

вот как его можно использовать в Ansible:

- name: recursive chmod example
  command: |
    chmod -c -R ug=rw,o=r,a-x+X "{{item}}"
  register: chmod_status
  changed_when: chmod_status.stdout != ""
  with_items:
    - "/home/user/sample/dir"

chmod -c печать всех изменения, которые мы можем удобно использовать для заполнения статуса "изменено" в Ansible. Надеюсь, в этом есть смысл.

5
отвечен Onlyjob 2022-11-26 19:53

менять моды только при необходимости:

- name: make dirs 0755   
  command: find {{ your_path }} -type d ! -perm 0755 -exec chmod 0755 {} \;

- name: make files 0644   
  command: find {{ your_path }} -type f ! -perm 0644 -exec chmod 0644 {} \;
3
отвечен sjas 2022-11-26 22:10

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх