Ansible で CSV ファイルを操作する

Ansible で CSV ファイルを操作する

100 行を超える列を持つ 1 つの CSV ファイルがあり、列は次のようになります。

 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

現在、Ansible のファイル モジュール内で上記の CSV ファイルを反復処理/ループ処理しようとしています。yaml ファイルには次の内容が含まれています。

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

答え1

はcsv ファイル内で一意ではないため、pathas を使用して csv を辞書として解析することはできません。がそのファイル内でどのように処理されるかは明確ではありません。 これにより、後続のタスクで他の問題が発生する可能性があります...keypath{{ sid }}

この場合、keyモジュールにオプションをドロップすることで、リストとして解析する方がはるかに簡単になります。

    - read_csv:
        path: test.csv
      register: test

これで、結果を反復処理できます。

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

関連情報