如何在远程服务器上读取和解析CSV文件,而不是在ansible机器/localhost上进行?

c86crjj0  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(166)

我原来的剧本和任务是为了在本地主机上运行:

- name: Fetch file
  fetch:
    src: \\10.14.2.130\shared\folder\Data\{{ filename }}
    dest: /var/lib/awx/projects/Windows/
    flat: yes
  delegate_to: 10.12.201.60
  become: yes
  become_method: runas
  become_user: SYSTEM

- name: Initialise data list
  set_fact:
    data_list: []
  delegate_to: localhost

- name: Read input file
  read_csv:
    path: "{{ filename }}"
    key: FirstName  
    fieldnames: FirstName,LastName,EmailAddress
    delimiter: ','
  register: userdata
  delegate_to: localhost

- name: Extract the list
  set_fact:
    data_list: "{{ data_list + [{ 'FirstName': item.FirstName, 'LastName': item.LastName, 'EmailAddress': item.EmailAddress }] }}"
  loop: "{{ userdata | community.general.json_query('dict.[*][0]') }}"

- name: Set fact for data_list
  set_fact: 
    data_list: "{{ data_list[1:] }}"

由于第一个任务失败,我无法将csv文件“{{ filename }}”提取到ansible机器中,我修改了剧本的一些细节,即C驱动器中CSV文件的“delegate_to”和路径,然后在Windows主机上运行剧本:

- name: copy file
  win_copy:
    src: \\10.14.2.130\shared\folder\Data\{{ filename }}
    dest: C:/
    remote_src: true
  delegate_to: 10.12.201.60
  become: yes
  become_method: runas
  become_user: SYSTEM

- name: Initialise data list
  set_fact:
    data_list: []

- name: Read input file
  read_csv:
    path: C:\{{ filename }}
    key: FirstName  
    fieldnames: FirstName,LastName,EmailAddress
    delimiter: ','
  register: userdata
  delegate_to: 10.12.201.60

- name: Extract the list
  set_fact:
    data_list: "{{ data_list + [{ 'FirstName': item.FirstName, 'LastName': item.LastName, 'EmailAddress': item.EmailAddress }] }}"
  loop: "{{ userdata | community.general.json_query('dict.[*][0]') }}"

- name: Set fact for data_list
  set_fact: 
    data_list: "{{ data_list[1:] }}"

这是我运行Playbook后得到的错误:

fatal: [10.12.201.60]: FAILED! => {
    "msg": "The module read_csv was redirected to community.general.read_csv, which could not be loaded."

如何在另一个远程服务器而不是本地主机上成功运行这些任务集?

6ioyuze2

6ioyuze21#

简而言之:

- hosts: 10.12.201.60
  gather_facts: false

  tasks:
    - name: Parse csv
      read_csv:
        path: "\\10.14.2.130\shared\folder\Data\{{ filename }}"
        key: FirstName  
        fieldnames: FirstName,LastName,EmailAddress
        delimiter: ','
      register: userdata

    - name: Extract the list
      set_fact:
        data_list: "{{ data_list | d([]) + [{ 'FirstName': item.FirstName, 'LastName': item.LastName, 'EmailAddress': item.EmailAddress }] }}"
      loop: "{{ userdata | community.general.json_query('dict.[*][0]') }}"

    - name: Set fact for data_list
      set_fact: 
        data_list: "{{ data_list[1:] }}"
  • 注意:在处理此数据时,还有其他优化/良好实践要应用,但如果没有适当的示例数据和预期结果,我真的无法猜测。目标是回答您的直接问题 *

相关问题