使用 Ansible 处理 CSV 文件

使用 Ansible 处理 CSV 文件

我遇到这样一种情况:我有一个包含超过 100 行的 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

您无法使用 as 将 csv 解析为字典pathkey因为path在 csv 文件中它不是唯一的。目前还不清楚{{ 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 }}"

相关内容