![使用 Ansible 处理 CSV 文件](https://linux22.com/image/747497/%E4%BD%BF%E7%94%A8%20Ansible%20%E5%A4%84%E7%90%86%20CSV%20%E6%96%87%E4%BB%B6.png)
我遇到这样一种情况:我有一个包含超过 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 解析为字典path
,key
因为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 }}"