我遇到一種情況,我有一個包含超過 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 }}"