it-swarm.com.de

Ansible: So legen Sie Verzeichnis- und Dateiberechtigungen rekursiv fest

In Ansible kann ich dies tun:

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

Außerdem werden der Besitzer, die Gruppe und die Berechtigungen für alle Verzeichnisse und Dateien in diesem Pfad rekursiv auf 0775 festgelegt. Aber ich möchte Verzeichnisse auf 0775 und Dateien auf 0664 setzen. Gibt es eine Möglichkeit, dies ansible zu machen?

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

setzt Verzeichnisse auf 755 und Dateien auf 644.

26
Adam Chance

Die Ansible-Datei-/Kopiermodule bieten nicht die Möglichkeit, Berechtigungen basierend auf dem Dateityp festzulegen. Sie müssten dies also höchstwahrscheinlich manuell tun, indem Sie folgende Schritte ausführen:

- 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 {} \;

Dies hätte zur Folge, dass {{ path }} rekursiv durchlaufen und die Berechtigungen für jede Datei oder jedes Verzeichnis in die angegebenen Berechtigungen geändert werden.

Quelle: https://stackoverflow.com/a/28782805/1306186

20
Zulakis

Wenn Sie die Moduldatei in Ansible verwenden möchten, können Sie:

file: dest =/foo/bar/somedir owner = root group = Apache mode = 0644 recurse = yes

file: dest =/foo/bar/somedir owner = root group = Apache mode = 0775

Mit dieser Methode setzen Sie zuerst die gesamte Datei (recurse = yes) auf '644' und dann setzen Sie/foo/bar/somedir auf '775'.

Dies ist nicht perfekt, da sich die Verzeichnisberechtigung jedes Mal ändert, wenn Sie Ihr Playbook abspielen. Aber zumindest ist es idempotent, nicht wie der Modulbefehl.

Wenn Sie den Status nicht ändern möchten, können Sie das Modul stat verwenden. Es listet alle Dateien und Verzeichnisse in/foo/bar/somedir auf, so dass Sie die Antwort registrieren und dann eine Schleife nur für diese Dateien erstellen.

8
gmangin

Ich bin mir nicht sicher, wie sinnvoll es wäre, Verzeichnisse auf 0775 (rwxrwxr-x) und Dateien auf 0644 (rw-r--r--) zu setzen: gruppenbeschreibbare Verzeichnisse, aber keine Dateien?

Wenn Sie beabsichtigen, Dateien auf 0664 (rw-rw-r--) zu setzen, um sicherzustellen, dass Dateien nicht ausführbar sind, während Verzeichnisse durchsucht werden können, gibt es eine elegante Lösung, die nur einen chmod-Befehl umfasst:

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

So kann es in Ansible verwendet werden:

- 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 gibt alle Änderungen aus, die wir verwenden können, um den Status "geändert" in Ansible einzufügen. Ich hoffe es macht Sinn.

5
Onlyjob

So ändern Sie Modifikationen nur bei Bedarf:

- 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