Arbeiten mit einer CSV-Datei mit Ansible

Arbeiten mit einer CSV-Datei mit Ansible

Ich habe eine Situation, in der ich eine CSV-Datei mit über 100 Zeilen habe. Die Spalten sehen wie folgt aus:

 path,owner,group,mode
/prod/home/{{ sid }},root,root,755
/prod/FS/{{ sid }},sapadm,sys,770
/prod/FS/{{ sid }},adm,sys,0770
/prod/FS/{{ sid }},adm,sys,0770
/prod/FS/{{ sid }},sys,sys,0770
/prod/FS/{{ sid },adm,ftp,0770

Derzeit versuche ich, die obige CSV-Datei in Ansible im Dateimodul zu iterieren/zu durchlaufen: Die YAML-Datei enthält Folgendes:

---
    - hosts: localhost
      connection: local
      gather_facts: no
      tasks:
        - read_csv:
            path: test.csv
            key: path
          register: test
        - name: Check File Systems for Any changes
          file:
            path: "{{ item.value.path}}"
            owner: "{{ item.value.owner }}"
            group: "{{ item.value.group }}"
            mode: "{{ item.value.mode }}"
            state: directory 
            recurse: no 
          loop: "{{ test.dict|dict2items }}"

Antwort1

Sie können die CSV-Datei nicht als Dict mit „ pathas“ analysieren, keyda path„as“ in Ihrer CSV-Datei nicht eindeutig ist. Es ist nicht wirklich klar, wie {{ sid }}in dieser Datei damit umgegangen wird. Dies könnte bei Ihren nachfolgenden Aufgaben zu anderen Problemen führen ...

In diesem Fall ist es viel einfacher, es als Liste zu analysieren, indem man die keyOption auf das Modul löscht:

    - read_csv:
        path: test.csv
      register: test

Jetzt können Sie das Ergebnis iterieren:

    - name: Check File Systems for Any changes
      file:
        path: "{{ item.path }}"
        owner: "{{ item.owner }}"
        group: "{{ item.group }}"
        mode: "{{ item.mode }}"
        state: directory 
        recurse: no 
      loop: "{{ test.list }}"

verwandte Informationen