从Ansible写入csv文件中的特定单元格

从Ansible写入csv文件中的特定单元格,csv,module,ansible,lookup,Csv,Module,Ansible,Lookup,我试图找到是否有任何选项可以从Ansible写入CSV文件中的特定单元格。我可以使用Ansible lookup插件类型“csvfile”来查找csv文件中的值,但我需要向该文件添加文本。考虑下面的例子: empID,name,mark 111,user1 112,user2 113,user3 我需要为每个用户添加标记,运行playbook会提示输入empID和标记: --- - name: Update data hosts: localhost vars_prompt:

我试图找到是否有任何选项可以从Ansible写入CSV文件中的特定单元格。我可以使用Ansible lookup插件类型“csvfile”来查找csv文件中的值,但我需要向该文件添加文本。考虑下面的例子:

empID,name,mark
111,user1
112,user2
113,user3
我需要为每个用户添加标记,运行playbook会提示输入empID和标记:

---
- name: Update data
  hosts: localhost
  vars_prompt:
    - name: empid
      prompt: EMP_ID
      private: no
    - name: marks
      prompt: MARKS
      private: no
  tasks:
    - name: Lookup
      debug:
        msg: "{{ lookup('csvfile', '{{ empid }} file=data.csv delimiter=, col=2') }}"

需要帮助写入CSV文件C列第1、2、3行……

ansible中似乎没有提供
写入CSV
机制,部分原因是ansible不是通用计算平台。但是,您可以很容易地选择您想要的行为,或者您可以在

中找到一个现有的机制。ansible中似乎没有提供
write\u csv
机制,部分原因是ansible不是通用计算平台。但是,您可以很容易地选择您想要的行为,或者您可以在

中找到一个现有的,正如前面提到的,Ansible中没有现成的
write_csv
模块。在不创建自己的模块的情况下,我能想到的唯一解决方法是:

  • 使用
    read\u CSV
    模块读入CSV文件,并将数据表注册为字典变量
  • 使用键“mark”将新值递归地添加到dict变量中。(检查此项以修改dict变量中的值)
  • 使用
    lineinfle
    模块循环dict变量并将每一行输出到一个新文件。可以使用
    .csv
    扩展名创建文件,并且在每一行中,值都用分隔符(
    )分隔
  • 以下是一个例子:

    ---
    -主机:本地主机
    收集事实:不
    任务:
    -名称:从CSV文件读取
    community.general.read_csv:
    路径:data.csv
    关键字:empID
    分隔符:','
    寄存器:响应
    -名称:从CSV文件创建dict变量
    设定事实:
    数据目录:“{response.dict}”
    -名称:递归更新字典中的值
    设定事实:
    data_dict:{{data_dict|combine(new_item,recursive=true)}”
    变量:
    新的{u项:{{{item.key}}}:{'mark':'some_值'}}
    带{u dict:{{data_dict}}”
    -名称:调试
    调试:
    msg:“{data_dict}}”
    -名称:将ddata_dict头保存到新的CSV文件
    线条填充:
    路径:new_data.csv
    行:empID、名称、标记
    创建:是
    -名称:将数据保存到新的CSV文件
    线条填充:
    路径:new_data.csv
    行:“{item.value.empID},{{item.value.name},{{item.value.mark}”
    循环:{{data_dict}dict2items}
    
    输出的CSV文件为:

    empID,name,mark
    111,user1,some_value
    112,user2,some_value
    113,user3,some_value
    

    正如@mdaniel提到的,Ansible中没有现成的
    write_csv
    模块。在不创建自己的模块的情况下,我能想到的唯一解决方法是:

  • 使用
    read\u CSV
    模块读入CSV文件,并将数据表注册为字典变量
  • 使用键“mark”将新值递归地添加到dict变量中。(检查此项以修改dict变量中的值)
  • 使用
    lineinfle
    模块循环dict变量并将每一行输出到一个新文件。可以使用
    .csv
    扩展名创建文件,并且在每一行中,值都用分隔符(
    )分隔
  • 以下是一个例子:

    ---
    -主机:本地主机
    收集事实:不
    任务:
    -名称:从CSV文件读取
    community.general.read_csv:
    路径:data.csv
    关键字:empID
    分隔符:','
    寄存器:响应
    -名称:从CSV文件创建dict变量
    设定事实:
    数据目录:“{response.dict}”
    -名称:递归更新字典中的值
    设定事实:
    data_dict:{{data_dict|combine(new_item,recursive=true)}”
    变量:
    新的{u项:{{{item.key}}}:{'mark':'some_值'}}
    带{u dict:{{data_dict}}”
    -名称:调试
    调试:
    msg:“{data_dict}}”
    -名称:将ddata_dict头保存到新的CSV文件
    线条填充:
    路径:new_data.csv
    行:empID、名称、标记
    创建:是
    -名称:将数据保存到新的CSV文件
    线条填充:
    路径:new_data.csv
    行:“{item.value.empID},{{item.value.name},{{item.value.mark}”
    循环:{{data_dict}dict2items}
    
    输出的CSV文件为:

    empID,name,mark
    111,user1,some_value
    112,user2,some_value
    113,user3,some_value