2017-05-22 1 views
0

Ich versuche, ein Playbook zu machen, um Berechtigungen auf allen Servern zu ändern, aber ich muss einige Verzeichnisse und Dateien ausschließen. Ich versuche, die Dateizuordnung dynamisch zu machen, wie Sie sehen, ich habe 2 ausgeschlossen, aber ich möchte es verallgemeinern oder dynamisch machen. PLZ vorschlagen.wie man ausgeschlossene Variablen dynamisch in ansible macht

Below mein Textbuch ist, beachten Sie bitte i Verzeichnisstruktur bin mit:

permission.yml: 
--- 
- hosts: 127.0.0.1 
    roles: 
    - { role: fileperm, target_dir: "/tmp/testingpermissions" } 
    - { role: fileperm, target_dir: "/tmp/abc" } 
    - { role: fileperm, target_dir: "/amp/app/tomcatdefault7055" } 


Vars: 
main.yml: 
    --- 
    exclude1: "/tmp/testingpermissions/plugins" 
    exclude2: "/tmp/testingpermissions/files" 


tasks: 
main.yml: 
--- 
- name: Ensure directories are 0755 
    command: find {{ target_dir }} -type d ! -path "{{ exclude1 }}*" ! -path "{{ exclude2 }}*" -exec chmod -c 0755 {} \; 
    register: chmod_result 
    changed_when: "chmod_result.stdout != \"\"" 
+0

Willkommen zu StackOverflow. Sie sollten den [ask] Guide lesen, bevor Sie eine Frage stellen. Für weitere Informationen über die Website können Sie die [Tour] Seite besuchen. –

Antwort

0

Sie könnten die ‚Datei‘ Modul und eine Schleife durch die Liste der Verzeichnisse verwenden, die ihre Berechtigungen geändert haben müssen, z.B. etw wie dies in den Vars:

# /vars/main.yml 
updatepermissions: 
    - "/tmp/testingpermissions" 
    - "/tmp/abc" 
    - "/amp/app/tomcatdefault7055" 

... und dann so etw in den Aufgaben:

# /tasks/main.yml 
- name: Set directory permissions to 0755 
    file: 
    path: "{{ item }}" 
    state: directory 
    mode: 0755 
    with_items: "{{ updatepermissions }}" 

Dadurch werden die Berechtigungen für nur die Verzeichnisse festgelegt, die Sie angeben. Anstatt also die Berechtigungen für alle außer einigen wenigen Ausnahmen zu aktualisieren, aktualisieren Sie nur die Berechtigungen für eine festgelegte Liste von Verzeichnissen, die die angegebenen Berechtigungen benötigen.

Für Verzeichnisse, in denen Sie keine Unterverzeichnisse von der Einstellung von Berechtigungen ausschließen möchten, können Sie "recurse = yes" hinzufügen.

Andernfalls, wenn Sie den Befehl Aufgabe mit "! -path" bevorzugen, könnten Sie vielleicht so etwas wie dies tun:

# /vars/main.yml 
updatepermissions: 
    - include: "/tmp/testingpermissions" 
    exclude: "! -path \"/tmp/testingpermissions/plugins\" ! -path \"/tmp/testingpermissions/abc\"" 
    - include: "/some/other/directory" 
    exclude: "" 

und dann in den Aufgaben etw wie folgt aus:

# /tasks/main.yml 
- name: update permissions 
    command: "find {{ item.include }} -type d {{ item.exclude }} -exec chmod -c 0755 {} \;" 
    register: chmod_result 
    changed_when: "chmod_result.stdout != \"\"" 
    with_items: "{{ updatepermissions }}" 
+0

Danke, das hilft, aber meine Anforderung ist, ich habe 30 40 verschiedene Pfade, die NAS-Halterungen sind, die ich markieren möchte. Es scheint also nicht gut zu sein, alle Pfade fest zu codieren. Kann ich es aus einer Datei lesen und dann verwenden? Zum Beispiel habe ich 20 Server, ich möchte zu jedem von ihnen gehen, einen Befehl ausführen, um alle NAS-Mounts herauszunehmen und sie dann aus chmod heraus zu markieren. irgendwelche Ideen plz. –

Verwandte Themen